CMake:静态和共享库的不同编译定义

时间:2017-09-25 13:22:47

标签: c++ cmake shared-libraries

在使用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编译-Dbaz=True时添加foo.cpp仅使用dyn_lib 编译的目标属性

1 个答案:

答案 0 :(得分:1)

为为-Dbaz=True编译的对象添加定义dyn_lib的最简单方法是使用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)