Приношу свои извинения за длинный текст, но у меня возникли некоторые проблемы с использованием функции Custom Build Tool в VS2013 для проектов C ++. Я хочу взять файл проекта «resource.h» и сгенерировать выходной файл, который для этих целей мы будем называть «resource.out».
Я написал инструмент, который принимает два параметра командной строки — файл «resource.h» и файл «resource.out». Сначала я попробовал это на простом сгенерированном приложением-мастере приложении doc / view MFCApplication1. Я добавил файл «resource.x» в качестве файла-пустышки, чтобы он был «скомпилирован» с помощью специального инструмента сборки. Для этого конкретного файла я установил «Тип элемента» на «Custom Build Tool», и при настройке инструмента у меня есть следующее:
Command Line: "<path-to-tool>" resource.h .\res\resource.out
Outputs: .\res\resource.out
Additional Dependencies: resource.h
Это работает. Когда я собираю MFCApplication1, я вижу следующее в моем окне вывода:
1> Performing Custom Build Tools
1> Successfully generated resource out file ('res\resource.out')
Вторая строка выводится из моего пользовательского инструмента сборки. Так что в этом простом тесте все работает так, как я ожидал.
Теперь я пытаюсь сделать то же самое в моем реальном коде. У меня есть решение с несколькими проектами, и один проект отвечает за использование ресурсов другого проекта и создание библиотеки DLL. Структура каталогов выглядит так:
Main
MainApp
resource.h
MainRes
MainRes.vcxproj references "..\MainApp\resource.h"
Таким образом, проект MainRes ссылается на файл ресурса из проекта MainApp. После того, что было успешным в моем эксперименте с MFCApplication1, я добавил «resource.x» в основное приложение и сослался на него в MainRes:
Main
MainApp
resource.h
resource.x
MainRes
MainRes.vcxproj references "..\MainApp\resource.h"MainRes.vcxproj references "..\MainApp\resource.x"
В проекте MainRes я выбрал «resource.x» и через свойства контекста установил его «Тип элемента» на «Custom Build Tool» и настроил его следующим образом:
Command Line: "<path-to-tool>" ..\MainApp\resource.h ..\MainApp\res\resource.out
Outputs: ..\MainApp\res\resource.out
Additional Dependencies: ..\MainApp\resource.h
Теперь, когда я пытаюсь скомпилировать «resource.x» в MainRes, я получаю следующее предупреждение (предупреждение MSB8018: не указаны выходные данные для элемента «.. \ MainApp \ resource.x»):
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8018: No outputs specified for item "..\MainApp\resource.x". Its custom build command will be skipped.
Поэтому я подумал, что это может быть контекстом, и изменил конфигурацию на:
Command Line: "<path-to-tool>" resource.h .\res\resource.out
Outputs: .\res\resource.out
Additional Dependencies: resource.h
Я получаю то же предупреждение. Я не понимаю, что я делаю здесь не так. У меня ‘Outputs’ установлен в файл, и у меня есть выходной файл в командной строке. Заранее спасибо за чью-либо помощь в этом. Я потратил слишком много времени на это уже …
Ооооо … Наконец-то я понял, что по какой-то причине изменение конфигурации Custom Build Tool с помощью редактора фактически сохраняло данные в vcxproj с неверной конфигурацией. Несмотря на то, что в редакторе у меня были правильно настроены Конфигурация и Платформа, он записывал в файл другую конфигурацию. Кто, черт возьми, знает, почему это так, но извлеченный урок — всегда проверяйте свой файл vcxproj!
Других решений пока нет …