Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt中管理具有仅标题libs的项目_C++_Qt_Qt Creator_Qmake - Fatal编程技术网

C++ 在Qt中管理具有仅标题libs的项目

C++ 在Qt中管理具有仅标题libs的项目,c++,qt,qt-creator,qmake,C++,Qt,Qt Creator,Qmake,现在我有一个项目,它使用一个模板,因此只有头,库,并建立两个应用程序 我的文件夹组织如下: base/lib base/app1 base/app2 我现在要做的是,我有base/lib/lib.pri,它看起来像: HEADERS += ../lib/someHeader.h 我把它包括在base/app1/app1.pro和base/app2/app2.pro中 然而,在QtCreator中,它看起来有些丑陋,原因有二: .pri文件中的路径取决于包含路径的位置。例如,如果我有另一个应

现在我有一个项目,它使用一个模板,因此只有头,库,并建立两个应用程序

我的文件夹组织如下:

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
app2
  -> app2.pro
  -> headers
  -> source files
lib
  -> lib.pri
  -> headers
但是,在树状视图中,如果我将
.pro
分配给
lib
并将其作为自己的项目,那么当我想要编译所有内容时,它会抱怨没有可编译的lib,并出错


谢谢

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


请注意,
PWD
\u PRO\u FILE\u PWD\u
具有不同的含义,即使它们偶尔返回相同的值。

看起来我已经找到了解决问题的方法。这有点像黑客,但效果很好。 您可以为Header only lib创建一个单独的.pro文件,并为其指定
TEMPLATE=subdirs
,但不指定
subdirs
变量。在此.pro文件中列出库的标题。它看起来像这样:

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

qmake现在明白了这个.pro文件不应该产生任何“目标”,但是qt creator将显示您在项目树中列出的所有标题,以便您可以将它们作为普通项目的标题进行编辑。库将只在适当的树级别进入项目树一次。

您使用什么编译器?我尝试创建一个模板= LIB < /Calp> .Pro文件,看起来GCC 4.4不抱怨“没有编译”——在这种情况下它只生成一个空库。唉,我认为这是标准C++项目的一个好解决方案,但是我在我的头上定义了一些QT对象…使用@Kuba-order的解决方案,moc在头文件上运行,但这里没有,因此链接时没有定义许多符号。
TEMPLATE = subdirs
HEADERS += h1.h \
           h2.h