You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过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)

使用方式

  1. 在项目根目录创建上述CMakeLists.txt,替换所有占位符(解决方案路径、依赖地址、二进制路径等)
  2. 打开VS2019的开发者命令提示符,执行:
    mkdir build && cd build
    cmake .. -G "Visual Studio 16 2019" -A x64
    cmake --build . --config Release
    
    或者直接用CMake GUI生成VS项目,点击构建即可触发全流程。

内容的提问来源于stack exchange,提问作者user2281752

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 21:42:34