2010-02-24 412 views
11

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

到目前为止,我已经试过

CONFIG += ordered 

以正确的顺序无济于事。

而且同样更神秘的语法:

client.depends = core common 

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

回答

1

我不是makefile中的wiz,但是如果我是你,我会尝试通过编辑.pro文件,运行qmake然后在MAKLEFILE中查看自动生成的结果来重新创建与QtCreator的依赖关系。如果你想知道qmake是如何工作的,那么看看qt文档。

+0

我一直在每一套文档我能找到的。并做了大量的潜水源引导。作为一个方面说明,生成文件qmake生成似乎具有正确的依赖关系。这是有问题的.sln。 –

+0

@Michael:你的意思是个别的.vcproj文件(因为我相信那些依赖关系存在)。 –

+0

我会猜想这个东西居住在.sln文件中,因为这是知道所有不同项目的文件,并且可以将它们与我需要的依赖关联起来。 –

2

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

看来,它试图弄清楚哪些事情取决于你。您是否可以从sln构建而无需手动输入项目依赖关系?

+0

我遇到过那个神秘的帖子。不确定信息是否最新。我当然尝试过使用它描述的简单和复杂的方法,但无济于事。 没有手动输入依赖关系,我不能说构建真的有效,不。它没有完全破碎,但是有足够的问题,无论是公开的还是沉默的,总是值得手动添加代币。 –

+0

您是否尝试过使用QtCreator设置依赖项,然后创建sln?我没有我的Qt开发机器,所以当你在项目视图中指定依赖关系时,我无法确定它将什么放到pro文件中。 –

8

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

  • .depends该子项目取决于指定子项目。仅在使用生成文件的平台上可用。
  • 订购选项不适用于Visual Studio。

但他们提供了一种解决方法(在cryptic post中讨论过),它仍然有效,甚至在同一个target部分有记录。太糟糕了,我不得不重建QMAKE和使用调试器来验证:

  1. 一)有它的目标(.LIB使用LIB/DLL项目,而不是.dll文件)使用在解决方案中的另一个项目的链接行上(您可以使用LIBS修改链接行)。

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

  2. 您不使用TARGET变量中的路径(对此使用DESTDIR/DLLDESTDIR),例如TARGET = $(SOME_VARIABLE)/ myLib将不起作用。
  3. 如果你有一个特定的位置为你的库,你指定-Lmy /库/路径和LIBS + = mylib,而不是只使用LIBS + =我的/库/路径/ mylib
  4. 叶项目创建在生成解决方案文件之前。 (您可以用递归的标志QMAKE要做到这一点,像 “QMAKE -tp VC -r [yourproject.pro]”

基本上,QMAKE会产生依赖,当你的lib的目标名称(yourlib.lib)是等于最终应用的导入库(即具有LIBS += yourlib.lib)之一。 (见qmake's source其中导入库添加为依赖关系和​​,他们正在与项目目标名称相比)

这里是解决方案中生成依赖关系的最小设置:

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 
+0

非常感谢!最后我知道为什么heck依赖不起作用。 – Trass3r

相关问题