У нас работает Team City Build Server, и мы хотим скомпилировать проект Visual C ++. Пока это будет легко, поскольку я настроил наш агент сборки Windows с помощью Windows SDK, но у нас нет файла решения / проекта.
Вместо этого файлы проекта создаются с помощью CMake. CMake, кажется, немного туповат (не может сгенерировать Solution, когда Visual Studio не установлен), но с некоторыми хитростями я мог бы заставить его это сделать. Решение может быть построено с помощью MSBuild.
И тут возникает проблема. Чтобы это работало автоматически, мне нужно вызвать SetEnv.cmd в Windows SDK. И я не могу найти это автоматически. Он находится в подкаталоге bin пакета Windows SDK, но ни bin, ни root не находятся в пути, а переменная окружения %mssdk%
задается SetEnv.cmd и заранее недоступна!
Добавление Windows SDK \ bin dir к PATH приводит к тому, что SetEnv.cmd больше не работает (выходит с сообщением типа The x86 compilers are not currently installed
и Jump target Set_x86 not found
.
Ссылка в меню «Пуск» вызывает SetEnv.cmd с каталогом Windows SDK в качестве рабочего каталога. Но если я добавлю корневой каталог в PATH, Bin \ SetEnv.cmd будет недоступен.
Как мне автоматически найти SetEnv.cmd? Даже установка переменной окружения на полный путь к setenv.cmd не работает, и когда я определяю% mssdk% в качестве sdk dir, то вызов% mssdk% \ bin \ SetEnv также не работает. Я также попытался определить% mssdk%, затем cd% mssdk%, а затем вызвать bin \ SetEnv. Также компиляторы не найдены во всех этих случаях. Это также не работает, если я вручную перехожу в корневой каталог или каталог bin в командной строке, а затем вызываю SetEnv.cmd ...
Ссылка на меню "Пуск" работает нормально.
Для справки, на данный момент, как ни странно, мое решение таково:
Я создал файл MSBuild, который создает файл решения с CMake в командной строке, а затем вызывает созданное решение с задачей MSBuild. Файл MSBuild может быть легко собран из TeamCity, хотя мне потребовались некоторые дополнительные уловки, чтобы удовлетворить глупый CMake , ищущий компилятор, хотя я не буду вызывать его . Не совсем удовлетворительно, но это работает.