У меня есть много проектов Qt в Visual Studio, используя новый формат Qt / MsBuild предоставлено Qt VS Tools. При компиляции в моей среде разработки, где у меня установлен Qt VS Tools, все работает безупречно (компиляция из IDE и из командной строки).
У нас есть компьютер, предназначенный для ночных сборок, где доступны только компилятор и msbuild (не установлены IDE или Qt VS Tools).
При компиляции проектов на таком компьютере мы получаем ошибку:
QtMsBuild: не удалось найти qt.targets, qt.props; проект может быть построен неправильно.
Далее следуют несколько строк, таких как
e: ******** \ Preferences.h (4): фатальная ошибка C1083: не удается открыть включаемый файл: ‘ui_Preferences.h’: такого файла или каталога нет
(Проект содержит Preferences.ui
).
Как я могу решить такие ошибки, когда Qt VS Tools не установлены?
Одним из решений, предоставляемых создателями Инструментов, является копирование %LOCALAPPDATA%\QtMsBuild
в каждый каталог проекта. Но мы говорим о сотнях проектов. Делать вручную и даже больше, выдвигая их как часть самого проекта, звучит не очень элегантно.
Одним из вариантов будет добавление шага перед сборкой, который копирует его из общего места в каждый проект (и добавление **/QtMsBuild
строка к каждому файлу .gitignore). Опять же, похоже, слишком много работы.
Просматривая файл .vcxproj для проекта Qt, вы обнаруживаете этот фрагмент (причина решения, предоставленного создателями):
<PropertyGroup Condition="'$(QtMsBuild)'=='' or !Exists('$(QtMsBuild)\qt.targets')">
<QtMsBuild>$(MSBuildProjectDirectory)\QtMsBuild</QtMsBuild>
</PropertyGroup>
Итак, самое простое решение (без возможности установки инструментов), это скопировать %LOCALAPPDATA\QtMsBuild
в ночной компьютер (в любом обычном месте, но я решил сохранить местоположение, используемое инструментами) и затем установить переменную среды:
set QtMsBuild=%LOCALAPPDATA%\QtMsBuild
PS: не добавляйте двойные кавычки в переменную (по крайней мере, у меня были проблемы с ними, поэтому VS не мог найти файлы).
Других решений пока нет …