使用MSBuild任务在同一解决方案中构建另一个(C ++)项目?

时间:2017-10-20 15:02:45

标签: visual-studio visual-c++ msbuild msbuild-task

对于一个我目前无法破解的怪异依赖链,我想在同一个解决方案中从另一个C ++项目构建一个C ++项目作为“post build”步骤。

我知道如何在命令行上调用MSBuild,但我认为使用内置的MSBuild任务触发其他项目的构建可能更有意义:

my.vcxproj

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
...
  <Target Name="BuildTheOtherProject" AfterTargets="Build">  
      <MSBuild Projects="..\theother\theother.vcxproj" Targets="Build" Properties="Configuration=$(Configuration);Platform=$(Platform)">
      </MSBuild>  
  </Target>
</Project>

这看起来在第一眼看上去很好,但是这会继续工作(想想:完整解决方案的并行项目构建等),我是否将正确的值传递给MSBuild任务?

有一个related question对C#项目提出同样的问题,csc似乎有问题(这与vcxproj无关),所以我想知道一般的立场是什么此?

(我在Visual Studio 2015 atm。)

1 个答案:

答案 0 :(得分:1)

是的,您正在正确调用MSBuild任务。但你不应该这样做。这是糟糕的风格。而且你肯定会在将来隐藏在.vcxproj文件中的这个小技巧中绊倒某个人。以正确的方式指定依赖关系:在解决方案文件(.sln)中,visual studio将确保以正确的顺序构建文件。如果您想要更多功能,可以使用<ProjectReference>而不是使用解决方案文件来指定依赖关系,但这是一个不同的主题。

在我拥有大量代码库的公司工作多年:这样的伎俩从来没有做过,也绝不应该。