在Qt中使用仅标题库管理项目

时间:2014-02-17 10:50:19

标签: c++ qt qt-creator qmake

现在我正在开发一个项目,该项目使用模板化,因此仅限标题的库,并构建两个应用程序。

我的文件夹组织如下:

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

在树视图中,但如果我将.pro分配给lib并使其成为自己的项目,那么当我想编译所有内容时,它会抱怨没有任何内容可以编译为lib和犯了错误......

谢谢!

2 个答案:

答案 0 :(得分:3)

.pri文件中,您应该引用$$PWD的所有路径。此变量包含当前解析文件的完整路径 - 即您的包含文件。

请注意PWD_PRO_FILE_PWD_的含义不同,即使它们偶尔会返回相同的值。

答案 1 :(得分:1)

看起来我找到了问题的解决方法。这是一种黑客攻击,但效果很好。 您可以为仅头文件库创建单独的.pro文件,并为其指定TEMPLATE = subdirs,但保留SUBDIRS变量未分配。在此.pro文件中列出库的标头。它看起来像这样:

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

qmake现在将了解此.pro文件不应生成任何" target",但qt创建者将显示您在项目树中列出的所有标题,以便您可以将它们编辑为普通项目"标头。并且库将仅在适当的树级别进入项目树一次。