防止 cmake 允许 CMAKE_CONFIGURATION_TYPES 的任何值
Prevent cmake from allowing any value for CMAKE_CONFIGURATION_TYPES
我正在尝试做类似
的事情
cmake -DCMAKE_CONFIGURATION_TYPES="Debug;RelWithDebInfo" ...
我想检查我的类型名称是否有任何错误,所以我尝试了一些荒谬的事情希望 cmake 会出错并确认我的配置类型是正确的。
cmake -DCMAKE_CONFIGURATION_TYPES="Debug;Relalaland" ...
但是 cmake 只是创建我指定的配置类型...
有没有办法让cmake不接受陌生的CONFIGURATION_TYPES?
所以检查一下。
set(allowed_types Debug Release RelWithDebInfo MinSizeRel)
foreach(i IN LISTS CMAKE_CONFIGURATION_TYPES)
if(NOT i IN_LIST allowed_types)
message(FATAL_ERROR "${i} is not valie configuration type")
endif()
endforeach()
Is there a way to tell cmake to not accept unfamiliar CONFIGURATION_TYPES?
不要。 用户可能希望在外部定义自定义配置类型,这完全可以在工具链文件或命令行中完成。其用途之一可能是构建消毒剂。通常,您应该避免限制用户可以对您的构建执行的操作。只有 硬性要求 进入您的 CMakeLists.txt 并且拒绝自定义构建类型不符合条件。
综上所述,这是您可以执行此操作的方法:
set(known_types Debug Release RelWithDebInfo MinSizeRel)
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (is_multi_config)
foreach (config IN LISTS CMAKE_CONFIGURATION_TYPES)
if (NOT config IN_LIST known_types)
message(FATAL_ERROR "Build type '${config}' invalid. Expected one of: ${known_types}")
endif ()
endforeach ()
elseif (NOT CMAKE_BUILD_TYPE IN_LIST known_types)
message(FATAL_ERROR "Build type '${CMAKE_BUILD_TYPE}' invalid. Expected one of: ${known_types}")
endif ()
这适用于单配置生成器和多配置生成器。
我正在尝试做类似
的事情cmake -DCMAKE_CONFIGURATION_TYPES="Debug;RelWithDebInfo" ...
我想检查我的类型名称是否有任何错误,所以我尝试了一些荒谬的事情希望 cmake 会出错并确认我的配置类型是正确的。
cmake -DCMAKE_CONFIGURATION_TYPES="Debug;Relalaland" ...
但是 cmake 只是创建我指定的配置类型...
有没有办法让cmake不接受陌生的CONFIGURATION_TYPES?
所以检查一下。
set(allowed_types Debug Release RelWithDebInfo MinSizeRel)
foreach(i IN LISTS CMAKE_CONFIGURATION_TYPES)
if(NOT i IN_LIST allowed_types)
message(FATAL_ERROR "${i} is not valie configuration type")
endif()
endforeach()
Is there a way to tell cmake to not accept unfamiliar CONFIGURATION_TYPES?
不要。 用户可能希望在外部定义自定义配置类型,这完全可以在工具链文件或命令行中完成。其用途之一可能是构建消毒剂。通常,您应该避免限制用户可以对您的构建执行的操作。只有 硬性要求 进入您的 CMakeLists.txt 并且拒绝自定义构建类型不符合条件。
综上所述,这是您可以执行此操作的方法:
set(known_types Debug Release RelWithDebInfo MinSizeRel)
get_property(is_multi_config GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if (is_multi_config)
foreach (config IN LISTS CMAKE_CONFIGURATION_TYPES)
if (NOT config IN_LIST known_types)
message(FATAL_ERROR "Build type '${config}' invalid. Expected one of: ${known_types}")
endif ()
endforeach ()
elseif (NOT CMAKE_BUILD_TYPE IN_LIST known_types)
message(FATAL_ERROR "Build type '${CMAKE_BUILD_TYPE}' invalid. Expected one of: ${known_types}")
endif ()
这适用于单配置生成器和多配置生成器。