CONFIG += ordered
qmake 的 MSVC 后端(解决方案生成器target.depends =
)不支持两者。早在 2010 年 Qt 4.7 出现时,文档没有提到这一点,但在 Qt 4.8 中,开发人员已经相应地更新了文档(请参阅目标部分的备注):
- .depends该子项目依赖于指定的子项目。仅在使用 makefile 的平台上可用。
- Visual Studio 不支持有序选项。
但是他们提供了一种解决方法(在那个神秘的帖子中讨论过),它仍然有效,甚至记录在同一个目标部分中。太糟糕了,我不得不重建 qmake 并使用调试器来验证:
a) 有一个 Lib/DLL 项目,在您的解决方案中另一个项目的链接行上使用了 TARGET(使用 .lib 而不是 .dll)(您可以使用 LIBS 修改链接行)。
b) 有一个 Exe 项目,其中 TARGET 用于您的解决方案中另一个项目的自定义构建步骤。
- 您不使用 TARGET 变量中的路径(为此使用 DESTDIR/DLLDESTDIR),例如 TARGET=$(SOME_VARIABLE)/myLib,将不起作用。
- 如果你的库有一个特殊的位置,你可以指定 -Lmy/library/path 和 LIBS += mylib,而不是仅仅使用 LIBS += my/library/path/mylib
- 叶项目是在您生成解决方案文件之前创建的。(您可以使用 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