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

标签 c++ cmake

<分区>

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

我该怎么做?

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

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

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

同样,它注意到我有 ccachegcc。这很好。但是,为编译器强制使用不同的默认选择可能会很好,但这只是对我个人而言,而不是对选择使用我的项目的任何其他人而言。

这可能吗?

最佳答案

我通常在 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 等)。

关于c++ - 在 CMake 中,如何基于每个用户更改构建类型的默认编译器标志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46398035/

相关文章:

c++ - 为什么从另一个类类型初始化 C++ 类不会抛出错误?

c++ - 如何将 lapack 与 CMake 和 Visual 2013 链接起来?

c++ - 如何通过 cmake 将版本详细信息添加到 .exe 或 .dll

ubuntu - CMAKE_PREFIX_PATH 没有按预期工作

java - 可能是二进制但通常是文本的数据的高效 JSON 编码

c++ - 如何让69.99*100打印6999而不是6998?

c++ - printf 从整数转义 unicode 字符

c++ - 从gdb中模板类的成员函数打印静态变量

c++将ubuntu下的boost库与cmake : undefined reference to `boost::iostreams::zlib::okay' 链接

c++ - 如何包含 VS 2008 的 Boost 库(命令行)