在CMake中,如何基于每个用户更改构建类型的默认编译器标志?

时间:2017-09-25 05:17:15

标签: c++ cmake

在cmake中,gcc的默认发布编译器标志是-O2 -DNDEBUG。我希望他们是-Ofast -NDEBUG。而且我希望这对于我在cmake中做的所有项目都是如此,而不会将这个选择强加给我项目的任何其他消费者。

我该怎么做?

我可以将它们编辑到该项目的CMakeLists.txt文件中。但后来我迫使其他人同意我的选择。另外,我必须非常小心我是如何做到这一点的,以确保我只影响那些使用的有效标志集的编译器。

每次签出新树或创建新的构建环境时,我都可以在每个项目上使用ccmake。但是,当我想每次都将标志设置为相同的东西时,这是一个巨大的麻烦。

有没有办法设置它,所以对我个人而言,各种构建类型的clang和gcc的默认编译器标志是我想要的那样?

同样,我注意到我有ccachegcc。那没关系。但强迫编译器使用不同的默认选项可能会很好,但仅限于我个人,而不是任何选择使用我的项目的人。

这可能吗?

2 个答案:

答案 0 :(得分:1)

我通常在cmakelists.txt中设置编译器标志,方法是在我的构建脚本中添加一个环境变量,然后在cmakelists.txt中引用它。

#build.sh
export MY_CXXFLAGS="-std=gnu++11 -Ofast -NDEBUG -Wall -Wno-unused-function -Wno-unknown-pragmas"
cmake `pwd` -Dtest=ON
make -j9

然后在我的CMakeLists.txt中,我将有以下一行:

SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} $ENV{MY_CXXFLAGS}")

然后将参数传递给build.sh,这只是一个bash脚本,根据用户的需要更改MY_CXXFLAGS的内容。 (例如build.sh -b DEVELOP | DEBUG | RELEASE等)。

答案 1 :(得分:0)

我目前对此问题的回答是创建一个包含初始缓存设置的全局~/.config/Kitware/default.cmake文件,并使用cmake -C <path to default.cmake> ... remainder of cmake options ...来运行cmake

在搞清楚这一过程中,我最初命名了文件~/.config/Kitware/CMakeCache.txt并发现了一些非常奇怪的东西,似乎是cmake中的一个错误。我发布了关于它的问题:Why does this cmake initial cache file result in such strange errors?