如何在 CMake 中跨多个目标共享属性?

pyt*_*152 3 cmake

我在“现代 cmake”游戏中有点晚了,并试图赶上。阅读以目标为中心的范式后的一个问题是如何在多个目标之间共享属性(包括、编译选项、定义等)?

更具体地说,我的项目仅涉及一些库和多个可执行文件作为目标。它们几乎共享相同的包含内容、语言功能等。我需要为每个目标重复它吗?或者只有一个目标就足以满足其余目标?或任何其他替代方式?TIA。

vit*_*aut 5

如果目标之间存在依赖关系,那么如果您使用可见性target_include_libraries,其他target_命令将负责传播属性PUBLIC

add_library(foo ...)
target_include_directories(foo PUBLIC foo_includes)

add_executable(bar ...)
# foo_includes propagate to bar.
target_link_libraries(bar foo)
Run Code Online (Sandbox Code Playgroud)

如果目标之间没有依赖关系,您可以通过 CMake 变量共享选项:

set(my_includes ...)

add_library(foo ...)
target_include_directories(foo PUBLIC ${my_includes})

add_library(bar ...)
target_include_directories(bar PUBLIC ${my_includes})
Run Code Online (Sandbox Code Playgroud)