QtCreator自定义部署步骤中使用scp的配置问题
解决Qt Creator自定义处理步骤中scp部署的问题
我来帮你搞定这两个问题,分两部分说清楚:
一、正确设置项目源码路径为工作目录
你之前把工作目录设成%{buildDir}确实不对,Qt Creator有专门的变量用来获取项目源码的根目录:
直接在自定义处理步骤的「工作目录」输入框里填:%{sourceDir}
这个变量会自动替换成你的项目源码所在的真实路径,这样scp -r .就能准确复制整个项目目录了。
二、修复setsid启动失败的错误
终端里setsid scp能正常弹出图形化密码提示,但Qt Creator的进程环境和普通终端会话不一样,setsid没法在Qt Creator的非交互式环境里正确唤起图形化密码窗口,所以才会启动失败。这里有几个靠谱的解决方案:
方案1:改用ssh-askpass直接触发图形化密码(推荐)
把命令拆成「命令」和「参数」分开配置,确保密码弹窗能正常显示:
- 命令栏填:
ssh-askpass - 参数栏填:
scp -r . <user>@<host>:<path> - 工作目录保持为
%{sourceDir}
这样ssh-askpass会直接调用系统的图形化密码输入窗口,不需要依赖setsid的会话环境,Qt Creator能正常执行这个命令。
方案2:配置SSH免密登录(更省心)
如果不想每次部署都输密码,最彻底的方式是设置SSH密钥对实现免密登录:
- 在本地终端执行
ssh-keygen生成密钥对(一路按回车用默认配置就行) - 把本地公钥复制到目标机器:
ssh-copy-id <user>@<host> - 之后在Qt Creator的自定义处理步骤里直接这么配:
- 命令栏:
scp - 参数栏:
-r . <user>@<host>:<path> - 工作目录:
%{sourceDir}
这样部署的时候完全不需要密码,流程更顺畅,还彻底避免了图形化弹窗的兼容性问题。
- 命令栏:
方案3:调整setsid的执行方式(兼容旧环境)
如果你一定要用setsid,得确保Qt Creator能找到它的完整路径,并且配置好图形化环境变量:
- 先在终端执行
which setsid拿到完整路径,比如/usr/bin/setsid - 在Qt Creator的命令栏填完整路径:
/usr/bin/setsid scp -r . <user>@<host>:<path> - 还要在Qt Creator的「项目」->「运行环境」里添加
DISPLAY=:0这个环境变量(图形化程序需要这个来识别显示会话)
不过这个方案不如前两个稳定,毕竟Qt Creator的非交互式环境对图形化程序的支持有限。
验证方法
配置完之后,点击Qt Creator里的构建按钮,查看自定义处理步骤的输出日志,如果没有报错,并且目标机器上能看到完整复制过去的项目目录,就说明配置成功了。
内容的提问来源于stack exchange,提问作者Alex44
相关产品推荐
相关产品推荐

