如何让qmake在Visual Studio .sln项目中生成"项目依赖项"

Mic*_*aum 11 c++ qt qmake

我有一些qmake构建的几个库和一个取决于它们的应用程序.使用子模板我能够让qmake输出一个.sln文件,它在VC2008中几乎符合我的喜好.虽然我已经以我所见过的各种方式指定了目标之间的依赖关系,但我最终在.sln文件中没有"项目依赖项",我必须手动添加它们.

到目前为止我已经尝试过了

CONFIG += ordered
Run Code Online (Sandbox Code Playgroud)

正确的订购无济于事.

同样,更神秘的语法:

client.depends = core common
Run Code Online (Sandbox Code Playgroud)

哪个也行不通.当我加载sln时,没有任何依赖项显示出来.

Vla*_*nko 8

qmake的MSVC后端(解决方案生成器)不支持CONFIG += orderedtarget.depends =支持这两种方式.早在2010年使用Qt 4.7左右,该文档并没有提到这一点,但在4.8的Qt开发人员已经更新的文档相应(见目标部分言论):

  • .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. 如果你有一个特殊的libs位置,你指定-Lmy/library/path和LIBS + = mylib,而不只是使用LIBS + = my/library/path/mylib
  4. 在生成解决方案文件之前创建叶项目.(您可以使用qmake的递归标志来执行此操作,例如"qmake -tp vc -r [yourproject.pro]"

基本上,当你的lib的目标名称(yourlib.lib)等于最终应用程序(具有LIBS += yourlib.lib)的导入库之一时,qmake将生成依赖.(见QMAKE的源代码,其中导入库添加为依赖关系,以及稍远一点,他们正在与项目目标名称相比)

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

solution.pro
  TEMPLATE = vcsubdirs
  SUBDIRS = main app

app/app.pro
  LIBS += main.lib

main/main.pro
  TARGET = main
  TEMPLATE = vclib
Run Code Online (Sandbox Code Playgroud)

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

GlobalSection(ProjectDependencies) = postSolution
    {E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C}
EndGlobalSection
Run Code Online (Sandbox Code Playgroud)


yan*_*nce 1

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