Cmake add_compile_definitions 但适用于所有目标

Had*_*ber 6 c c++ cmake

有没有办法在 cmake 中为创建的所有目标创建定义。到目前为止当我

add_compile_definitions(MYDEFINITION)
Run Code Online (Sandbox Code Playgroud)

在我的根 CmakeLists.txt 中,它似乎只为该文件中创建的目标创建这些定义。但我想为子目录中创建的所有目标创建定义。做这个的最好方式是什么?

Gui*_*cot 8

我为所有目标设置属性的常用解决方案只是添加一个common目标,该目标具有我想要添加到所有目标的接口属性。

add_library(common INTERFACE)

target_compile_definitions(common INTERFACE MYDEFINITION)
Run Code Online (Sandbox Code Playgroud)

巧妙的是您还可以添加其他内容,例如警告设置:

target_compile_options(common INTERFACE
    $<$<CXX_COMPILER_ID:MSVC>:/Wall>
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra>
)
Run Code Online (Sandbox Code Playgroud)

在公共目标中设置好公共的东西后,就可以在需要的时候使用它:

add_library(mylib ...)
add_executable(myexe ...)

target_link_libraries(mylib PRIVATE common)
target_link_libraries(myexe PRIVATE common)
Run Code Online (Sandbox Code Playgroud)