[英]How to build static and shared library at the same time through cmake
我正在學習Windows上的cmake。
我閱讀並運行了此示例,以便可以從一個Visual Studio項目構建靜態庫和共享庫。
我發現此命令:
add_library(math SHARED ${MATH_SOURCES} ${SIMPLE_FUNCTION_SOURCES} ${ADVANCED_FUNCTION_SOURCES})
根據我的理解,此命令正在構建共享庫。 另外,從這里開始 ,如果要構建靜態和共享庫,則必須由兩個項目來完成。
那么,為什么我使用的第一個示例可以從一個Visual Studio項目構建兩個庫?
編輯
感謝Florian
,關鍵是在MathExports.h
。 為了讓人們更容易看到,我將文件放在這里:
#ifndef MathExports_h
#define MathExports_h
#ifdef _WIN32
#ifdef math_EXPORTS
#define MATH_EXPORT __declspec( dllexport )
#else
#define MATH_EXPORT __declspec( dllimport )
#endif
#else
#define MATH_EXPORT
#endif
#endif // MathExports_h
鏈接的示例未構建獨立的靜態math
庫。 它確實具有“ exports”(請參閱MathExports.h
),因此它正在生成一個附加的import .lib
(它引用了構建共享庫)。
當您針對DLL“鏈接”時,將使用此導入庫。
您可以使用
dumpbin /symbols math.lib
查看math.lib
對math.dll
的引用。
參考文獻
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.