我想对cmake构建类型有所了解。
具体来说,我不清楚设置构建类型是否还会修改构建标志,或者这是否只是内部用于构建配置的“标签”。例如,对于发布版本:
set(CMAKE_BUILD_TYPE Release)
O3
标志会自动指定给编译器吗?还是需要明确指定?
我发现一个答案同时设置了构建类型和显式设置了编译器标志:
但是我在网上找到的另一个线程表明存在默认值:
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标志。
答案 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")
我认为您不会为此找到“文档”。