如何在没有QtXmlPatterns,QtSvg和QtSql的情况下编译QtDeclarative

时间:2011-06-15 15:27:41

标签: c++ qt qml

我想减少我的应用程序(再次)。 QtDeclarative取决于我根本不使用的QtXmlPatterns,QtSvg和QtSql,所以我想在没有它们的情况下编译库。

是否有人更改了QtDeclarative的源文件(或线索如何执行此操作)?

2 个答案:

答案 0 :(得分:2)

您应该能够按如下方式配置Qt:

./configure -no-xmlpatterns -no-svg

QtDeclarative中依赖于这些模块的部分将被自动禁用。例如,删除QtXmlPatterns只会导致XmlListModel不可用,因为它基于XQuery。

这不会对LGPL意义上的Qt进行修改,因此无需自行转发和分发Qt源代码。

不幸的是,目前没有-no-sql选项的预处理器逻辑,因此它似乎是QtDeclarative的硬依赖。但是,我可以想象一个可以接受这个选项的补丁。如果您想了解如何完成此操作,请查看#ifdef QT_NO_XMLPATTERNSsrc/declarative的使用情况,并注意qdeclarativexmllistmodel.cppsrc/declarative/util/util.pri的条件包含。

答案 1 :(得分:1)

可能会导致删除依赖项的问题,但您可以在专业文件中尝试QT -= sql等,看看您遇到了哪些错误。否则你可能会尝试修改QtDeclarative的源代码并重新编译QT,但由于它使用了QML布局,我认为删除对QtXmlPatterns的依赖可能非常困难。

这是QT的一个已知缺点,你可以通过该框架获得大量功能,但同时会出现明显的膨胀。另外请记住,如果你做的不仅仅是链接到现有的库,LGPL要求你发送你在QT中自行更改的源。