Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 使用CMake将编译器命令行传递给预处理器_Compiler Construction_Cmake_C Preprocessor - Fatal编程技术网

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

Compiler construction 使用CMake将编译器命令行传递给预处理器,compiler-construction,cmake,c-preprocessor,Compiler Construction,Cmake,C Preprocessor,我有一个CMake项目,我希望能够使用g++、MinGW/g++4.x、Clang3.x和MSVC++>=V8来编译 我想要一个带有编译器参数或命令行的预编译器符号 这对于查看是否启用了优化以及在命令行中启用了哪些开关非常有用 例如,使用g++-O3-DNDEBUG-g0编译的程序应该知道标记为-O3-DNDEBUG-g0。 在编写手动生成文件时,我可以简单地收集变量中的标志,然后再将其传递给编译器,生成命令行g++-O3-DNDEBUG-g0-DCOMPILER_ARGS=-O3-DNDEBU

我有一个CMake项目,我希望能够使用g++、MinGW/g++4.x、Clang3.x和MSVC++>=V8来编译

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

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

例如,使用g++-O3-DNDEBUG-g0编译的程序应该知道标记为-O3-DNDEBUG-g0。 在编写手动生成文件时,我可以简单地收集变量中的标志,然后再将其传递给编译器,生成命令行g++-O3-DNDEBUG-g0-DCOMPILER_ARGS=-O3-DNDEBUG-g0

如何使用CMake实现这一点?

添加\u定义-DCOMPILER\u ARGS=\${CMake\u CXX\u标志}\


但请注意,CMAKE_CXX_FLAGS变量只包含用户设置的标志。如果希望使用整套编译标志,请使用目标属性compile\u标志。此值可以通过get_target_属性函数获得。

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

set(CMAKE_VERBOSE_MAKEFILE ON)
到您的CMakeLists.txt


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

-1 CMAKE_CXX_标志在Windows上默认为非空。此外,这会忽略配置特定变量中的所有标志,如CMAKE_CXX_flags_DEBUG。好的,我没有说它在windows上是空的。我说编译标志有所有的标志。无论如何,感谢-1,现在我的声誉已经很好了。您说过CMAKE_CXX_FLAGS变量只包含用户设置的标志。情况并非总是如此。我认为target COMPILE_FLAGS属性也没有所有的标志。我给我的代表一个-1,因为他给了你一个-1,所以几乎是一样的:——@Manuel需要一种方法将编译标志传递给程序,如果我没有弄错的话。你建议他手动复制粘贴?嗯,我建议在项目中保留命令参数作为预处理器定义是非常不正常的。