【问题标题】:building with qmake on Linux - how to prevent qmake from linking to QtCore and QtGui在 Linux 上使用 qmake 构建 - 如何防止 qmake 链接到 QtCore 和 QtGui
【发布时间】:2011-01-18 18:50:29
【问题描述】:

我有一个共享库(没有 QT 依赖项)[库 B],它链接到另一个共享库(也没有 QT 依赖项)[库 A]。

我正在使用 Qmake 和 QT Creator 1.3。问题是,当我构建库 B 并在可执行文件上运行 ldd 时,它被链接到 QtCore 和 QtGui,两者都拉入了大量不需要的文件,导致可执行文件加载时间很长,并且有不需要的文件依赖关系。

我已经尝试了几乎所有方法来阻止 qmake 将这些库链接到库 B。

我的库 B 项目文件的 sn-p 如下所示:

TEMPLATE = lib
LIBS += -L../datelib/bin -ldatelib_release

QT -= gui core
LIBS   -= -lQtGui -lQtCore
CONFIG += dll
CONFIG += debug_and_release

CONFIG(debug, debug|release) {
TARGET =targetnameD
}else {
TARGET = targetname
}

我在 Ubuntu 9.10 上使用 QtCreator 3

QT 是 4.5.2 版

【问题讨论】:

  • 哪个版本的 Qt?我尝试使用 4.6.1 和 Qt -= core gui 由 qmake 创建的 Makefile 不包含 Qt DLL,删除此行将它们包含在 Makefile 中。

标签: qt qmake


【解决方案1】:

对于应用程序,您可以这样做:

TEMPLATE = app
CONFIG = console

更多信息在这里: qmake common projects

【讨论】:

    【解决方案2】:

    我有类似的问题。 我所做的是创建没有 qtcore 和 qtgui 的新库项目。删除了向导创建的所有不必要的文件。将我的文件添加到项目文件夹并修改 *.pro 文件。它开始正常工作。

    这是 QtCreator 的一些问题,它无法正确读取 .pro 文件生成 .pro.user,巫婆使用 QtCreator 构建,向导生成正确的 .pro.user 文件。

    我用 Qt 4.7 做到了这一点

    希望得到帮助。

    【讨论】:

      【解决方案3】:

      CONFIG -= qt 放入您的 .pro 文件中。

      【讨论】:

      • 它在这里工作。这是用于 Qt 源代码树中不与 Qt 链接的项目的方法。一般来说,它有效。有关示例,请参见 Qt 源代码树中的 src/winmain/winmain.pro。您能否再次检查:(1)您真的再次运行了 qmake 并重建了所有内容(运行 qmake 后进行完全干净的构建)。 (2) 您链接的所有库本身都没有链接到 libQtCore 或 libQtGui(例如,datelib_release 不得链接到 Qt)。
      【解决方案4】:

      据我所知,如果您没有将 .pro 配置与 IDE 分开设置,Qt creator 不会考虑它们。

      您应该转到项目的设置,克隆调试配置,将其重命名为发布,将 QMake 构建配置设置为发布(!)并根据需要更改其他设置。然后,您可以从 IDE 中选择要构建的配置。

      P.S:尝试使用 Qt Creator 1.3.1,因为它修复了很多错误并带来了有趣的新功能。

      【讨论】:

      • 嗯,这似乎是 1.2.1 的错误。在我安装 v3 之后,问题就消失了……但是我知道将来,当我想创建自己的配置时,您能否概述“克隆”现有配置以创建新配置所需的步骤?
      • 转到项目 > 构建设置 > 添加 > 选择克隆。然后选择新配置(例如发布)并展开 QMake 构建步骤。将 QMake 构建配置设置为发布,您就完成了。
      【解决方案5】:

      你可以试试

      CONFIG += dll
      QT     -= gui core
      LIBS   -= -lQtGui -lQtCore
      

      【讨论】:

      • 我已将您的答案标记为默认),这个项目被设置为默认 - 事实上,QtCreator 没有显示其他配置,即使 .pro 文件的(配置部分)语法与其他项目相同。你知道是什么原因造成的吗?
      • 查看和/或删除 yourporjectname.pro.user 文件。
      • @Mihai:这是我做的第一件事(在发布我的问题之前),没有任何区别。
      • 啊,对不起。这是在黑暗中的一枪 - 许多人没有意识到 *user 文件也可以影响生成的构建工件。
      • LIBS线真的有必要吗?我的意思是,如果我不需要 gui 库,QT -= gui 足以禁用 -lQtGui。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多