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的順序反過來,再編譯,一切正常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章