现在我正在开发一个项目,该项目使用模板化,因此仅限标题的库,并构建两个应用程序。
我的文件夹组织如下:
base/lib
base/app1
base/app2
我现在所做的就是base/lib/lib.pri
看起来像是:
HEADERS += ../lib/someHeader.h
我将其加入base/app1/app1.pro
和base/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和犯了错误......
谢谢!
答案 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创建者将显示您在项目树中列出的所有标题,以便您可以将它们编辑为普通项目"标头。并且库将仅在适当的树级别进入项目树一次。