目前,我的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
文件的实现过于复杂?
1条答案
按热度按时间y53ybaqx1#
CMake presets(从版本3.19开始)可能是一个不错的选择。
您可以有一个
minimal_configuration
配置预设,将这些变量设置为cacheVariables
,然后有一个minimal_configuration
构建预设,使用minimal_configuration
配置预设。请注意,您可以定义配置预设的层次结构,并让该层次结构的每一级管理不同的设置。例如,您可以有
common_config
第一级,windows_config
和unixlike_config
第二级,windows_debug_config
,windows_release_config
(依此类推)第三级...要为给定的预设运行CMake,只需将其作为命令行选项传递: