从命令行设置Visual Studio构建的CMake配置类型无效如何解决?
我明白你遇到的困扰——明明在CMake命令行里指定了CMAKE_CONFIGURATION_TYPES=Release,但try_compile步骤还是默认用了Debug配置,这确实挺让人头疼的。
问题根源
对于Visual Studio这类多配置生成器,CMAKE_CONFIGURATION_TYPES的作用是定义项目支持的配置列表(比如Release、Debug、RelWithDebInfo等),但它并不会强制try_compile使用你指定的配置。try_compile有自己独立的配置逻辑,默认情况下会 fallback 到Debug,或者使用CMake内部的默认配置值。
解决方案
这里有几个可行的办法来解决这个问题:
全局强制try_compile使用Release配置
你可以在CMake命令行中额外添加CMAKE_TRY_COMPILE_CONFIGURATION变量的定义,直接指定try_compile要用的配置:cmake .. -G "Visual Studio 14 2015 Win64" -T host=x64 -DCMAKE_CONFIGURATION_TYPES:STRING=Release -DCMAKE_INSTALL_PREFIX=C:\Temp -DCMAKE_PREFIX_PATH=C:\Temp\downloads -DCMAKE_TRY_COMPILE_CONFIGURATION=Release或者,如果你能修改项目的CMakeLists.txt,可以在文件最开头添加全局设置:
set(CMAKE_TRY_COMPILE_CONFIGURATION Release CACHE STRING "Configuration used for try_compile steps")给单个try_compile显式指定配置
如果你能控制调用try_compile的代码(比如自己的项目代码或者依赖库的CMake配置),可以在try_compile命令中直接加上CONFIGURATION Release参数,强制它使用Release模式:try_compile(COMPILE_SUCCESS BINARY_DIR ${CMAKE_BINARY_DIR}/try_compile_temp SOURCE_DIR ${CMAKE_SOURCE_DIR}/test_code CONFIGURATION Release )检查依赖库的配置
有时候try_compile会自动切换到Debug配置,是因为CMAKE_PREFIX_PATH指向的依赖库只有Debug版本。你可以检查C:\Temp\downloads下的依赖是否包含Release版本的库文件,并且路径配置正确。
额外提示
别忘了,对于多配置生成器,即使你设置了CMAKE_CONFIGURATION_TYPES=Release,在执行构建命令时还是需要指定--config Release才能确保最终编译用Release配置,比如:
cmake --build . --config Release --target install
内容的提问来源于stack exchange,提问作者vre

