Макросы BUILD_PRODUCES и BUILD_CONSUMES

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

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

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

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

comments powered by Disqus