最近,在使用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的顺序反过来,再编译,一切正常。