如何使SUBDIRS级别定义在qt的子项目中可见?

时间:2015-02-18 16:29:11

标签: c++ qt qmake

问题如下:

我有一个文件夹,其中包含一堆库项目和2个生成实际可执行文件的项目。两个 exe 项目都使用该文件夹中的库来执行其中的操作,但其他方式则是单独的程序。所以,我在该文件夹中有两个SUBDIRS项目。

super1.pro
super2.pro 

此外,还有很多,但库中的一些代码路径依赖于实际构建的超级项目。通过将此添加到.cpp文件中来解决依赖关系

#ifdef SUPER1

那么,问题是什么?问题是

DEFINES+=SUPER1
super1.pro中添加的

在子项目中不可见,并且直接或通过.pri文件将其添加到子项目中无法解决 一个人需要建立其他项目的时间。它必须是手动代码更改为 super2 然后这没有用。

下面我解决了这个问题,但感觉太复杂了。如果有人有一个我失踪的更好的,请评论/回答。

1 个答案:

答案 0 :(得分:0)

我的解决方案的基础是这篇文章: http://qt-project.org/wiki/QMake-top-level-srcdir-and-builddir

我们首先需要将自定义.pro文件添加到超级项目解析顺序中。 在super1.pro中我们添加:

SUBDIRS += super1_DEFINES.pro sub1 sub2 sub3....

在super1_DEFINES.pro中,我们编写以下内容

TEMPLATE=subdirs
SUBDIRS= # don't build anything, we're just generating the .qmake.cache file
system(rm .qmake_cache.in)
system(cp .qmake.cache.super1 .qmake.cache.in)
QMAKE_SUBSTITUTES += .qmake.cache.in

那里发生的是,我们利用系统调用重写.qmake.cache.in占位符文件,其中包含超级项目* _DEFINES文件指定的文件。然后系统选择这个重写的文件并将其作为.qmake.cache放入builddir中,最重要的是,所有子项目都会从该文件中选择DEFINES 。 .qmake.cache.super1实际上只是一个简单的.pro文件,可能如下所示:

DEFINES += SOMEVARIABLE

当你想建立说,super42.pro你只需使用

SUBDIRS += super42_DEFINES.pro sub1 sub2 sub3....

system(cp .qmake.cache.super42 .qmake.cache.in)

就是这样。就像我说的那样,解决方案似乎太复杂了。我希望有更好的方法,但到目前为止这对我有用。