我有一个包含 5-6 个库和一个可执行文件的项目。可执行文件依赖于库,一些库依赖于其他库。如何指定构建顺序,以便在需要之前构建依赖项?
最佳答案
更新:(2021 年 2 月)
请根据此新信息使用以下(旧)答案中的建议。
虽然这个问题很久以前就已经回答并接受了,但我觉得有必要再补充一个答案;老实说,我认为有更好的答案。
我认为 CONFIG += ordered
有害且是一个坏习惯。这可能是 qmake 开发人员过早引入的东西。还有strong opponents到它的用途。缺点是:
因此,我建议将您的项目文件更改如下:
TEMPLATE = subdirs
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
GameProto.depends = Core
Core.depends = PackingLib
PackingLib.depends = GraphicModule
GraphicModule.depends = Utility
这样就可以清楚地定义依赖关系。您还可以考虑其他更复杂的依赖层次结构,这些依赖层次结构可以通过这种方式实现,而构建顺序则绝对不可能。
不幸的是,qmake
在涉及具有较深子项目层次结构的大型项目时并不是最好的工具。大型项目的问题如下:
运行 qmake
执行时间非常长qmake
无法正确计算子项目的依赖关系,需要单独编译子项目解决这些问题主要有两种方法:
qmake
运行时间和更短的编译时间。但是,即使这种方法有时也可能会失败。cmake
。严重地。 Cmake
是一个成熟的产品,Qt Creator 内部的支持堪比qmake
。由于 qmake
的众所周知的问题,Qt 公司已经决定引入一个新的 make 工具 QBS
。然而,这个工具的使用并不像第一印象那样简单。从 qmake
到 QBS
的过渡并不容易,尤其是对于更复杂的项目。 QBS
语言的类 Javascript 语法不易掌握,文档稀缺。
恕我直言,只有两个其他工具可以替代 qmake
:
CMake
,众所周知的构建工具。meson
,一个开源的构建系统意味着非常快,更重要的是,尽可能地对用户友好。https://stackoverflow.com/questions/11079398/