使用qmake編譯時拷貝文件


使用qmake構建項目時,需要在make時拷貝一些文件到指定位置,非執行make install,下面總結列舉一下我了解的方式

COPIES

示例pro

1 COPY_DIR = $$PWD/copys
2 
3 cp_kk.files += \
4           aaa \
5           bbb
6 
7 cp_kk.path  += $$INSTALL_DIR/copys
8 
9 COPIES +=  cp_kk

執行qmake后查看Makefile文件

COPY          = cp -f
COPY_FILE     = cp -f
COPY_DIR      = cp -f -R

distdir: FORCE
    @test -d $(DISTDIR) || mkdir -p $(DISTDIR)
    $(COPY_FILE) --parents $(DIST) $(DISTDIR)/
    $(COPY_FILE) --parents /home/XXX/Qt/mkspecs/features/data/dummy.cpp $(DISTDIR)/
    $(COPY_FILE) --parents main.cpp $(DISTDIR)/
    $(COPY_FILE) --parents aaa bbb $(DISTDIR)/

compiler_copy_cp_kk_make_all: copys/aaa copys/bbb
copys/aaa: aaa
$(QINSTALL) aaa copys/aaa
copys/bbb: bbb
$(QINSTALL) bbb copys/bbb

另外執行完qmake之后就可以看到創建了copys目錄,但是在make前目錄是空的。make之后,文件aaa和bbb被拷貝過來了。

QMAKE_PRE_LINK和QMAKE_POST_LINK

示例pro

PRE_DIR = $$PWD/pre
QMAKE_PRE_LINK += $$QMAKE_COPY_FILE $$PWD/ccc $$PRE_DIR

POST_DIR = $$PWD/post
QMAKE_POST_LINK += $$QMAKE_COPY_FILE $$PWD/ddd $$POST_DIR

查看Makefile

cp -f /home/XXX/testpro/ccc /home/XXX/testpro/pre
cp -f /home/XXX/testpro/ddd /home/XXX/testpro/post

這個示例中需要在當前目錄下有pre和post兩個目錄,如果沒有的話make會報錯。執行qmake和make后可以看到兩個文件已經分別拷貝了。

QMAKE_PRE_LINK和QMAKE_POST_LINK的功能遠不止於此,后面可以跟更多的命令

 QMAKE_EXTRA_TARGETS

它類似於QMAKE_PRE_LINK和QMAKE_POST_LINK,功能也是非常的豐富。

示例pro

CPEXT_DIR = $$PWD/extra
cp_ext.commands += $$QMAKE_COPY_FILE $$PWD/eee $$CPEXT_DIR
QMAKE_EXTRA_TARGETS += cp_ext
PRE_TARGETDEPS += cp_ext

執行qmake,查看Makefile文件

cp_ext:
    cp -f /home/XXX/testpro/eee /home/XXX/testpro/extra

$(TARGET): cp_ext

執行make后可以看到文件eee已經拷貝成功。

QMAKE_SUBSTITUTES

示例pro

cp_et.input = $$PWD/fff
cp_et.output = $$CPEXT_DIR/ggg
QMAKE_SUBSTITUTES += cp_et

執行qmake和make后可以看到文件已經復制並改名。

總結

通過該實例總結了幾種使用qmake構建項目拷貝文件的方式,歡迎大家補充。

 

參考:

http://www.qtcn.org/bbs/read-htm-tid-55157.html

https://www.codenong.com/18488154/

https://blog.csdn.net/zzs0829/article/details/109047242


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM