QT 编译前后文件复制

使用Qt Creator时,项目经常需要在编译前或者编译后复制部分文件,在项目pro文件增加相应的指令

命令:

QMAKE_PRE_LINK         编译前执行

QMAKE_POST_LINK       编译后执行

方法一:

直接添加命令,使用&连接多条指令,例如:

win32{
    # 复制dll目录下所有文件和子目录(包含空目录),以修改时间判断,如果文件更新则覆盖,注:源码修改才会触发
    QMAKE_POST_LINK += xcopy /D /F /E /Y \"$${PWD}/XXX/dll\" \"$${DESTDIR}\"
    QMAKE_POST_LINK += & xcopy /D /F /E /Y \"$${PWD}/XXXXX/dll\" \"$${DESTDIR}\"
}

记录一下:

cmd命令的特殊字符:
|     命令管道符,前一条命令的输出作为下一条命令的输入
&     无论前一条命令执行结果如何继续执行下一条命令
&&    组合命令,前一条命令失败则不会执行下一条
||    组合命令,前一条命令成功则不会执行下一条

方法二:

添加一个BAT文件,用于执行较多的命令,不过BAT文件中不能使用$${DESTDIR}

win32{
# 编译后执行bat文件
    QMAKE_POST_LINK += $${PWD}/afterCompileRun.bat
}

BAT文件记录一下:

rem 关闭命令回显
@echo off  
rem 显示当前路径
echo 当前路径:%cd%  
rem 显示bat文件路径,末尾包含\
echo BAT文件目录:%~dp0


rem 创建目录
rem mkdir "%~dp0..\bin"

rem 复制dll目录下所有文件和子目录(包含空目录),以修改时间判断,如果文件更新则覆盖,注:源码修改才会触发
xcopy /D /F /E /Y "%~dp0XXX\dll" "%~dp0..\bin"

方法三:

# $$escape_expand("\\n\\t")可用来分隔不同指令
win32{
    # 复制dll目录下所有文件和子目录(包含空目录),以修改时间判断,如果文件更新则覆盖,注:源码修改才会触发
    QMAKE_POST_LINK += xcopy /D /F /E /Y \"$${PWD}/XXX/dll\" \"$${DESTDIR}\"
    QMAKE_POST_LINK += $$escape_expand("\\n\\t") xcopy /D /F /E /Y \"$${PWD}/XXXXX/dll\" \"$${DESTDIR}\"
}

注意

        源码必须修改上面命令才会被执行,即使只是增删一个空格、空行也可以

        “编译输出“可以查看执行结果

在这里贴一个配置在项目生成exe后自动复制QT依赖项到exe目录,放在项目pro文件中

win32 {
    # 将QT依赖库和文件复制到exe目录,还会复制vc环境安装包vcredist_x86.exe到exe目录
    DEPLOY_TOOL = $${dirname(QMAKE_QMAKE)}/windeployqt.exe
    DEPLOY_TOOL = $$replace(DEPLOY_TOOL, /, \\)

    contains(CONFIG, debug, debug|release){
        DEPLOY_TARGET = $${OUT_PWD}/debug/$${TARGET}.exe
        #DEPLOY_TARGET = $${PWD}/../bin/$${TARGET}.exe
    }else{
        DEPLOY_TARGET = $${OUT_PWD}/release/$${TARGET}.exe
        #DEPLOY_TARGET = $${PWD}/../bin/$${TARGET}.exe
    }

    DEPLOY_TARGET=$$replace(DEPLOY_TARGET, /, \\)
    msvc {
        # $$escape_expand("\\n\\t")可用来分隔不同指令
        QMAKE_POST_LINK+=$$escape_expand("\\n\\t") $${DEPLOY_TOOL} $${DEPLOY_TARGET} --qmldir $$[QT_INSTALL_QML] --force --no-translations $$escape_expand(\\n)
    }else{
        QMAKE_POST_LINK+='$$escape_expand("\\n\\t") $${DEPLOY_TOOL} $${DEPLOY_TARGET} --qmldir $$[QT_INSTALL_QML] --force --no-translations $$escape_expand("\\n\\t")'
    }
    # 显示命令
    message("alter link execute command:" $$QMAKE_POST_LINK)
}

此段代码参考自开源项目 QtSwissArmyKnife v3.5.0,QtSwissArmyKnife/SAKSetup.pri文件,

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值