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

标签 c++ qt qmake

问题如下:

我有一个文件夹,其中包含一堆库项目和 2 个生成实际可执行文件的项目。两个 exe 项目利用该文件夹中的库来完成其工作,但除此之外是单独的程序。所以,我在那个文件夹中有两个 SUBDIRS 项目。

super1.pro
super2.pro 

此外,没有很多,但一些库中的代码路径取决于实际正在构建的 super 项目。通过将其添加到 .cpp 文件中来解决依赖关系
#ifdef SUPER1

所以有什么问题?问题是
DEFINES+=SUPER1

在 super1.pro 中添加的内容在子项目中不可见,直接或通过 .pri 文件将其添加到子项目中无法解决
何时需要构建 其他 项目。必须手动将代码更改为 super 2 然后,这只是没有好处。

我在下面有解决该问题的方法,但感觉太复杂了。如果有人有更好的我想念的,请评论/回答。

最佳答案

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

我们首先需要在 super 项目解析顺序中添加一个自定义的 .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 占位符文件重写为由 super 项目 *_DEFINES 文件指定的占位符文件。然后系统选择这个重写的文件并作为 .qmake.cache 放入 builddir,最重要的是,从该文件中定义 被所有子项目选中。 .qmake.cache.super1 实际上只是一个简单的 .pro 文件,可能如下所示:
DEFINES += SOMEVARIABLE

当你想构建时,你只需使用 super42.pro
SUBDIRS += super42_DEFINES.pro sub1 sub2 sub3....


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

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

关于c++ - 如何使 SUBDIRS 级别定义在 qt 的子项目中可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588645/

相关文章:

qt - Qt如何设置粗体、斜体、下划线字体?

c++ - qmake 没有正确检测变量

c++ - 为什么 Qt .pro 文件会为平台提供错误,即使未选择或提及它也是如此?

c++ - linux3/gcc46 : "-fnon-call-exceptions", 哪些信号是陷阱指令?

c++ - 模拟读数的计算出现错误

c++ - Dlib r_squared C2059 错误

c++ - QtConcurrent 与多线程的 QThread 的多线程性能

c++ - Qt:在子部件上使用 QPainter

c++ - 指针和字符数组

c++ - Qt在build debug时将文件夹名中的release替换为debug