cmake 有没有一种方法可以只为一种语言添加_definitions?[重复]

weylhg0b  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(171)

此问题已在此处有答案

different INTERFACE compiler options for different languages(2个答案)
3天前关闭。
截至3天前,社区正在审查是否重新讨论此问题。
CMake提供add_compile_definitions(),用于为当前目录下的所有目标添加编译器定义;还有target_compile_definitions()用于单独的目标。但是-在我看来,一般情况下应该是特定于语言的,而不是绝对所有的目标。为什么会,比如说,C和Rust使用相同的定义?
那么,除了一次定义一个目标之外,有没有其他方法可以为单一语言的所有目标添加定义?

hgb9j2n6

hgb9j2n61#

假设你的语言是MYLANG,并且定义在命令行上使用-DFOO=bar传递给编译器。这应该可以完成你所要求的:

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

……但它相当丑陋。

fwzugrvs

fwzugrvs2#

尝试在顶级CMakeLists.txt文件的顶部使用add_definitions(或者您希望将其应用到的任何变量范围),并使用$<COMPILE_LANGUAGE:languages>generator expression(需要cmake_minimum_required(VERSION 3.3))。

add_compile_definitions("$<$<COMPILE_LANGUAGE:C,CXX>:-DFOO>")

如果cmake_minimum_required小于3.3,我想可以追加到CMAKE_<LANG>_FLAGS.ex。

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

相关问题