在cmake中,gcc的默认发布编译器标志是-O2 -DNDEBUG
。我希望他们是-Ofast -NDEBUG
。而且我希望这对于我在cmake中做的所有项目都是如此,而不会将这个选择强加给我项目的任何其他消费者。
我该怎么做?
我可以将它们编辑到该项目的CMakeLists.txt
文件中。但后来我迫使其他人同意我的选择。另外,我必须非常小心我是如何做到这一点的,以确保我只影响那些使用的有效标志集的编译器。
每次签出新树或创建新的构建环境时,我都可以在每个项目上使用ccmake
。但是,当我想每次都将标志设置为相同的东西时,这是一个巨大的麻烦。
有没有办法设置它,所以对我个人而言,各种构建类型的clang和gcc的默认编译器标志是我想要的那样?
同样,我注意到我有ccache
和gcc
。那没关系。但强迫编译器使用不同的默认选项可能会很好,但仅限于我个人,而不是任何选择使用我的项目的人。
这可能吗?
答案 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?