如何在预设中设置 CMake 标志缓存变量而不覆盖它?

问题描述 投票:0回答:1

尝试遵循this帖子中建议的最佳实践,我想在预设文件中设置可选标志,并在工具链/CMakelist中设置必需标志。具体来说

CMAKE_x_FLAGS
,但我认为这个问题适用于任何其他缓存变量。

工具链文件

set(CMAKE_CXX_FLAGS_INIT "-mthumb -mcpu=cortex-m4")

CMakeLists.txt

set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -fno-exceptions")

CMakePresets.json

{
    "version": 3,
    "configurePresets": [
        {
            "name": "debug",
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/build/${presetName}",
            "toolchainFile": "${sourceDir}/cmake/toolchain.cmake",
            "cacheVariables": {
                "CMAKE_EXPORT_COMPILE_COMMANDS": "ON",
                "CMAKE_BUILD_TYPE": "Debug",
                "CMAKE_CXX_FLAGS": "-Wall -Wextra"
            }
        }
    ]
}

我的期望,如链接帖子中所述,是将预设变量附加到已指定的变量中。但是,工具链文件中指定的标志将被覆盖。

-Wall -Wextra -fno-exceptions

这可以通过 CMakeLists.txt 中的以下行来防止

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} ${CMAKE_CXX_FLAGS} -fno-exceptions")

在我看来这不是它应该工作的方式?所以我的问题是,我应该如何按照以下想法管理各种文件中的

CMAKE_CXX_FLAGS(_INIT)

  • 工具链文件中的工具链特定标志。
  • CMakeLists.txt 中的项目特定标志。
  • CMakePresets.json 文件中的可选警告标志。
c++ cmake compiler-flags
1个回答
0
投票

更好的做法是在 CMakeLists.txt 中使用

add_compile_options()

© www.soinside.com 2019 - 2024. All rights reserved.