能否通过CMake直接或间接构建现有Visual Studio 2019解决方案?
可行方案:用CMake封装MsBuild构建现有VS解决方案
你完全可以通过CMake间接构建现有Visual Studio解决方案,核心思路是用CMake封装预构建、MsBuild编译、后构建全流程,既保留现有VS项目文件,又替换原有繁琐的预/后构建脚本。以下是具体实现步骤:
核心逻辑
不需要用CMake生成VS项目文件,而是直接在CMake脚本中调用MsBuild.exe编译现有解决方案,同时将拉取Git子模块、获取依赖、二进制检查、打包ZIP等逻辑整合为CMake自定义目标,并通过依赖关系串联成完整构建链。
具体实现代码(CMakeLists.txt)
1. 基础配置
cmake_minimum_required(VERSION 3.18) project(VSProjectWrapper) # 定位VS2019的MsBuild(避免环境变量找不到的问题) find_program(MSBUILD_EXECUTABLE NAMES msbuild HINTS "C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/MSBuild/Current/Bin" "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/MSBuild/Current/Bin" ) if(NOT MSBUILD_EXECUTABLE) message(FATAL_ERROR "未找到VS2019的MsBuild.exe,请检查路径或安装VS2019") endif() # 定义构建参数(可根据需求调整) set(SOLUTION_PATH "${CMAKE_SOURCE_DIR}/你的解决方案文件.sln") set(BUILD_CONFIG "Release") set(BUILD_PLATFORM "x64") set(BINARY_OUTPUT_DIR "${CMAKE_SOURCE_DIR}/bin/${BUILD_PLATFORM}/${BUILD_CONFIG}")
2. 预构建步骤:拉取Git子模块
add_custom_target(PullGitSubmodules COMMAND git submodule update --init --recursive WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "拉取Git子模块..." )
3. 预构建步骤:获取额外二进制依赖
# 示例:下载并解压二进制依赖(可替换为你的依赖获取逻辑) set(DEPENDENCY_URL "你的依赖下载地址") set(DEPENDENCY_ZIP "${CMAKE_BINARY_DIR}/deps/dependency.zip") set(DEPENDENCY_DIR "${CMAKE_BINARY_DIR}/deps") add_custom_target(DownloadDependencies COMMAND ${CMAKE_COMMAND} -E make_directory "${DEPENDENCY_DIR}" COMMAND ${CMAKE_COMMAND} -E download "${DEPENDENCY_URL}" "${DEPENDENCY_ZIP}" COMMAND ${CMAKE_COMMAND} -E tar xzf "${DEPENDENCY_ZIP}" --directory "${DEPENDENCY_DIR}" COMMENT "下载并解压二进制依赖..." )
4. 调用MsBuild构建现有解决方案
add_custom_target(BuildVSSolution COMMAND ${MSBUILD_EXECUTABLE} "${SOLUTION_PATH}" /p:Configuration=${BUILD_CONFIG} /p:Platform=${BUILD_PLATFORM} /m # 启用多线程编译 WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" COMMENT "用MsBuild编译现有VS解决方案..." ) # 让编译任务依赖预构建步骤(确保先拉取子模块、获取依赖再编译) add_dependencies(BuildVSSolution PullGitSubmodules DownloadDependencies)
5. 后构建步骤:二进制检查
add_custom_target(PostBuildChecks # 示例:调用自定义工具检查驱动签名、版本号等 COMMAND "${CMAKE_SOURCE_DIR}/tools/你的二进制检查工具.exe" "${BINARY_OUTPUT_DIR}/你的驱动文件.sys" COMMENT "执行二进制文件检查..." ) add_dependencies(PostBuildChecks BuildVSSolution)
6. 后构建步骤:打包为ZIP
set(ZIP_OUTPUT "${CMAKE_BINARY_DIR}/项目打包_${BUILD_CONFIG}_${BUILD_PLATFORM}.zip") add_custom_target(PackageBinary COMMAND ${CMAKE_COMMAND} -E tar cf "${ZIP_OUTPUT}" --format=zip "${BINARY_OUTPUT_DIR}/你的驱动文件.sys" "${BINARY_OUTPUT_DIR}/配套工具.exe" COMMENT "打包二进制文件到ZIP: ${ZIP_OUTPUT}" ) add_dependencies(PackageBinary PostBuildChecks)
7. 设置默认构建目标
# 让CMake默认执行到打包步骤 set_property(DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY VS_STARTUP_PROJECT PackageBinary)
使用方式
- 在项目根目录创建上述
CMakeLists.txt,替换所有占位符(解决方案路径、依赖地址、二进制路径等) - 打开VS2019的开发者命令提示符,执行:
或者直接用CMake GUI生成VS项目,点击构建即可触发全流程。mkdir build && cd build cmake .. -G "Visual Studio 16 2019" -A x64 cmake --build . --config Release
内容的提问来源于stack exchange,提问作者user2281752
相关产品推荐
相关产品推荐

