使用 CMake 将编译器命令行传递给预处理器

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

我有一个 CMake 项目,我希望能够使用 g++、MinGW/g++(各 4.x)、Clang (3.x) 和 MSVC++ (>= V8) 进行编译。

我想要一个带有编译器参数或命令行的预编译器符号。

这对于查看是否启用了优化以及在命令行启用了哪些开关非常有用。

例如使用

g++ -O3 -DNDEBUG -g0
编译的程序应该知道标志是
"-O3 -DNDEBUG -g0"
。 在编写手动 Makefile 时,我可以简单地收集变量中的标志,然后将其另外传递给编译器,生成命令行
g++ -O3 -DNDEBUG -g0 -DCOMPILER_ARGS="-O3 -DNDEBUG -g0"

如何使用 CMake 实现此目的?

cmake g++ c-preprocessor
2个回答
0
投票

对于除 MSVC 之外的所有选项,您可能应该在构建或添加时使用

make VERBOSE=1
,而不是创建预处理器定义

set(CMAKE_VERBOSE_MAKEFILE ON)

到您的 CMakeLists.txt。

对于 MSVC,您可以从 IDE 中检查每个项目的命令行参数:属性页 -> 配置属性 -> C/C++ -> 命令行和属性页 -> 配置属性 -> 链接器 -> 命令行。


-1
投票

add_definitions("-DCOMPILER_ARGS=\"${CMAKE_CXX_FLAGS}\")

但请注意,

CMAKE_CXX_FLAGS
变量仅包含用户设置的标志。如果您想要整套编译标志,请使用目标属性
COMPILE_FLAGS
。这个值可以通过
get_target_property()
函数获得。

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