Visual Studio 2017 CMake项目:如何单步构建两个目标
实现单次构建Windows和WSL Linux双目标的方案
当然可以实现!我之前在做跨平台CMake项目时也遇到过类似的需求,通过VS的构建后事件或者CMake自定义目标都能搞定,下面给你两种实用的配置方案:
方案1:通过VS 2017的构建后事件触发
这种方式直观易操作,直接在VS里配置当前Windows目标的构建后步骤,自动触发Linux目标的构建:
- 打开你的CMake项目,先切换到x64-Debug(Windows目标)配置。
- 右键项目根节点 → 属性 → 导航到配置属性 → 生成事件 → 生成后事件。
- 在「命令行」输入框中,添加触发Linux-Debug构建的命令:
如果你习惯用VS的MSBuild命令,可以这样写:
或者直接调用CMake的构建命令(更贴合CMake项目的逻辑):msbuild "$(SolutionDir)YourProjectName.vcxproj" /t:Build /p:Configuration=Linux-Debug /p:Platform=x64cmake --build "$(SolutionDir)out/build/Linux-Debug" --config Debug注意:
$(SolutionDir)是VS的内置宏,会自动替换为你的解决方案目录,确保Linux构建目录的路径和你实际配置的一致。 - 在「执行后生成事件」下拉框选择成功时(确保只有当前Windows构建成功后才触发Linux构建),或者选总是(不管当前构建结果都执行)。
- 点击「确定」保存配置,之后只要构建
x64-Debug目标,完成后就会自动启动Linux-Debug的构建。
方案2:在CMakeLists.txt中添加自定义目标
如果你想把双构建逻辑固化到CMake脚本里,避免每次在VS里手动配置,可以添加一个自定义的全量构建目标:
- 打开项目根目录的
CMakeLists.txt,在合适的位置添加以下代码:# 定义一个自定义目标,同时构建Windows和Linux版本 add_custom_target(build_all ALL # 先构建Windows x64-Debug目标 COMMAND cmake --build ${CMAKE_CURRENT_BINARY_DIR}/x64-Debug --config Debug # 再构建WSL Linux-Debug目标,注意路径转换(WSL下需要用Linux格式路径) COMMAND wsl bash -c "cmake --build $(wslpath -u ${CMAKE_CURRENT_BINARY_DIR}/Linux-Debug) --config Debug" COMMENT "正在构建Windows和Linux双目标..." )注意:
wslpath -u命令会把Windows格式的路径转换成WSL识别的Linux格式,确保Linux环境能找到构建目录;如果你的Linux构建目录本身就是在WSL的文件系统里,可以直接写Linux路径。 - 保存
CMakeLists.txt后,VS会自动重新加载CMake配置。 - 在VS的「解决方案资源管理器」→「CMake目标」里找到
build_all目标,右键选择生成,就能一次性触发两个环境的构建了。
一些需要注意的细节
- 确保你的WSL环境已经正确配置,VS能正常连接到WSL的Linux系统,且Linux环境中已经安装了CMake、编译器等必要工具。
- 如果两个目标之间有依赖关系(比如Windows产物需要用到Linux的输出),记得调整构建命令的顺序,或者通过
add_dependencies添加依赖。 - 若想控制构建失败后的行为,可以在命令中用
&&(仅当前面命令成功时才执行后面)或||(前面失败时执行后面)来调整逻辑。
内容的提问来源于stack exchange,提问作者Rajesh Rathod
相关产品推荐
相关产品推荐

