Not a kernel guy

… in the Windows kernel team

Monday, November 13, 2006

Макросы BUILD_PRODUCES и BUILD_CONSUMES.

Судя по всему, существует довольно распространённое заблуждение касательно использования макросов BUILD_PRODUCES и BUILD_CONSUMES в скриптах для стандартной утилиты build.exe из WDK. Напомню, что эти макросы служат для синхронизации сборки разных частей проекта на многопроцессорной машине. Например, если проект состоит из двух библиотек A и B, и библиотека B использует файлы, сгенерированные в процессе сборки A, то для корректной сборки такого проекта на однопроцессорной машине достаточно указать A перед B в dirs файле. В случае же многопроцессорной машины для синхронизации сборки A и B нужно дополнительно:

  • добавить BUILD_PRODUCES=A_lib в “A\sources”;
  • добавить BUILD_CONSUMES=A_lib в “B\sources”.

Примечание: Строка “A_lib” в примере выше может быть заменена на любую другую. Следует лишь помнить, что каждое объявление BUILD_PRODUCES должно использовать уникальную строку.

Так вот, заблуждение состоит в том, что при использовании этих макросов порядок директорий в файле dirs может быть произвольным. На самом деле это не так и директория A должна по-прежнему указываться ранее директории B. Если порядок будет обратным, build.exe просто проигнорирует оба макроса. Проверить корректность использования BUILD_PRODUCES и BUILD_CONSUMES можно запустив build.exe с параметром -verifysynchronization.

Ссылка по теме: Building on a Multiprocessor Computer.

Posted at 3:09 pm •

RSS feed | Trackback URI

Comments »

No comments yet.

Your Comment (smaller | larger)

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress