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

如何在CMake中跨多个目标共享属性?,cmake,Cmake,我在“现代cmake”游戏中有点晚了,我正努力赶上。在阅读了以目标为中心的范例之后,一个问题是如何跨多个目标共享属性(包括、编译选项、定义等) 更具体地说,我的项目只涉及几个库和多个可执行文件作为目标。它们几乎共享相同的内容、语言功能等。我需要为每个目标重复它吗?或者仅仅一个目标就足够了?或者其他替代方法?TIA。如果目标之间存在依赖关系,则如果使用公共可见性,则其他目标命令将负责传播属性: add_library(foo ...) target_include_directories(foo

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


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

如果目标之间存在依赖关系,则如果使用
公共
可见性,则其他
目标
命令将负责传播属性:

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

add_executable(bar ...)
# foo_includes propagate to bar.
target_link_libraries(bar foo)
如果目标之间没有依赖关系,您可以通过CMake变量共享期权:

set(my_includes ...)

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

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