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

CMake: Different compile definitions for static and shared library

本文关键字:编译 定义 共享 静态 CMake      更新时间:2023-10-16

在使用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)