qmake在.pro文件中调用外部脚本或者exe

在用qt编写程序的时候经常会用到依赖的库但是总是需要自己去拷贝就显得很麻烦,

下面我们来看看,在.pro文件中编写代码去执行一个拷贝依赖文件的脚本程序。

首先,我们在.pro文件里面加一下代码

defineReplace(win32Path) {#定义替换

    win32:1 ~= s|/|\\\\|g
    contains(1, ^\\.*):pfx = \\
    else:pfx =
    segs = $$split(1, \\)#字符串分割
    out =
    for(seg, segs) {
        equals(seg, ..):out = $$member(out, 0) #文档中member函数是只有两个参数的,所以这个-2不清楚是做什么的
        else:!equals(seg, .):out += $$seg
    }
    return($$join(out, \\, $$pfx))
}

win32 {

   copydata.commands  = $(COPY_FILE) $$win32Path("$$PWD/install.cmd") $$win32Path("$$PWD")
   first.depends = $(first) copydata
   export(first.depends)
   export(copydata.commands)
   QMAKE_EXTRA_TARGETS += first copydata#编译其他目标
   CONFIG( debug, debug|release) {
   QMAKE_POST_LINK += $$win32Path("$$PWD/install.cmd") release $$win32Path("$$PWD/../../")#编译qian执行
   } else {
       #QMAKE_POST_LINK += $$win32Path("$$OUT_PWD/install.cmd") release $$win32Path("$$PWD/../../")#编译qian执行
   }
}

我想这应该不难看 懂。在config里面的那句代码就是执行当前路径下的install.cmd文件,看到没,.pro文件和install.cmd文件是在一个路径下的

我这个install.cmd里面写的是:    echo a
    @echo b
    pause

很简单的两句命令。

接着我们去点击重新构建:我们在编译输出里面可以看到:我们cmd里面代码的执行结果:

是不是输出了a和b 呢,但是我们在cmd里面用了pause,所以编译也就卡住了,所以,我们在cmd里面可以写其他的代码


下面是我写的比较复杂的拷贝代码,shell脚本


QQ:609162385

以下是cmd文件

set CP_DRV=%~d0                    #设置copy路径
set CP_PATH=%~dp0                  #设置copy路径

if not exist "%2" goto SOURC_ERR   #如果%2不存在则报错

set INSTALL_DIR=%CP_PATH%..\install
set INSTALL_DIR_INC=%INSTALL_DIR%\include
set INSTALL_DIR_LIB=%INSTALL_DIR%\lib

set INSTALL_DIR_INC_COMMON=%INSTALL_DIR%\include\common

if not exist %INSTALL_DIR% mkdir %INSTALL_DIR%              #如果目录不存在则创建
if not exist %INSTALL_DIR_INC%    mkdir %INSTALL_DIR_INC%
if not exist %INSTALL_DIR_INC_COMMON% mkdir %INSTALL_DIR_INC_COMMON%
if not exist %INSTALL_DIR_LIB%    mkdir %INSTALL_DIR_LIB%
set SOURCE_DIR=%2

rem copy header,                      #如果文件存在,则拷贝进common路径下
if exist %SOURCE_DIR%\common\\$D{PROJ_NAME_LOWER}def.h         copy %SOURCE_DIR%\common\\$D{PROJ_NAME_LOWER}def.h %INSTALL_DIR_INC_COMMON%\ /y
if exist %SOURCE_DIR%\common\\$D{PROJ_NAME_LOWER}diag.hxx      copy %SOURCE_DIR%\common\\$D{PROJ_NAME_LOWER}diag.hxx %INSTALL_DIR_INC_COMMON%\ /y
if exist %SOURCE_DIR%\common\\$D{PROJ_NAME_LOWER}sys.hxx       copy %SOURCE_DIR%\common\\$D{PROJ_NAME_LOWER}sys.hxx %INSTALL_DIR_INC_COMMON%\ /y

echo %INSTALL_DIR_LIB%
 echo %SOURCE_DIR%

rem copy lib                          #快速复制库
set a=%1
echo %a%

if /i "%1" equ "debug" goto DEBUG                #如果%1等于debug则跳转到debug
if /i "%1" equ "release" goto RELEASE

goto END

:DEBUG                                  #如果文件存在,则拷贝进lib路径下
 echo %CP_PATH%
if exist %CP_PATH%debug\ copy %CP_PATH%\debug\*.dll %INSTALL_DIR_LIB%\ /y
if exist %CP_PATH%debug\ copy %CP_PATH%\debug\*.pdb %INSTALL_DIR_LIB%\ /y
if exist %CP_PATH%debug\ copy %CP_PATH%\debug\*.lib %INSTALL_DIR_LIB%\ /y

goto END

:RELEASE
if exist %CP_PATH%release\ copy %CP_PATH%\release\*.dll %INSTALL_DIR_LIB%\ /y
if exist %CP_PATH%release\ copy %CP_PATH%\release\*.pdb %INSTALL_DIR_LIB%\ /y
if exist %CP_PATH%release\ copy %CP_PATH%\release\*.lib %INSTALL_DIR_LIB%\ /y


goto END

:SOURCE_ERR
echo error: the source dir is not specified.

:END
echo install exit.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vqt5_qt6

你的鼓励是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值