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

bre*_*att 3 cmake

我想了解有关 cmake 构建类型的一些说明。

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

set(CMAKE_BUILD_TYPE Release)
Run Code Online (Sandbox Code Playgroud)

O3标志会自动指定给编译器吗?或者我需要明确指定它?

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

默认在 CMake 中优化

但我在网上发现的另一个帖子表明存在默认值:

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

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

编辑:

为了便于将来参考,如果您想查找编译器的特定标志(例如,在 gcc 或 g++ 的情况下为 gnu),那么您可以克隆 Kamil 引用的存储库,进入 module/compilers 文件夹并尝试类似的命令:

grep -r _INIT . | grep -i gnu
Run Code Online (Sandbox Code Playgroud)

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

Kam*_*Cuk 6

该标志取决于编译器。该-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")
Run Code Online (Sandbox Code Playgroud)

我不认为你会找到这方面的“文档”。

  • 我知道这些标志将是特定于编译器的。我真的希望有一个在线资源可供检查。 (2认同)