VS2013 C ++ Custom Build Tool не работает - PullRequest
0 голосов
/ 09 мая 2018

Приношу свои извинения за длинный текст, но у меня возникли некоторые проблемы с использованием функции 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' установлен в файл, и у меня есть выходной файл в командной строке. Заранее спасибо за чью-либо помощь в этом. Я потратил на это слишком много времени ...

  • Steve

1 Ответ

0 голосов
/ 11 мая 2018

Тааак ... Наконец-то я понял, что по какой-то причине изменение конфигурации Custom Build Tool с помощью редактора фактически сохраняло данные в vcxproj с неверной конфигурацией. Несмотря на то, что в редакторе у меня были правильно настроены Конфигурация и Платформа, он записывал в файл другую конфигурацию. Кто, черт возьми, знает, почему это так, но извлеченный урок - всегда проверяйте свой файл vcxproj!

...