如何使用MSBuild.rsp或以其他方式指定默认的Visual Studio MSBuild.exe命令行开关


0

我希望MSBuild.exe始终使用/ MP选项,以便始终使用多个内核来构建项目。我尝试将/ MP添加到MSBuild.rsp的最后一行(与MSBuild.exe可执行文件位于同一目录中)。但是,未使用/ MP选项。如何使Visual Studio始终使用/ MP选项?

MSBuild.rsp介绍我想使用的行为,但我一直没能得到它的工作:

自动响应文件是MSBuild.exe在构建项目时自动使用的特殊.rsp文件。该文件MSBuild.rsp必须与MSBuild.exe位于同一目录中,否则将找不到该文件。您可以编辑此文件以指定默认命令行开关到MSBuild.exe。例如,如果您每次构建项目时都使用同一记录器,则可以将/ logger开关添加到MSBuild.rsp,并且MSBuild.exe将在每次构建项目时使用记录器。

我重新启动计算机,以确认MSBuild.exe是否不是使用MSBuild.rsp的先前版本。

我通过检查Windows任务管理器中的“打开文件位置”来验证是否在与MSBuild.exe相同的目录中修改了MSBuild.rsp。项目配置MP选项为空白(未明确禁用)。

我确认通过执行“仅项目”重建并仅计算Windows Task Manager中的一个cl.exe实例,并未使用MSBuild.rsp中的/ MP选项(如果我使用手动设置的/ MP选项进行了相同的重建,有超过10个cl.exe实例)。

我还尝试向MSBuild.rsp添加一堆垃圾,Visual Studio没有报告错误或警告,这使我认为MSBuild.rsp根本没有被使用。

我尝试为MSBuild启用诊断输出日志记录,并在项目的配置设置中明确启用它时显示/ MP选项(作为Tracker.exe的参数),但是如果我在项目的配置中将MP选项保留为空白,则仅包含在MSBuild.rsp中,/ MP选项不包括在此输出中。我不知道什么是Tracker.exe(我希望可以在其位置看到MSBuild.exe)。我还尝试在与Tracker.exe相同的目录中添加带有/ MP的Tracker.rsp文件,这完全没有帮助(并且我也尝试将MSBuild.rsp添加到我的Tracker.exe目录中,并且没有影响)。

只是为了查看rsp文件是否可以工作,我显式添加了rsp文件,并在项目的配置设置中添加了@选项,它确实显示为在诊断生成输出的/ MP选项中加载,但没有效果。 。/ MP选项作为cl.exe的参数包含在后面,而不是像在项目配置中指定MP选项时那样作为Tracker.exe的参数。我认为选项应该是MSBuild(或者我猜是Tracker.exe),而不是cl.exe。

我在大多数C ++项目中使用Visual Studio 2010。


我想修改默认开关,这样就不必直接更改我的项目配置,因为(1)我的解决方案中有几十个项目,(2)该项目配置受版本控制,我不想检查这些变化在这个时候。
JDiMatteo 2014年

Answers:


1

您可以做的一件事是将其放在props文件中,并使您的单个项目从该文件继承。在ItemDefinitionGroup里面你ClCompile你必须<MultiProcessorCompilation>true</MultiProcessorCompilation>


感谢Jay的工作,并恢复了我对Microsoft和Visual Studio的信念!我没有添加props文件,而是在C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4的<ItemDefinitionGroup>底部添加了<ClCompile> <MultiProcessorCompilation> true </ MultiProcessorCompilation> </ ClCompile>。 0 \ Microsoft.Cpp.Default.props,因此该设置将是我所有项目的默认设置。
JDiMatteo 2014年

很高兴有帮助。我只是要确保与您合作的其他人都知道这样做,这样您的团队中就不会有分歧的资产。如果您想将其检入源代码管理,则可以在程序文件中建立符号链接(通过mklink),以在更方便的位置(例如,无论在何处检出项目)都指向默认props文件的副本。 。然后,您将始终拥有最新的副本,而不必记住要更改MSFT文件夹下的文件。
杰·卡尔顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.