[英]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.