Cmake构建类型(RELEASE,DEBUG等)编译器标志

时间:2019-03-21 07:42:58

标签: cmake

我想对cmake构建类型有所了解。

具体来说,我不清楚设置构建类型是否还会修改构建标志,或者这是否只是内部用于构建配置的“标签”。例如,对于发布版本:

set(CMAKE_BUILD_TYPE Release)

O3标志会自动指定给编译器吗?还是需要明确指定?

我发现一个答案同时设置了构建类型和显式设置了编译器标志:

Optimize in CMake by default

但是我在网上找到的另一个线程表明存在默认值:

https://cmake.org/pipermail/cmake/2016-May/063379.html

如果构建类型确实指定了一些编译器标志,那么在哪里可以找到有关它的文档?我想知道每种构建类型都设置了哪些标志。

编辑:

供以后参考,如果要查找编译器的特定标志(例如,对于gcc或g ++,则为gnu),则可以克隆Kamil引用的存储库,进入modules / compilers文件夹,然后尝试这样的命令:

grep -r _INIT . | grep -i gnu

事实上,正如卡米尔(Kamil)指出的那样,这些标志也将与Clang使用的标志相同,因为Clang cmake文件包含GNU标志。

1 个答案:

答案 0 :(得分:1)

该标志取决于编译器。 -O3标志是gcc可以理解的,但是其他编译器可能无法理解。您可以检查cmake安装的Modules/Compilers/*内部的文件,以查看根据配置添加了哪些标志。

例如,在GNU.cmake中,我们可以阅读:

  string(APPEND CMAKE_${lang}_FLAGS_INIT " ")
  string(APPEND CMAKE_${lang}_FLAGS_DEBUG_INIT " -g")
  string(APPEND CMAKE_${lang}_FLAGS_MINSIZEREL_INIT " -Os -DNDEBUG")
  string(APPEND CMAKE_${lang}_FLAGS_RELEASE_INIT " -O3 -DNDEBUG")
  string(APPEND CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT " -O2 -g -DNDEBUG")

我认为您不会为此找到“文档”。