有没有办法只为单一语言添加定义? [重复]

问题描述 投票:0回答:2

CMake 提供

add_compile_definitions()
用于为当前目录中的所有目标添加编译器定义;还有针对单个目标的
target_compile_definitions()
。但是 - 在我看来,一般情况应该是特定于语言的,而不是绝对所有目标。为什么 C 和 Rust 使用相同的定义?

那么 - 除了一次一个之外,是否有某种方法可以向单一语言的所有目标添加定义?

cmake preprocessor
2个回答
1
投票

尝试在顶级 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")

0
投票

假设您的语言是 MYLANG,并且使用命令行上的

-DFOO=bar
将定义传递给编译器。这应该可以满足您的要求:

set(CMAKE_MYLANG_FLAGS "${CMAKE_MYLANG_FLAGS} -DFOO=bar")

...但它相当丑陋。

© www.soinside.com 2019 - 2024. All rights reserved.