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

来源:互联网 发布:文艺青年生活知乎 编辑:程序博客网 时间:2024/06/05 19:07

在用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.




0 0
原创粉丝点击