File tree Expand file tree Collapse file tree 8 files changed +110
-0
lines changed
Expand file tree Collapse file tree 8 files changed +110
-0
lines changed Original file line number Diff line number Diff line change 1+ ## wholearchive:
2+
3+ Export static library content from another shared library
Original file line number Diff line number Diff line change 1+ if (_ACTION == nil ) then
2+ return
3+ end
4+
5+ local LocationDir = " solution/%{_ACTION}"
6+
7+ workspace " Project"
8+ location (LocationDir )
9+ configurations {" Debug" , " Release" }
10+
11+ objdir (path .join (LocationDir , " obj" )) -- premake adds $(configName)/$(AppName)
12+ targetdir (path .join (LocationDir , " bin/%{cfg.buildcfg}" ))
13+
14+ startproject " app"
15+
16+ project " app"
17+ kind " ConsoleApp"
18+ targetname " app"
19+
20+ files { " src/main.cpp" }
21+
22+ defines { ' USING_DLL' , ' USING_DLL_LIB' }
23+ links ' dll'
24+
25+ project " dll"
26+ kind " SharedLib"
27+ targetname " dll"
28+
29+ files { " src/dll.cpp" , ' src/dll.h' }
30+
31+ defines { ' MAKING_DLL' , ' MAKING_DLL_LIB' }
32+ filter { ' toolset:msc*' }
33+ dependson ' lib'
34+ linkoptions { ' /WHOLEARCHIVE:bin/%{cfg.buildcfg}/lib.lib' }
35+ filter { ' toolset:gcc' , ' system:windows' }
36+ dependson ' lib'
37+ linkoptions { ' -Wl,--whole-archive bin/%{cfg.buildcfg}/lib.lib -Wl,--no-whole-archive' }
38+ filter { ' toolset:gcc' , ' system:not windows' }
39+ dependson ' lib'
40+ linkoptions { ' -Wl,--whole-archive bin/%{cfg.buildcfg}/lib.a -Wl,--no-whole-archive' }
41+ filter {}
42+ -- links 'lib'
43+
44+ project " lib"
45+ kind " StaticLib"
46+ targetname " lib"
47+
48+ defines { ' MAKING_DLL_LIB' }
49+ files { " src/lib.cpp" , ' src/lib.h' }
50+
51+ project " test"
52+ kind " ConsoleApp"
53+ targetname " test"
54+
55+ files { " src/test.cpp" }
56+ links ' lib'
Original file line number Diff line number Diff line change 1+ #include " dll.h"
2+
3+ void foo () {}
Original file line number Diff line number Diff line change 1+ #include "lib.h"
2+
3+ #ifdef _MSC_VER
4+ # ifdef MAKING_DLL
5+ # define IMPORT_EXPORT __declspec(dllexport)
6+ # elif defined(USING_DLL )
7+ # define IMPORT_EXPORT __declspec(dllimport)
8+ # else // not making nor using DLL
9+ # define IMPORT_EXPORT
10+ # endif
11+ #else
12+ # define IMPORT_EXPORT
13+ #endif
14+
15+ IMPORT_EXPORT void foo ();
Original file line number Diff line number Diff line change 1+ #include " lib.h"
2+
3+ void bar ()
4+ {
5+ }
Original file line number Diff line number Diff line change 1+ #pragma once
2+
3+ #ifdef _MSC_VER
4+ # ifdef MAKING_DLL_LIB
5+ # define IMPORT_EXPORT_LIB __declspec(dllexport)
6+ # elif defined(USING_DLL_LIB )
7+ # define IMPORT_EXPORT_LIB __declspec(dllimport)
8+ # else // not making nor using DLL
9+ # define IMPORT_EXPORT_LIB
10+ # endif
11+ #else
12+ # define IMPORT_EXPORT_LIB
13+ #endif
14+
15+ IMPORT_EXPORT_LIB void bar ();
Original file line number Diff line number Diff line change 1+ #include " dll.h"
2+
3+ int main ()
4+ {
5+ bar ();
6+ foo ();
7+ }
Original file line number Diff line number Diff line change 1+ #include " lib.h"
2+
3+ int main ()
4+ {
5+ bar ();
6+ }
You can’t perform that action at this time.
0 commit comments