使用 CONFIG 包时如何强制配置类型?
How can you force config type when consuming CONFIG packages?
在具有自定义配置类型的 cmake 构建中,例如 RelWithAsserts
。
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithAsserts)
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
"Reset the configurations to what we need"
FORCE)
endif()
如何更改通过 find_package
使用的包的配置并强制发布?
# GTest doesn't have RelWithAsserts config type, so this wont work.
find_package(GTest CONFIG REQUIRED)
# Somehow force this to use Release config.
target_link_libraries(test PRIVATE GTest::GTest)
有
导入目标的配置很容易通过设置 CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> 个变量来调整:
# When the project is built in RelWithAsserts configuration
# use Release version of IMPORTED targets
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHASSERTS Release)
# Now `find_package` could be used.
# It will create IMPORTED targets with needed properties
find_package(GTest CONFIG REQUIRED)
target_link_libraries(test PRIVATE GTest::GTest)
您甚至可以使用该设置:
# When the project is built in RelWithAsserts configuration
# use Release version of an IMPORTED target if it exists.
# If some target misses Release version, then fallback to Debug.
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHASSERTS Release Debug)
在具有自定义配置类型的 cmake 构建中,例如 RelWithAsserts
。
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithAsserts)
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
"Reset the configurations to what we need"
FORCE)
endif()
如何更改通过 find_package
使用的包的配置并强制发布?
# GTest doesn't have RelWithAsserts config type, so this wont work.
find_package(GTest CONFIG REQUIRED)
# Somehow force this to use Release config.
target_link_libraries(test PRIVATE GTest::GTest)
有
导入目标的配置很容易通过设置 CMAKE_MAP_IMPORTED_CONFIG_<CONFIG> 个变量来调整:
# When the project is built in RelWithAsserts configuration
# use Release version of IMPORTED targets
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHASSERTS Release)
# Now `find_package` could be used.
# It will create IMPORTED targets with needed properties
find_package(GTest CONFIG REQUIRED)
target_link_libraries(test PRIVATE GTest::GTest)
您甚至可以使用该设置:
# When the project is built in RelWithAsserts configuration
# use Release version of an IMPORTED target if it exists.
# If some target misses Release version, then fallback to Debug.
set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHASSERTS Release Debug)