BUILD_PRODUCES/BUILD_CONSUMES
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 03.06.14 13:12
Оценка:
Решил попробовать зависимую сборку каталогов под 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, как всегда, никаких оговорок, все должно работать.

Получается, библиотеку и бинарник, от нее зависящий, в многопроцессорном режиме нормально не собрать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.