我有一些 qmake 版本的几个库和一个取决于它们的应用程序。使用子模板我能够让qmake输出一个.sln文件,它在VC2008中几乎符合我的喜好。虽然我已经以我所见过的各种方式指定了目标之间的依赖关系,但我最终在.sln文件中没有“项目依赖项”,我必须手动添加它们。
到目前为止,我已经尝试了
CONFIG += ordered
正确的排序无济于事。
同样更神秘的语法:
client.depends = core common
哪个也行不通。当我加载sln时,没有任何依赖项显示出来。
答案 0 :(得分:8)
qmake的MSVC后端(解决方案生成器)不支持CONFIG += ordered
和target.depends =
。回到2010年Qt 4.7,文档没有提及,但在Qt 4.8中,开发人员更新了文档accordingly(参见目标部分的评论):
但他们提供了一种解决方法(在cryptic post中讨论过),它仍然有效,甚至记录在同一target部分。太糟糕了,我不得不重建qmake并使用调试器验证:
a)有一个Lib / DLL项目,其中TARGET(使用.lib而不是.dll)用于解决方案中另一个项目的链接行(您可以修改链接行LIBS)。
b)有一个Exe项目,其中TARGET用于解决方案中另一个项目的自定义构建步骤。
- 您不使用TARGET变量中的路径(使用DESTDIR / DLLDESTDIR),例如,TARGET = $(SOME_VARIABLE)/ myLib将不起作用。
- 如果你有一个特殊的libs位置,你指定-Lmy / library / path和LIBS + = mylib,而不只是使用LIBS + = my / library / path / mylib
- 在生成解决方案文件之前创建叶项目。 (您可以使用qmake的递归标志来执行此操作,例如“qmake -tp vc -r [yourproject.pro]”
醇>
基本上,当你的lib的目标名称(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
答案 1 :(得分:2)
来自旧的邮件列表条目: http://lists.trolltech.com/qt-interest/2006-07/thread00238-0.html
它似乎试图找出哪些东西依赖于你。您是否能够在不手动输入项目依赖项的情况下从sln构建?
答案 2 :(得分:1)
我不是makefile中的wiz,但如果我是你,我会尝试通过编辑.pro文件,运行qmake然后查看MAKLEFILE中自动生成的结果,在QtCreator中重新创建该依赖项。如果您想了解qmake的工作原理,请查看qt文档。