首页 > 解决方案 > Cmake add_compile_definitions 但适用于所有目标

问题描述

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

add_compile_definitions(MYDEFINITION)

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

标签: c++ccmake

解决方案


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

add_library(common INTERFACE)

target_compile_definition(common INTERFACE MYDEFINITION)

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

target_compile_options(common INTERFACE
    $<$<CXX_COMPILER_ID:MSVC>:/Wall>
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra>
)

在 common 目标中设置好常用的东西后,可以在需要的地方使用:

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

target_link_libraries(mylib PRIVATE common)
target_link_libraries(myexe PRIVATE common)

推荐阅读