- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含大量项目 (.sln
) 的大型 Visual Studio 2010 解决方案文件 (~50
)。每个项目大致由 20
组成.cpp
和 .h
文件。在快速的 Intel i7 机器上构建整个项目大约需要 2 个小时,所有依赖项都本地缓存在快速 SSD 上。
我正在尝试 replicate an existing experiment I found on this topic ,并且需要澄清如何:
MSBuild.exe
获取这些更改也适用于自动命令行构建. /m
和
/maxcpucount
选项一样吗?我有
read an article on the /m
option,这似乎建立了更多
项目 在平行下。这似乎与我通过 GUI 中的以下操作设置的选项相同:
Maximum number of parallel project builds
/MP
,我可以通过以下方式在 GUI 中访问:
Multi-processor Compilation
.cpp
并行文件,但没有选项指定多少,除非我必须在文本框中手动设置它(即:
/MP 4
或
/MP4
。
/MP
要工作,我需要禁用最小重建(即:
Enabled Minimal Rebuild: No (/GM-)
),它也不适用于预编译的头文件。我通过使预编译头文件成为解决方案首先构建的专用项目,在所有其他项目之前解决了预编译头文件问题。
.cpp
),通过命令行使用 MSBuild,并确认它们按预期工作?我上面的假设是否也正确?
我的最终目标是测试使用最多使用的内核总数构建项目,或者如果我的构建过程受 I/O 限制而不是 CPU 限制,甚至可能使其重载。 我可以通过以下方式在 Linux 中轻松做到这一点:
NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
NUMJOBS="$(echo "$NUMCPUS*1.5" | bc)"
NUMJOBS="$(printf '%.0f' $NUMJOBS)"
alias pmake='time nice make -j$NUMJOBS'
make
自动构建多达 12 个
.cpp
并行文件,处理隐式构建规则/依赖项等。我试图在 Visual Studio Professional 和 MSBuild 中实现相同的目标。当我的构建受 I/O 限制时,这种方法最能将所有内核保持在
~100%
。用法。
最佳答案
/MP
编译器 ( cl.exe
) 和 /m
的开关msbuild.exe
的选项确实是要走的路。这里有一些相关的documentation提取物:
The /MP option causes the compiler to create one or more copies of itself, each in a separate process. Then these copies simultaneously compile the source files. Optional Argument: The maximum number of processes that the compiler can create. If you omit the processMax argument, the compiler retrieves the number of effective processors on your computer from the operating system, and creates a process for each processor. The /MP option is incompatible with some compiler options and language features. If you use an incompatible compiler option with the /MP option, the compiler issues warning D9030 and ignores the /MP option
Examples suppose you specify the following command line:
cl /MP7 a.cpp b.cpp c.cpp d.cpp e.cpp
In this case the compiler uses five processes because that is the lesser of five source files and a maximum of seven processes. Alternatively, suppose your computer has two effective processors and you specify the following command line:
cl /MP a.cpp b.cpp c.cpp
In this case the operating system reports two processors; therefore, the compiler uses two processes in its calculation. As a result, the compiler will execute the build with two processes because that is the lesser of two processes and three source files.
cl /MP3 a.cpp b.cpp c.cpp
的命令。同时,您将同时运行 6 个编译器进程。这是您所追求的行为,也是 msbuild 可以做的事情。
msbuild /?
的输出:
/maxcpucount[:n] Specifies the maximum number of concurrent processes to build with. If the switch is not used, the default value used is 1. If the switch is used without a value MSBuild will use up to the number of processors on the computer. (Short form: /m[:n])
BuildInParallel is an optional boolean parameter on a MSBuild task. When BuildInParallel is set to true (its default value), multiple worker processes are generated to build as many projects at the same time as possible. For this to work correctly, the /maxcpucount switch must be set to a value greater than 1, and the system must be at least dual-core or have two or more processors.
msbuild /m my.vcxproj
在一个典型的项目上,这不会做任何特别的事情,因为只有一个项目要构建。但是,如果在 msbuild 文件中调用了 MsBuild 任务,例如
<MsBuild Projects="@(ListOfProjects)" BuildInParallel="True"/>
<max num cl processes> * <max num msbuild instances>
并行编译。这取决于您的构建机器什么是最佳的,如果您希望您可以使用这些选项(为了有效地做到这一点,您的每个项目都将导入一个公共(public)属性表,您可以在其中设置/MP 选项,否则您必须编辑所有这些都是单独的)并查看构建完成时 msbuild 报告的耗时。我总是将/m 和/MP 的参数保留为默认值,因为我不希望使用我的项目的其他开发人员有可能的次优配置,并且因为它很容易最大化 CPU。
关于visual-studio - MSBuild - 如何并行构建多个文件和项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787023/
我有以下一段 msbuild 代码: C:\DirA\ C:\DirB\ '$(DirA)%(Filename)%(Extension)')">
我有一个 master.proj msbuild 脚本,它使用 MSBuild 任务构建多个项目。 这是一个典型的例子: 但是,我的问题是,如果在命令行上给出更多属性,它们不会传递给 MSB
我编写了一个自定义 MSBuild 任务,将其称为 TaskA,它解析文件并对其进行一些处理。我现在想编写另一个 MSBUild 任务,将其称为 TaskB,它在其中使用 TaskA。我知道我可以像使
我有好几次无法在 csproj 文件 (.NET Core) 中找到有关有效元素的信息。特别是具有 Content 和 Include/Exclude/Update/CopyToPublishDire
鉴于这样的事情.. DB1 Database
我有一个msbuild目标,它具有一个Import标签,如下所示: 在Company.LifeCycle.targets文件的内容中,如何以编程方式获取当前目录(在这种情况下为: C:\Progra
我在MSBuild脚本中创建的项目组的范围设置方面遇到一些问题。基本上,我想要做的是有两个不同的目标-我们将它们称为RunUnitTests和RunIntegrationTests-生成一个名为Tes
我希望下面的代码为 List 和 List2 生成相同的项目(我在搜索路径中有一个 cpp1 项目)。 '..\..\..\projects\**\%(identity).vcx
我正在编写一个 MSBuild 任务来升级数据库(完整源代码 here),遇到了一个我不知道如何处理的错误/设计特征。基本上,如果我声明: public int? TargetVersion {
MSBuild 针对最新目标发出以下消息: Skipping target "MyTarget" because all output files are up-to-date with respec
我正在为 msbuild 编写一个脚本,它应该在一个步骤中制作两批。 示例:2 个项目组 这两个组应该相互循环: 我希望 msbuild 使两个批次的结果都给出 1 A 2
我正在使用构建定义构建项目。执行此操作时,还会执行代码分析。代码分析输出各种文件,包括: ConsoleApplication2.exe.CodeAnalysisLog.xml ConsoleAppl
我正在尝试使用 MSBuild 从文本文件中读取文件列表,然后执行递归复制,将这些目录文件的内容复制到某个暂存区,同时排除某些扩展名(例如 .tmp 文件) 我已经设法使用 CreateItem 和
我有一个MSBuild项目,我希望将当前日期添加到正在创建的zip文件中。 我正在使用MSBuildCommunityTasks。 在网站http://msbuildtasks.tigris.or
我正在将一个 Web 应用程序包从 MSBuild 命令行部署到 IIS6 上的 MSDepSvc,它使用基本身份验证与以下命令一起正常工作: MSBuild.exe Web.csproj /p:
我有以下 MSBuild 脚本: test1;test2;test3 如果我调用不带任何参数的脚本,我会得
对于不是项目文件而是更复杂的构建脚本的 MSBuild 文件是否有标准文件扩展名? 我正在考虑 .msbuild.proj 以避免与其他 .proj 文件(我知道实际上是 MSBuild 文件)混淆。
假设我有两个耗时的目标,并且我想并行执行它们。假设一个目标运行单元测试,另一个目标生成一些文档。我尝试过这种方法: root.targets:
看起来(至少)有两个选项可以让 nant 使用 csproj 文件:使用 NAntContrib 的任务或直接使用 msbuild.exe (例如 codecampserver )。我读得对吗?如果是
如何获取内置 MSBuild 变量的列表? 我需要知道如何确定当前项目的 csproj 名称,并且认为了解我还能在 MSBuild 中找到什么内容可能会很有用。 最佳答案 来自 Microsoft 文
我是一名优秀的程序员,十分优秀!