对于一个我目前无法破解的怪异依赖链,我想在同一个解决方案中从另一个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。)
答案 0 :(得分:1)
是的,您正在正确调用MSBuild任务。但你不应该这样做。这是糟糕的风格。而且你肯定会在将来隐藏在.vcxproj文件中的这个小技巧中绊倒某个人。以正确的方式指定依赖关系:在解决方案文件(.sln)中,visual studio将确保以正确的顺序构建文件。如果您想要更多功能,可以使用<ProjectReference>
而不是使用解决方案文件来指定依赖关系,但这是一个不同的主题。
在我拥有大量代码库的公司工作多年:这样的伎俩从来没有做过,也绝不应该。