最近,在使用qmake,prl和TEMPLATE=subdir時犯了一個錯誤。記錄之以便以後查看。
項目結構:
- project.pro
- main\
- \__ main.pro
- lib\
- \__ lib.pro
project.pro中寫的是:
- TEMPLATE = subdirs
- SUBDIRS = main lib
- main.depends = lib
main.pro中有一句:
- CONFIG += link_prl
lib.pro中有一句:
- CONFIG += create_prl
錯誤的現象是:
1、lib的prl文件及動態庫生成成功。
2、main工程沒有讀取prl中的內容。
起初,我以為是鏈接期ld的問題,後來經過實踐,排除了這個可能。
最終,我在Makefile中發現了奇怪的東西。是project.pro對應的Makefile文件:
- sub-main: main/$(MAKEFILE) sub-lib
- cd main/ && $(MAKE) -f $(MAKEFILE)
也就是說,
事實一:main先從main.pro生成自己的Makefile,再make sub-lib目標。同時,我們知道
事實二:prl是在qmake階段進行讀取的因此,我們得出:
推論一:當進行main的qmake時,lib目標產生的prl文件和動態庫文件尚未生成。這必然導致main中無法讀取lib產生的prl文件。最終的解決辦法,其實很無奈,將project.pro中main和lib的順序反過來,再編譯,一切正常。
本文出自 “elephant_liu” 博客,請務必保留此出處http://elephantliu.blog.51cto.com/1107116/835870