如何通过cmake同时构建静态库和共享库

How to build static and shared library at the same time through cmake

本文关键字:静态 共享 构建 何通过 cmake      更新时间:2023-10-16

我正在windows上学习cmake
我阅读并运行了这个例子,这样我就可以从一个visualstudio项目中构建静态库和共享库
我发现了这个命令:

add_library(math SHARED ${MATH_SOURCES} ${SIMPLE_FUNCTION_SOURCES} ${ADVANCED_FUNCTION_SOURCES})

据我了解,这个命令是在建设共享图书馆。此外,从这里开始,如果我想构建静态和共享库,我必须通过两个项目来完成

那么,为什么我使用的第一个示例可以从一个VisualStudio项目构建两个库呢

编辑
感谢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库。它确实有"导出"(请参见MathExports.h),因此它生成了一个额外的导入.lib(它引用了构建共享库)。

当您针对DLL"链接"时,将使用此导入库。

你可以使用

dumpbin /symbols math.lib

以查看CCD_ 6至CCD_。

参考

  • 检查.lib文件的工具
  • 让CMake为MSVC构建共享库
  • 导入库是如何工作的?详细信息
  • 如何在Visual C++中构建导入库(.lib)和DLL