2014-02-17 78 views
4

現在我有一個項目使用模板化,因此只有標題庫,並構建了兩個應用程序。在Qt中管理一個僅包含標題庫的項目

我的文件夾結構如下:

base/lib 
base/app1 
base/app2 

我現在要做的正確的是,我有base/lib/lib.pri它看起來像:

HEADERS += ../lib/someHeader.h 

,我包括在base/app1/app1.probase/app2/app2.pro

然而,在QtCreator,它看起來有點醜陋,原因有二:

  • .pri文件的路徑取決於它是從哪裏包括在內。例如,如果我有另一個應用程序,出於某種原因,我想在文件夾anotherBase/app3/它不會工作。
  • 在項目樹,它看起來像:

(貌似我已經把文本列表後纔能有代碼漂亮地打印)

app1 
    -> app1.pro 
    -> headers 
    -> source files 
    -> lib/ 
     -> lib.pri 
     -> headers 
      -> someHeader.h 
app2 
    -> app2.pro 
    -> headers 
    -> source files 
    -> lib/ 
     -> lib.pri 
     -> headers 
      -> someHeader.h 

因此,我有兩個倍庫視圖中的庫文件。

有什麼辦法來優化這個嗎?我想有:

app1 
    -> app1.pro 
    -> headers 
    -> source files 
app2 
    -> app2.pro 
    -> headers 
    -> source files 
lib 
    -> lib.pri 
    -> headers 
在樹視圖

,但是如果我assing一個.prolib,使之自己的項目,然後當我想編譯一切就抱怨說,有什麼可編譯lib並出錯...

謝謝!

+0

你使用什麼編譯器?我試圖製作一個'TEMPLATE = lib'.pro-file,看起來像gcc 4.4並不抱怨「沒有任何東西可以編譯」 - 它只是在這種情況下產生一個空的庫。 –

回答

3

在您的.pri文件中,您應該引用所有到$$PWD的路徑。這個變量包含當前解析文件的完整路徑 - 也就是你的包含文件。

請注意,PWD_PRO_FILE_PWD_有不同的含義,即使它們偶爾會返回相同的值。

1

看起來我已經找到了解決問題的方法。這有點破解,但效果很好。 您可以爲您的僅標頭庫創建一個單獨的.pro文件,併爲其指定TEMPLATE = subdirs,但將SUBDIRS變量保留爲未分配。在這個.pro文件中列出庫的標題。它會是這個樣子:

TEMPLATE = subdirs 
HEADERS += h1.h \ 
      h2.h 

QMAKE現在明白,這.pro文件中不應產生任何「目標」,但Qt Creator中會顯示您在項目樹中列出的所有頭,所以你可以編輯它們普通項目的標題。圖書館將只在適當的樹層級上進入項目樹一次。

+0

唉,我認爲這將是標準的C++項目精解,但是我有我的頭文件中定義了一些Qt的對象......從@Kuba奧德的解決方案,商務部是在頭文件上運行,而不是在這裏,所以鏈接時未定義許多符號。 –

相關問題