Решил попробовать зависимую сборку каталогов под WDK 7.1 (6.1.7600), обнаружил в логе вот такое:
BUILD_CONSUMES/PRODUCES is unnecessary, remove it.
...
Compiling (NoSync) ...
Compiling (NoSync) ...
Compiling (NoSync) ...
Сборка запускается в порядке указания каталогов, но никто никого не ждет.
Структура каталогов такая (в порядке указания в dirs):
wdm
app
test
testapp
testwdm
all
wdm/app — библиотеки (LIBRARY) для kernel и user mode.
testwdm/testapp — тестовые драйвер (DRIVER) и приложение (PROGRAM), от них зависящие.
all — псевдо-проект (NOTARGET), зависящий от всего остального (выполняет финальные действия).
BUILD_PRODUCES/BUILD_CONSUMES определены, как полагается.
Сообщения о "ненужности" выдает makefile.new:
!if (defined(BUILD_CONSUMES) || defined(BUILD_PRODUCES)) && ("$(TARGETTYPE)" == "PROGRAM" || "$(TARGETTYPE)" == "DRIVER")
!message BUILDMSG: $(MAKEDIR): BUILD_CONSUMES/PRODUCES is unnecessary, remove it.
!endif
При этом из параметра видно, что относятся они только к testapp/testwdm.
Поставил в тестовые проекты SYNCHRONIZE_DRAIN — без толку, все равно начинает собирать эти проекты до завершения сборки библиотек. Но сам макрос распознает: если не убрать BUILD_PRODUCES/BUILD_CONSUMES, то ругается.
Думал, на это влияет вложенность, но в логах оно сперва перечисляет все пять каталогов с проектами, и только потом переходит к запуску компиляции — значит, обходит все sources на предварительном этапе.
В
статье от MS, как всегда, никаких оговорок, все должно работать.
Получается, библиотеку и бинарник, от нее зависящий, в многопроцессорном режиме нормально не собрать?