Поделиться через


Задание пользовательских инструментов сборки

Настраиваемый инструмент сборки предоставляет системе сборки сведения, необходимые для сборки определенных входных файлов. Настраиваемый инструмент сборки указывает команду для выполнения, список входных файлов, список выходных файлов, создаваемых этой командой, и необязательное описание для инструмента.

Общие сведения о настраиваемых инструментах сборки и настраиваемых этапах сборки см. в разделе Сведения об этапах настраиваемой сборки и событиях сборки.

Задание настраиваемого инструмента сборки

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.

  2. Выберите Свойства конфигурации, чтобы включить поле Конфигурация. В поле Конфигурация выберите конфигурацию, для которой вы хотите указать настраиваемый инструмент сборки.

  3. В обозревателе решений выберите входной файл для настраиваемого инструмента сборки.

    Если папка Настраиваемый инструмент сборки не отображается, то расширение выбранного файла сопоставлено с инструментом по умолчанию. Например, для файлов C и CPP инструментом по умолчанию является компилятор. Чтобы переопределить параметр инструмента по умолчанию, в свойстве Тип элемента внутри узла Свойства конфигурации папки Общие выберите Настраиваемый инструмент сборки. Нажмите кнопку Применить, после чего отображается узел и Настраиваемый инструмент сборки.

  4. В узле Настраиваемый инструмент сборки папки Общие укажите свойства, связанные с настраиваемым инструментом сборки.

    • В поле Дополнительные зависимости укажите дополнительные файлы кроме того, для которого определен настраиваемый инструмент сборки (файл, связанный с настраиваемым инструментом сборки, неявно относится к его входным данным). Наличие дополнительных входных файлов для настраиваемого инструмента сборки не является обязательным. При наличии нескольких дополнительных входных файлов разделяйте их точкой с запятой.

      Если файл в поле Дополнительные зависимости имеет более позднюю дату, чем входной файл, то запускается настраиваемый инструмент сборки. Если все файлы в поле Дополнительные зависимости старше входного файла, а входной файл старше файла в свойстве Вывод, то настраиваемый инструмент сборки не запускается.

      Например, предположим, что у вас есть настраиваемый инструмент сборки, который принимает входной файл MyInput.x и создает файл MyInput.cpp, при этом MyInput.x содержит файл заголовка MyHeader.h. Вы можете указать MyHeader.h в качестве входной зависимости для MyInput.x, и система сборки выполнит сборку MyInput.cpp при его устаревании относительно MyInput.x или MyHeader.h.

      Входные зависимости также могут гарантировать нужный вам порядок выполнения настраиваемых инструментов сборки. Предположим, что в предыдущем примере MyHeader.h фактически является выходными данными настраиваемого инструмента сборки. Так как MyHeader.h является зависимостью MyInput.x, система сборки выполняет сборку Myheader.h, прежде чем запускать настраиваемый инструмент сборки для MyInput.x.

    • В поле Командная строка укажите команду так, как использовали бы ее в командной строке. Укажите допустимую команду или пакетный файл, а также все нужные входные или выходные файлы. Укажите пакетную команду call перед именем пакетного файла, чтобы обеспечить выполнение всех последующих команд.

      Несколько входных и выходных файлов можно указать символьно с помощью макросов MSBuild. Сведения о том, как указать расположение файлов и имена наборов файлов, см. в разделе Стандартные макросы для команд и свойств сборки.

      Так как символ "%" зарезервирован MSBuild, при указании переменной среды замените каждый escape-символ % шестнадцатеричной escape-последовательностью %25. Например, замените %WINDIR% на %25WINDIR%25. MSBuild заменяет каждую последовательность %25 на символ % перед обращением к переменной среды.

    • В поле Описание введите краткое описание настраиваемого инструмента сборки. Это сообщение выводится в окне Вывод при обработке этого инструмента системой сборки.

    • В поле Выходные элементы укажите имя выходного файла. Это обязательная запись — если не указать значение для этого свойства настраиваемый инструмента сборки не запустится. Если настраиваемый инструмента сборки имеет больше одного выходного файла, разделите их имена точкой с запятой.

      Имя выходного файла должно совпадать с указанным в свойстве Командная строка. Система сборки проекта выполнит поиск файла и проверит его дату. Если выходной файл более ранней версии, чем входной, либо выходной файл не найден, запускается настраиваемый инструмент сборки. Если все файлы в поле Дополнительные зависимости старше входного файла, а входной файл старше файла, указанного в свойстве Вывод, то настраиваемый инструмент сборки не запускается.

Если требуется, чтобы система сборки работала с выходным файлом, созданным настраиваемым инструментом сборки, нужно вручную добавить его в проект. Настраиваемый инструмент сборки обновляет файл во время сборки.

Пример

Предположим, что вы хотите включить в проект файл parser.l. У вас есть лексический анализатор lexer.exe, расположенный по пути к исполняемому файлу. Вы хотите использовать его для обработки parser.l, чтобы создать C-файл с тем же базовым именем (parser.c).

Сначала добавьте parser.l и parser.c в проект. Если файлы еще не существуют, добавьте ссылку на них. Создайте настраиваемый инструмент сборки для parser.l и введите следующее в свойстве Команды:

lexer %(FullPath) .%(Имя_файла).c

Эта команда запускает лексический анализатор для parser.l и выводит parser.c в каталог проекта.

В свойстве Выходные элементы введите следующее:

.%(имя_файла).c

При сборке проекта система сборки сравнивает метки времени parser.l и parser.c. Если parser.l является более новым или parser.c не существует, система сборки выполняет значение свойства Командная строка, чтобы сделать parser.c актуальным. Так как parser.c также добавлен в проект, система сборки затем компилирует parser.c.

См. также

Стандартные макросы для команд и свойств сборки
Устранение неполадок настроек сборки