如何通过cmake同时构建静态库和共享库
How to build static and shared library at the same time through cmake
我正在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
相关文章:
- 将静态库链接到不带-fPIC的共享库中
- C++两个源文件之间共享的枚举的静态实例
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- Android NDK:用于第三方Java库的静态或共享C++运行时
- 仅在少数方法(静态或共享库)中解析的外部符号
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 函数范围的静态变量如何导致与共享库中函数代码的未来使用不兼容
- 如何在共享库中保留静态库中的自由函数
- Cmake 查找模块用于区分共享库或静态库
- 指向静态常量对象的共享指针?
- 从静态库构建共享库
- 如何从静态c和c++库创建共享c库
- 将共享对象与静态库链接
- 共享库中静态功能成员的破坏顺序
- 使用 MapViewOfFile 分配静态共享内存
- 为多个类实例维护共享_ptr的静态列表
- 使用C 中的共享_ptr从公共静态成员函数访问私有构造函数
- Cython:无法调用共享库的非静态方法
- 两个C++库如何共享一个静态缓冲区?
- 在使用自动工具构建静态/共享库时,如何避免双重编译