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

时间:2012-06-26 09:23:49

标签: compiler-construction cmake c-preprocessor

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

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

这有助于查看是否已启用优化以及在命令行中启用了哪些开关。

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

如何使用CMake实现这一目标?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

对于除MSVC之外的所有选项,而不是创建预处理器定义,您可能只需在构建或添加时使用make VERBOSE=1

set(CMAKE_VERBOSE_MAKEFILE ON)

到您的CMakeLists.txt。

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