如何让Visual Studio的CMake工具在构建解决方案时执行INSTALL
解决VS2017内置CMake构建后自动执行INSTALL的问题
我来帮你搞定这个问题!你遇到的情况是VS内置CMake和CMake GUI生成的解决方案在INSTALL目标执行上的差异,虽然已经设置了set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1),但核心问题出在CMake版本兼容性上,咱们一步步来解决:
首先,明确变量的版本要求
CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD这个CMake变量是从CMake 3.11版本才正式引入的,而你用的是CMake 3.9.2,这个版本根本不识别这个变量,所以你设置了也不会生效,这就是为什么VS内置CMake构建时没执行INSTALL的原因。方案1:升级VS内置的CMake版本(推荐)
VS2017后期版本支持更新CMake组件,你可以通过VS Installer修改安装:- 打开VS Installer,选择你的VS2017实例,点击修改。
- 在单个组件里找到CMake工具,勾选更高版本的CMake(比如3.15及以上),完成安装。
- 升级后,重新打开你的CMake项目,
set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)这个设置就会生效,默认构建解决方案时会自动执行INSTALL目标。
方案2:不升级CMake,手动配置VS构建参数
如果暂时没法升级CMake,你可以手动让VS构建时带上INSTALL目标:- 在VS中打开CMake项目,点击菜单栏的CMake → CMake设置(或者右键项目根目录的
CMakeLists.txt,选择CMake设置)。 - 在弹出的设置界面中,找到当前使用的配置(比如Debug/Release),在CMake命令行参数中添加
--target INSTALL。 - 保存设置后,下次点击CMake→构建解决方案时,就会自动执行INSTALL目标了。
- 在VS中打开CMake项目,点击菜单栏的CMake → CMake设置(或者右键项目根目录的
方案3:自定义CMake目标触发INSTALL
你也可以在CMakeLists.txt中添加一个自定义目标,让它依赖INSTALL,这样构建默认的ALL目标时会自动触发INSTALL:# 在CMakeLists.txt末尾添加 add_custom_target(build_and_install ALL DEPENDS INSTALL COMMENT "完成构建并执行INSTALL..." )这个方法不需要修改VS设置,直接通过CMake配置实现自动执行INSTALL,适合不想改动VS配置的场景。
内容的提问来源于stack exchange,提问作者MiP




