首页 文章

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

提问于
浏览
1

这个问题在这里已有答案:

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

我怎么做?

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

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

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

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

这可能吗?

2 回答

  • 0

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

    我目前对这个问题的回答是创建一个包含初始缓存设置的全局 ~/.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?

相关问题