qmake prl TEMPLATE=subdir之错误小记
最近,在使用qmake,prl和TEMPLATE=subdir时犯了一个错误。记录之以便以后查看。
项目结构:
1. project.pro
2. main\
3. \__ main.pro
4. lib\
5. \__ lib.pro
project.pro中写的是:
1. TEMPLATE = subdirs
2. SUBDIRS = main lib
3. main.depends = lib
main.pro中有一句:
1. CONFIG += link_prl
lib.pro中有一句:
1. CONFIG += create_prl
错误的现象是:
1、lib的prl文件及动态库生成成功。
2、main工程没有读取prl中的内容。
起初,我以为是链接期ld的问题,后来经过实践,排除了这个可能。
最终,我在Makefile中发现了奇怪的东西。是project.pro对应的Makefile文件:
1. sub-main: main/$(MAKEFILE) sub-lib
2. 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
补充:软件开发 , 其他 ,