在“现代cmake”游戏中,我有点晚了,试图追赶。阅读以目标为中心的范式后的一个问题是如何在多个目标之间共享属性(包括,编译选项,定义等)?
更具体地说,我的项目仅涉及几个库和多个可执行文件作为目标。它们几乎共享相同的内容,包括语言功能等。我是否需要针对每个目标重复它们?还是只有一个目标足以满足其余目标?或任何其他替代方式? TIA。
答案 0 :(得分:1)
如果目标之间存在依赖性,那么如果您使用(?!\\p{L})
可见性,那么target_include_libraries
和其他target_
命令将负责传播属性:
PUBLIC
如果目标之间没有依赖关系,则可以通过CMake变量共享选项:
add_library(foo ...)
target_include_directories(foo PUBLIC foo_includes)
add_executable(bar ...)
# foo_includes propagate to bar.
target_link_libraries(bar foo)