Я надеюсь, что кто-то укажет на что-то неправильное или обходной путь для того, что мы испытываем.
При компиляции проекта с параметром /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 )
После завершения двух дочерних экземпляров 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.