CMake:静态库和共享库的不同编译定义
CMake: Different compile definitions for static and shared library
在使用cmake的项目中,我构建了两个版本的库,一个是静态的,一个是动态链接的。对于单个源文件,我想传递一个不同的编译定义(即-Dfoo=bar
) 仅在针对共享库进行编译时。
我知道set_target_properties
可以将COMPILE_DEFINITIONS
用于单个源,但我不知道如何仅为共享库添加该定义。
如何做到这一点?
编辑
为了澄清这个问题的不同之处,我已经在制作同一个库的两个版本。
add_library(static_lib STATIC foo.cpp bar.cpp)
add_library(dyn_lib SHARED foo.cpp bar.cpp)
我想做的是添加foo.cpp
仅在为dyn_lib
编译foo.cpp
时-Dbaz=True
编译的目标属性。
为库目标dyn_lib
编译的对象添加定义-Dbaz=True
的最简单方法是使用 target_compile_definition()。
target_compile_definition(dyn_lib PRIVATE -Dbaz=True)
这实际上是为目标设置COMPILE_DEFINITIONS
属性dyn_lib
的较短版本。
set_target_properties(dyn_lib PROPERTIES COMPILE_DEFINITIONS -Dbaz=True)
要使用定义编译单个源文件-Dbaz=True
请使用 set_source_files_properties()。
set_source_files_properties(file.cpp PROPERTIES COMPILE_DEFINITIONS -Dbaz=True)
相关文章:
- 编译C++时未定义的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 标准是否严格定义了该程序应该如何编译?
- 如何摆脱为条件编译定义预处理器宏的需要?
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 在编译它时显示未定义的引用
- 使用宏编译时使用用户定义的数学函数,或者仅使用 c++ 中标准数学库中的函数
- 编译问题:在函数"_start"中:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 良好做法:如何定义用于编译的外部库的路径
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 如何在编译时定义C++预处理器指令的值?
- libssh 问题编译问题未定义的错误
- 编译 GPU 的张量流示例自定义操作
- 为什么我的C++代码无法编译,出现未定义的引用错误
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 使用 C++17 编译特征需要_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING定义
- CMake:静态库和共享库的不同编译定义