【问题标题】:How to get qmake to generate "project dependencies" in a Visual Studio .sln project如何让 qmake 在 Visual Studio .sln 项目中生成“项目依赖项”
【发布时间】:2010-02-24 15:21:15
【问题描述】:

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

到目前为止我已经尝试过

CONFIG += ordered

正确排序无济于事。

同样,更神秘的语法:

client.depends = core common

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

【问题讨论】:

    标签: c++ qt qmake


    【解决方案1】:

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

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

    但他们提供了一种解决方法(在 cryptic post 中进行了讨论),它仍然有效,甚至记录在同一 target 部分中。太糟糕了,我不得不重新构建 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)等于最终应用程序的导入库之一(具有LIBS += yourlib.lib)时,qmake 将生成依赖项。 (参见qmake's source,将导入库添加为依赖项,以及将它们与项目目标名称进行比较的little further

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

    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
    

    【讨论】:

    • 非常感谢!终于我知道为什么这些依赖项不起作用了。
    【解决方案2】:

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

    它似乎试图找出哪些东西对你来说是依赖的。您是否可以在不手动输入项目依赖项的情况下从 sln 构建?

    【讨论】:

    • 我之前遇到过那个神秘的帖子。不确定信息是否是最新的。我当然尝试过使用它描述的简单和复杂的方法,但无济于事。如果不手动输入依赖项,我不能说构建真的有效,不。它并没有完全损坏,但有足够多的问题,无论是公开的还是无声的,手动添加 deps 总是值得的。
    • 你试过用QtCreator设置依赖然后创建sln吗?我面前没有我的 Qt 开发机器,所以当您在项目视图中指定依赖项时,我无法确定它放入 pro 文件中的内容。
    【解决方案3】:

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

    【讨论】:

    • 我已经浏览了我能找到的每一组文档。并进行了大量的源潜水以启动。附带说明一下,qmake 生成的 makefile 似乎具有正确的依赖关系。 .sln 有问题。
    • @Michael:你的意思是单独的 .vcproj 文件吗(因为我相信那些依赖项存在的地方)。
    • 我猜这些东西存在于 .sln 文件中,因为该文件了解所有不同的项目,并可以将它们与我需要的依赖项联系起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2015-07-08
    • 2012-08-27
    • 2022-09-28
    相关资源
    最近更新 更多