如何使SUBDIRS级别的定义在qt中的子项目中可见
How to make SUBDIRS level defines visible in subprojects in qt?
问题如下:
我有一个文件夹,其中包含一堆库项目和两个生成实际可执行文件的项目。两个exe项目都使用该文件夹中的库来完成任务,但在其他方面都是独立的程序。所以,我在那个文件夹里有两个SUBDIRS项目。
super1.pro
super2.pro
此外,这方面的内容并不多,但库中的一些代码路径取决于实际构建的超级项目。通过将其添加到.cpp文件中,可以解决依赖关系
#ifdef SUPER1
那么,问题出在哪里呢?问题是
DEFINES+=SUPER1
在super1.pro中添加的将在子项目中不可见,并且直接或通过.pri文件将其添加到子项目中无法解决需要构建其他项目的时间。然后必须手动将代码更改为super2,这是不好的。
下面我有我的解决方案,但感觉太复杂了。如果有人有我遗漏的更好的,请评论/回答。
我的解决方案的基础是这篇文章: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)
就这样。就像我说的,解决方案似乎太复杂了。我希望有更好的方法,但到目前为止这对我有效。
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- Qt focusObjectChanged example?
- 如何在cpp文件之间切换窗口?在Qt中
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- Qt Quick-如何仅从c++代码与qml属性交互
- 无法使用Qt Creator在Windows中构建yaml-cpp
- Qt无法在子项目中查找文件
- 如何使SUBDIRS级别的定义在qt中的子项目中可见
- Qt不识别其他子项目