2014-02-17 57 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奥德的解决方案,商务部是在头文件上运行,而不是在这里,所以链接时未定义许多符号。 –

相关问题