MSBuild不遵守通过DependsOnTargets

时间:2016-10-08 07:22:02

标签: visual-studio msbuild target prerequisites

我在构建先决条件时遇到了麻烦。 The regular Make program calls them prerequisites,但MSBuild使用 DependsOnTargets 调用目标

有人请 明确 说明如何将一个C ++项目中的工件作为另一个[当前] C ++项目的先决条件。请务必说明将它放在C ++项目文件的所有部分中的位置。如果需要,以下是项目文件的部分:A guide to .vcxproj and .props file structure

这个问题与Convert a PreBuildEvent to a Target with a Condition?非常相似我提出了错误的问题,导致最终答案无效。幸运的是,@ stijn能够告诉我微软称之为先决条件。

对于那些感兴趣的人来说,这就是我所知道的。我尝试的所有内容都会导致MSBuild以静默方式跳过先决条件。使用/verbosity:detailed/verbosity:diagnostic进行构建甚至不提及名称​​ MAC工具。我把它放在放置源文件的ItemGroup之前。

<!-- Win32/Debug cryptest.exe for DLL MAC'ing -->
<!-- Broken at the moment; see https://stackoverflow.com/q/39900437 -->
<Target
  Condition="!Exists('Win32\Output\Debug\cryptest.exe')"
  Name="MAC Tool"
  Label="MAC tool"
  DependsOnTargets="Projects=cryptest.vcxproj;Configuration=Debug;Platform=Win32;" >
  <Message
    Text="Creating Win32/Debug cryptest.exe for MAC computation" />
</Target>

在上面的代码中,当前项目是cryptdll.vcxproj。外部项目依赖项为cryptest.vcxproj。用户应该msbuild cryptdll.vcxproj /t:Build ...。如果缺少外部依赖(cryptest.exe),那么它将构建为用户没有任何操作。事情应该为他们“正常工作”。

对于那些想要笑的人,这是微软关于DependsOnTargets的文档。首先,Target Element (MSBuild)

  

可以执行在此目标之前必须执行的目标   或者可以发生顶级依赖性分析。多个目标是   用分号隔开。

然后再向下一点:

  

MSBuild引擎按照它们的顺序执行依赖项   出现在DependsOnTargets属性中,从左到右。更多   信息,请参阅MSBuild Targets

其次,关注MSBuild Targets的链接,该链接应该进一步讨论:

  

没错,没有提到DependsOnTargets

以下是msbuild /verbosity:detailedPastebin MSBuild的完整输出。它被放置在Pastebin上,因为它对Stack Overflow来说太大了。

没有提及“MAC工具”。似乎MSBuild正在默默地跳过它,即使它应该每次都被评估。

0 个答案:

没有答案