add_compile_definitions()
用于为当前目录中的所有目标添加编译器定义;还有针对单个目标的 target_compile_definitions()
。但是 - 在我看来,一般情况应该是特定于语言的,而不是绝对所有目标。为什么 C 和 Rust 使用相同的定义?
那么 - 除了一次一个之外,是否有某种方法可以向单一语言的所有目标添加定义?
尝试在顶级 CMakeLists.txt 文件(或您希望应用到的任何变量范围)顶部使用
add_compile_definitions
和 $<COMPILE_LANGUAGE:languages>
生成器表达式(需要 cmake_minimum_required(VERSION 3.3)
)。例如
add_compile_definitions("$<$<COMPILE_LANGUAGE:C,CXX>:-DFOO>")
如果您的
cmake_minimum_required
小于 3.3,我想您可以 append 到 CMAKE_<LANG>_FLAGS
。例如
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DFOO=bar")
假设您的语言是 MYLANG,并且使用命令行上的
-DFOO=bar
将定义传递给编译器。这应该可以满足您的要求:
set(CMAKE_MYLANG_FLAGS "${CMAKE_MYLANG_FLAGS} -DFOO=bar")
...但它相当丑陋。