the*_*ean 18 qt build-process qmake build
我有一个包含5-6个库和一个可执行文件的项目.可执行文件取决于库,某些库依赖于其他库.如何指定构建顺序,以便在需要之前构建依赖项?
use*_*573 33
虽然很久以前这个问题已得到回答和接受,但我觉得有必要再加上一个答案; 老实说,我认为有一个更好的答案.
我认为CONFIG += ordered有害和坏习惯.这可能是qmake开发人员过早介绍的东西.它的使用有很强的反对意见.缺点是这些:
- 它阻止了Qt开发人员实现有意义的功能
因此,我建议您更改项目文件,如下所示:
TEMPLATE = subdirs
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
GameProto.depends = Core
Core.depends = PackingLib
PackingLib.depends = GraphicModule
GraphicModule.depends = Utility
Run Code Online (Sandbox Code Playgroud)
这种方式明确定义了依赖关系.您还可以考虑其他更复杂的依赖层次结构,这种层次结构可能采用这种方式,而且构建顺序绝对不可能.
更新:(2017年6月21日)
不幸的是,qmake当涉及具有深层子项目层次结构的大型项目时,它不是最好的工具.大型项目出现的问题是:
Run qmake 需要很长时间才能执行qmake无法正确计算子项目依赖项,这使得必须单独编译子项目解决这些问题主要有两种方法:
qmake运行时间和更短的编译时间.但是,即使这种方法有时也会失败.cmake.认真.Cmake是一个成熟的产品,Qt Creator内部的支持可与之相媲美qmake.评论:
由于众所周知的问题qmake,Qt公司已经决定推出一种新的制造工具QBS.但是,使用此工具并不像第一次展示时那样简单.有没有简单的过渡,从qmake到QBS,尤其是对于更复杂的项目.类似Javascript的QBS语言语法不易掌握,文档很少.
恕我直言,只有两种其他工具可供替换qmake:
the*_*ean 10
好.我找到了解决方案.只需将订购添加到CONFIG并按正确的顺序记录子目录
CONFIG += ordered
SUBDIRS += Utility GraphicModule PackingLib Core GameProto
Run Code Online (Sandbox Code Playgroud)
对我来说这个工作很好