自动为其他cmake选项指定新值的cmake选项

os8fio9y  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(200)

目前,我的CMakeLists.txt文件包含许多小选项,用于在构建中包含或排除特定的功能块;默认情况下,所有功能都已构建,但用户可以通过在命令行中传递一个参数(如-DWITH_FEATURE_X=OFF)从构建中删除一个功能:

option(WITH_FEATURE_X "Enable feature X" ON)
if (WITH_FEATURE_X)
   file(GLOB FEATURE_X_SRCS "${TOP_DIR}/feature_x/*.cpp")
   list(APPEND ALL_SRCS ${FEATURE_X_SRCS})
else ()
   message("CMake:  -DWITH_FEATURE_X=OFF argument was specified:  building without feature X.")
   add_definitions(-DAVOID_FEATURE_X)
endif ()

......这工作得很好,但在某些情况下,调用者必须在命令行上指定一打-DWITH_FEATURE_X=OFF类型参数,这就有点乏味了。
由于我事先知道几种常见的用法--用户希望指定一组已知的要禁用的功能,因此我希望能够使用单个参数来指定,如下所示:

cmake -DWITH_MINIMAL_CONFIGURATION=ON ..

....并使CMakeLists.文件的行为如同用户已指定:

cmake -DWITH_FEATURE_X=OFF -DWITH_FEATURE_Y=OFF -DWITH_FEATURE_Z=OFF [...and so on...] ..

有没有一种方法可以做到这一点,而不会使CMakeLists.txt文件的实现过于复杂?

y53ybaqx

y53ybaqx1#

CMake presets(从版本3.19开始)可能是一个不错的选择。
您可以有一个minimal_configuration配置预设,将这些变量设置为cacheVariables,然后有一个minimal_configuration构建预设,使用minimal_configuration配置预设。

"configurePresets": [
    {
      "name": "minimal_configuration",
      ...
      "cacheVariables": {
        "WITH_FEATURE_X": "OFF",
        "WITH_FEATURE_Y": "OFF",
        "WITH_FEATURE_Z": "OFF",
        ...
      },
    }
  ],
  "buildPresets": [
    {
      "name": "minimal_configuration",
      "configurePreset": "minimal_configuration"
    }
  ]

请注意,您可以定义配置预设的层次结构,并让该层次结构的每一级管理不同的设置。例如,您可以有common_config第一级,windows_configunixlike_config第二级,windows_debug_configwindows_release_config(依此类推)第三级...
要为给定的预设运行CMake,只需将其作为命令行选项传递:

~/your_project> cmake --preset minimal_configuration
~/your_project> cmake --build --preset minimal_configuration

相关问题