【问题标题】:How to build static and shared library at the same time through cmake如何通过cmake同时构建静态库和共享库
【发布时间】:2016-07-20 07:28:54
【问题描述】:

我正在 Windows 上学习 cmake。
我阅读并运行了 this example,以便我可以从一个 Visual Studio 项目构建静态库和共享库。
我找到了这个命令:

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

据我了解,这个命令是构建共享库。另外,从here,如果我想构建静态和共享库,我必须通过两个项目来完成。

那么,为什么我使用的第一个示例可以从一个 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

【问题讨论】:

    标签: c++ visual-studio cmake


    【解决方案1】:

    链接的示例没有构建独立的静态 math 库。它确实有“导出”(参见MathExports.h),因此它生成了一个额外的导入.lib(它引用了构建共享库)。

    当您“链接”到 DLL 时会使用此导入库。

    你可以使用

    dumpbin /symbols math.lib
    

    查看math.libmath.dll 中的引用。

    参考文献

    【讨论】:

      猜你喜欢
      • 2011-01-10
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2021-09-10
      • 2023-03-03
      相关资源
      最近更新 更多