Когда Visual C++ строит файл (vcxproj) из Visual Studio или вы строите его с помощью devenv (сборка sln), вы получаете журнал из сборки vcxproj в файле, указанном в элементе BuildLog.Path. Значение по умолчанию для этого элемента — $(IntDir)\$(MSBuildProjectName).log.
На самом деле я считаю эту функцию очень полезной для анализа после сборки каждого проекта.
Я хотел бы имитировать это поведение, собирая только из msbuild.exe.
Существуют серьезные причины автоматизации сборки, по которым я не могу сейчас использовать devenv (насколько мне известно, я не могу собрать vcxproj с помощью devenv без sln).
Я пытался решить эту проблему:
- создание пользовательской цели, которая определяет значение BuildLog.Path и возвращает его обратно
- а затем выполните задачу Exec с помощью командной строки msbuild, включая аргумент, который использует filelogger для создания файла журнала.
Проблема в том, что он не работает!
Есть интересная вещь, что по умолчанию указывается:
<ItemDefinitionGroup>
<BuildLog>
<Path>$(IntDir)\$(MSBuildProjectName).log</Path>
</BuildLog>
</ItemDefinitionGroup>
Если я правильно понял, это указывает путь к метаданным для каждого элемента BuildLog.
По умолчанию нет элемента BuildLog (поскольку в vcxproj нет элемента Include для элемента BuildLog).
Кто-нибудь имеет решение этой проблемы или может объяснить, как ее решить?
- определить метаданные BuildLog.Path или
- построить файл vcxproj только с помощью msbuild с файлом журнала в файл журнала, указанный в vcxproj или унаследованный от файла реквизита