使用 /MP 编译项目时,仅同一文件夹中的文件会并发编译。我使用进程资源管理器切换命令行并确认了这种行为。
项目过滤器似乎对并发编译没有影响。
项目在磁盘上的结构如下:
Folder\
project.vcxproj
source\
foo.cpp
foo1.cpp
other_folder\
bar.cpp
bar1.cpp
bar3.cpp
初始进程树:
MSBuild.exe
cl.exe ( passed: source\foo.cpp source\foo1.cpp )
cl.exe ( passed: source\foo.cpp )
cl.exe ( passed: source\foo1.cpp )
在2个cl.exe子实例完成后,父进程关闭,接下来出现以下进程树:
MSBuild.exe
cl.exe ( passed: other_folder\bar.cpp other_folder\bar1.cpp other_folder\bar2.cpp )
cl.exe ( passed: other_folder\bar.cpp )
cl.exe ( passed: other_folder\bar1.cpp )
cl.exe ( passed: other_folder\bar2.cpp )
我们的源代码以多层嵌套文件夹的形式组织,与磁盘上的标题布局相匹配 - 我不想放弃这一点来利用/MP。