我在构建先决条件时遇到了麻烦。 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:detailed
:Pastebin MSBuild的完整输出。它被放置在Pastebin上,因为它对Stack Overflow来说太大了。
没有提及“MAC工具”。似乎MSBuild正在默默地跳过它,即使它应该每次都被评估。