gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 07:03:03 26 4
gpt4 key购买 nike

问题如下:

我有一个文件夹,其中包含一堆库项目和 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com