我有一个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实现这一目标?
答案 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 ++ - >命令行和属性页 - >配置属性 - >链接器 - >命令行。