如何在CMake多配置生成器中获取构建配置变量(VS2019)
在VS2019多配置生成器环境下正确获取CMake构建类型的方法
在VS2019这类多配置生成器环境中,CMAKE_BUILD_TYPE是无效的——因为多配置生成器支持同时生成Debug、Release等多种配置,这个变量仅对Makefile这类单配置生成器生效。直接用它判断构建类型,会导致构建时指定的--config参数无法被正确识别。
原有代码的问题
下面的代码试图通过CMAKE_BUILD_TYPE选择对应的windeployqt脚本,但在多配置环境下无法根据构建时的--config参数动态调整:
if(USE_VCPKG) if (CMAKE_BUILD_TYPE STREQUAL "Debug") #if($<CONFIG:Debug>) find_program(TOOL_WINDEPLOYQT NAMES windeployqt.debug.bat ) else() find_program(TOOL_WINDEPLOYQT NAMES windeployqt) endif()
构建命令:
cmake --build ./build --config Debug
修正方案:使用生成器表达式
改用CMake的生成器表达式,它会在构建阶段求值,能准确匹配当前的构建配置。修正后的代码如下:
if(USE_VCPKG) set(TOOL_WINDEPLOYQT "windeployqt") add_custom_command(TARGET Demo POST_BUILD COMMAND ${TOOL_WINDEPLOYQT}$<$<CONFIG:Debug,RelWithDebInfo>:.debug.bat> $<TARGET_FILE:Demo> COMMENT "Running windeployqt... " ) endif()
其中$<$<CONFIG:Debug,RelWithDebInfo>:.debug.bat>的作用是:当构建配置为Debug或RelWithDebInfo时,自动给windeployqt追加.debug.bat后缀;其他配置则使用原始的windeployqt命令。
内容的提问来源于stack exchange,提问作者Qiuren
相关产品推荐
相关产品推荐

