在用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檔案是在一個路徑下的
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM5gTN4YzM0EzM0YTM1ImZyYzXwIjMxYTM2EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
我這個install.cmd裡面寫的是: echo a
@echo b
pause
很簡單的兩句指令。
接着我們去點選重新建構:我們在編譯輸出裡面可以看到:我們cmd裡面代碼的執行結果:
是不是輸出了a和b 呢,但是我們在cmd裡面用了pause,是以編譯也就卡住了,是以,我們在cmd裡面可以寫其他的代碼
下面是我寫的比較複雜的拷貝代碼,shell腳本
以下是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.