11

我有几个库和一个依赖于它们的应用程序的qmake构建。使用 subdirs 模板,我可以让 qmake 输出一个 .sln 文件,该文件在 VC2008 中几乎符合我的喜好。尽管我已经以所描述的各种方式指定了目标之间的依赖关系,但最终在 .sln 文件中没有“项目依赖关系”,我必须手动添加它们。

到目前为止我已经尝试过

CONFIG += ordered

正确订购无济于事。

同样,更神秘的语法:

client.depends = core common

这也行不通。当我加载 sln 时,没有任何依赖项出现。

4

3 回答 3

8

CONFIG += orderedqmake 的 MSVC 后端(解决方案生成器target.depends =)不支持两者。早在 2010 年 Qt 4.7 出现时,文档没有提到这一点,但在 Qt 4.8 中,开发人员已经相应地更新了文档(请参阅目标部分的备注):

  • .depends该子项目依赖于指定的子项目。仅在使用 makefile 的平台上可用。
  • Visual Studio 不支持有序选项。

但是他们提供了一种解决方法(在那个神秘的帖子中讨论过),它仍然有效,甚至记录在同一个目标部分中。太糟糕了,我不得不重建 qmake 并使用调试器来验证:

  1. a) 有一个 Lib/DLL 项目,在您的解决方案中另一个项目的链接行上使用了 TARGET(使用 .lib 而不是 .dll)(您可以使用 LIBS 修改链接行)。

    b) 有一个 Exe 项目,其中 TARGET 用于您的解决方案中另一个项目的自定义构建步骤。

  2. 您不使用 TARGET 变量中的路径(为此使用 DESTDIR/DLLDESTDIR),例如 TARGET=$(SOME_VARIABLE)/myLib,将不起作用。
  3. 如果你的库有一个特殊的位置,你可以指定 -Lmy/library/path 和 LIBS += mylib,而不是仅仅使用 LIBS += my/library/path/mylib
  4. 叶项目是在您生成解决方案文件之前创建的。(您可以使用 qmake 的递归标志来执行此操作,例如“qmake -tp vc -r [yourproject.pro]”

yourlib.lib基本上,当您的 lib 的目标名称 ( ) 等于最终应用程序的导入库之一 (具有)时,qmake 将生成依赖关系LIBS += yourlib.lib。(参见qmake 的源代码,其中将导入库添加为依赖项,并进一步将它们与项目目标名称进行比较)

这是在解决方案中生成依赖项的最小设置:

solution.pro
  TEMPLATE = vcsubdirs
  SUBDIRS = main app

app/app.pro
  LIBS += main.lib

main/main.pro
  TARGET = main
  TEMPLATE = vclib

有了这些,如果你运行qmake -r -tp vc,你将在生成的 .sln 中获得显式依赖:

GlobalSection(ProjectDependencies) = postSolution
    {E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C}
EndGlobalSection
于 2013-03-14T10:28:03.227 回答
2

来自旧的邮件列表条目: http: //lists.trolltech.com/qt-interest/2006-07/thread00238-0.html

它似乎试图弄清楚哪些事情对你有依赖性。您是否能够在不手动输入项目依赖项的情况下从 sln 构建?

于 2010-02-24T15:45:44.653 回答
1

我不是 makefile 方面的专家,但如果我是你,我会尝试通过编辑 .pro 文件、运行 qmake 然后查看 MAKLEFILE 中的自动生成结果来使用 QtCreator 重新创建该依赖项。如果您想了解 qmake 的工作原理,请查看 qt 文档。

于 2010-02-24T15:27:37.777 回答