【发布时间】:2018-03-06 11:47:19
【问题描述】:
在一个使用 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)
我想做的是在为dyn_lib 编译foo.cpp 时添加foo.cpp 用-Dbaz=True 编译的目标属性仅。
【问题讨论】:
-
我在许多项目中看到的常见模式是有 2 个目标 - 用于静态库和共享一个。使用 2 个目标,您可以为它们设置不同的标志。
-
@arrowd 我对cmake一无所知。我只知道如何将源目标作为
add_library(${lib_name} (STATIC|SHARED) ${list of sources})添加到库中。你的意思是在源文件名和添加add_library命令之间做某种程度的间接? -
我的意思是,您应该对
add_library()进行 2 次调用 - 一个用于静态库,另一个用于共享。
标签: c++ cmake shared-libraries