Visual Studio CMake:远程Linux可执行文件复制到本地的配置方案
解决方案:用CMake自定义命令或CMakePresets构建后步骤实现远程文件复制
CMakeSettings.json被弃用后,CMakePresets.json没有直接对应的remoteCopyBuildOutput配置,但可以通过以下两种方式实现编译后将远程可执行文件复制回本地:
方法一:在CMakeLists.txt中添加构建后自定义命令
直接在CMake配置里添加POST_BUILD命令,调用scp或rsync完成文件复制。假设你的目标可执行文件名为myapp,远程主机地址为remote-host,远程构建目录为/home/your-user/build,本地存放路径为C:/local-build-output,可以这样写:
add_executable(myapp main.cpp) # 构建完成后复制文件到本地 add_custom_command(TARGET myapp POST_BUILD COMMAND scp your-user@remote-host:/home/your-user/build/myapp C:/local-build-output COMMENT "正在将远程可执行文件复制到本地..." )
注意:
- 本地需要安装scp客户端(Windows可通过OpenSSH功能或Git Bash获取)
- 建议配置SSH免密登录,避免每次复制都输入密码
- 远程构建路径可以用CMake变量动态获取,比如
${CMAKE_BINARY_DIR}/myapp,前提是明确远程机器上的CMake构建目录路径
方法二:在CMakePresets.json中添加构建后命令
在你的构建预设中加入postBuildCommand,指定本地执行的复制命令。示例配置:
{ "version": 3, "configurePresets": [ { "name": "remote-linux-config", "generator": "Ninja", "toolchainFile": "/path/to/toolchain.cmake", "remoteMachineName": "remote-host", // 其他远程配置... } ], "buildPresets": [ { "name": "remote-linux-build", "configurePreset": "remote-linux-config", "postBuildCommand": "rsync -avz your-user@remote-host:/home/your-user/build/myapp C:/local-build-output" } ] }
这个方法的优势是把复制逻辑集中在预设文件里,不需要修改CMakeLists.txt。同样需要确保本地有rsync或scp工具,且SSH连接正常。
额外提示
如果需要复制多个文件,可以用通配符(比如*.bin),或者编写一个简单的脚本(bash或bat),然后在postBuildCommand里调用这个脚本,逻辑更清晰也方便维护。
内容的提问来源于stack exchange,提问作者FalsinSoft
相关产品推荐
相关产品推荐

