Включить пути поиска в конфигурации сборки TeamCity - PullRequest
1 голос
/ 20 мая 2009

Обычно, когда разработчик компилирует определенное смешанное решение C ++ / C # локально на своей машине в нашей компании, он использует файл конфигурации .vssettings. Одна из вещей, включенных в этот файл конфигурации, - это ссылки на различные пути каталогов для файлов Lib и Include.

Однако наши машины buildAgent (использующие TeamCity) настроены на стерильность, и на них установлен минимальный минимум, необходимый для построения любого конкретного решения / проекта. Это означает, что рассмотренный выше смешанный проект C ++ / C # не будет иметь доступа к конфигурации IDE, в которой были заданы пути поиска. TC учитывает это, позволяя вам устанавливать всевозможные переменные для любой заданной buildConfiguration (или даже buildAgent) ....

Но как мне получить путь поиска Включить для работы в TC? Я копирую из Source Control (Perforce) локальную копию того, что я хочу Включено (1) , а затем пытаюсь определить переменную среды (2) - и все же TC не удается построить (3) .

Я уверен, что я что-то настроил неправильно, но за всю жизнь не могу понять, что!


Любая помощь будет наиболее ценной,

Blong


(1) Отображение клиента VSC - Выполнение

// depot / OpenSource / Boost-1.33.0 / boost / ... //team-city-agent/OpenSource/boost/...


(2) определение переменной среды buildConfig

env.Include =% system.teamcity.build.checkoutDir% \ OpenSource


(3) Фрагмент журнала сборки TC

[16:57:39]: [Project "xxx.sln" (целевые объекты):] e: \ buildagent \ work \ ef1853a454da9d94 \ xxx \ rowbase.cpp (5, 0): ошибка C1083: Не удается открыть включаемый файл: 'boost / dynamic_bitset.hpp': такого файла или каталога нет

Ответы [ 3 ]

4 голосов
/ 29 июня 2009

Во-первых, вы должны попытаться скомпилировать решение самостоятельно с помощью msbuild или vcbuild в командной строке, потому что TeamCity сделает что-то подобное. При необходимости добавьте папку msbuild в системную переменную Path. Затем откройте командную строку и введите:

msbuild.exe YourSolution.sln

или

msbuild.exe YourSolution.sln / p: конфигурация = выпуск

в зависимости от того, хотите ли вы сделать это в режиме отладки или выпуска. Это должно дать те же ошибки C1083.

Вот исправление:

  1. Добавьте путь к каталогам, которые вам нужны, чтобы добавить переменную среды (фактически, системную переменную), которую я предлагаю вам назвать INCLUDE.

  2. Откройте файл VCProjectEngine.dll.config.xml в папке ... / Microsoft Visual Studio 9.0 / VC / vcpackages /.

Добавьте системную переменную INCLUDE в строку включения. Для меня дело дошло до замены: Include = "$ (VCInstallDir) включают в себя; $ (VCInstallDir) atlmfc \ включают в себя: $ (WindowsSdkDir) \ включают в себя: $ (FrameworkSDKDir) включают в себя"

с: Include = "$ (VCInstallDir) включают в себя; $ (VCInstallDir) atlmfc \ включают в себя: $ (WindowsSdkDir) \ включают в себя: $ (FrameworkSDKDir) включают в себя: $ (ВКЛЮЧИТЬ)"

  1. Проверка работоспособности: откройте новую командную строку (необходимо после изменения переменных среды, чтобы они учитывались) и попытайтесь построить решение, как показано выше. Это помогло мне создать решения C ++ с файлами, которые #include.

  2. Теперь давайте поработаем и в TeamCity. В этот момент вы можете запустить сборку TC, чтобы увидеть, работает ли она, но не для меня. Перейдите к «Свойствам и переменным среды» вашей конфигурации сборки TC и добавьте переменную среды с именем INCLUDE со значением того же пути (путей), что и в системной переменной INCLUDE выше.

Теперь это должно работать. Надеюсь, это поможет.

1 голос
/ 24 июля 2010

Настройка службы агента сборки для запуска с учетной записью не «локальной системы» исправила мою проблему.

0 голосов
/ 06 мая 2010

Я столкнулся с проблемой, если бы мои проекты на C ++ собирались в Visual Studio на агенте сборки, но они терпели неудачу при сборке через TC. Агент сборки работает под управлением Windows, а агент работает как служба (Служба агента TeamCity Build). Проблема заключалась в том, что служба запускалась как «Локальная система» вместо пользователя, который настраивал Visual Studio. Я меняю сервис, чтобы он входил в систему как пользователь "build", и все работало нормально.

...