Подтвердить что ты не робот

Переменная Macros/Environment в файлах .sln и .vcproj для Visual studio

У меня две аналогичные проблемы:

a) У меня есть решение, которое включает в себя несколько проектов, и я хочу легко переключаться с местоположением проекта, устанавливая некоторую переменную среды/макрос. В качестве примера этот проект может быть расположен в \ SolutionDir\Dir1\или\SolutionDir\Dir2 \ Итак, я хочу указать, что он должен быть расположен в \SolutionDir\$(Var) и просто установить переменную.

Есть ли в Visual Studio способ сборки?

В настоящее время я знаю только два решения - отредактируйте файл .sln вручную/программно, чтобы найти этот проект и установить правильный путь.

Я не смог использовать переменную среды в файле .sln.

b) У меня есть проект, который включает в себя файлы ресурсов (.rc и .h). Я хочу иметь возможность установить их местоположение через другую переменную среды или макрос.

Что-то вроде \ProjectDir\$(Var2)\resource.rc

Я нашел многообещающую информацию о листах свойств, но Visual Studio не расширяет макросы, когда я их использую в теге File в .vcproj.

Спасибо за любые идеи, как решить эту проблему.

С уважением, Виктор

4b9b3361

Ответ 1

Просто используйте переменную окружения в соответствующем поле:

OutputDirectory="$(MyEnvVariableName)\Bin"

Один трюк заключается в том, что вам нужно перезапустить среду Visual Studio при каждом изменении переменной.

Существует статья MSDN именно об этом: Как использовать переменные среды в сборке

Ответ 2

Я думаю, что у меня есть та же цель, что и вы: я хочу использовать переменные среды для поиска некоторых проектов в файле решения (.sln) и использовать некоторые переменные среды для поиска некоторых файлов в моих проектах.

Я нашел способ сделать это, и он отлично работает для меня (с Visual Studio 2005): - отредактируйте файл .sln с помощью текстового редактора и используйте переменные среды со следующим синтаксисом% MyEnvironmentVariable% - отредактируйте файлы .vcproj и замените путь на нужные файлы некоторыми переменными со следующим синтаксисом $(MyEnvironmentVariable).

Надеюсь, что это поможет... Сирил

Ответ 3

Лучший способ добиться того, что вы описали в b), - использовать листы свойств. Посмотрите также этот очень аналогичный вопрос.

Я нашел многообещающую информацию о листы свойств, но Visual studio не расширяет макросы, когда я использую их в теге Файл в .vcproj.

Я не уверен, какую версию VS вы используете. VS2008 позволяет определить, например, каталог include, такой как: "$ (OpenCVInclude)\cxcore\include". Я использую это все время. OpenCVInclude - это макрос, определенный в листе свойств.

Что касается вопроса а), я думаю, что нет "чистого" способа делать то, что вы хотите. В качестве альтернативы вы можете настроить менеджера конфигурации:

  • Включить все проекты в решение.
  • Назовите проект по-разному, например, на основе OEM.
  • Для каждого проекта определите конфигурации выпуска и отладки в решении
  • В "Build- > Configuration Manager" Вы можете проверить или снять флажок столбца "Build" для каждой конфигурации. Проверьте "сборку" для соответствующего проекта.

Ответ 4

Я не уверен, что вы строите только проекты на С++ или если вы также создаете проекты С#\VB, но одна из замечательных особенностей Visual Studio - это все проекты, которые действительно являются проектами MSBuild. Если вы редактируете проект в текстовом редакторе, вы увидите, что в конце проекта он импортирует файл .targets. Если вы отслеживаете и находите следовать импорту, вы обнаружите, что почти все проекты VS импортируют Microsoft.Common.Targets. Microsoft.Common.Targets импортирует Custom.Before.Microsoft.Common.Targets. Используя этот импорт, вы можете импортировать свой собственный файл целей своими собственными действиями.

У меня, например, есть целевой файл, который имеет общее свойство, определенное для всех проектов в решении, и пользовательское событие пост-сборки, которое обрабатывается в конце каждого проекта.

Используя этот метод расширения и создавая настраиваемые конфигурации в решении, помимо стандартного release\debug, вы должны иметь возможность создавать как можно более сложную конфигурацию сборки.

Ответ 5

(а) Кирилл дает достойное решение того, что вы просили. Другой способ - сохранить ваши сменные настройки в одном общем месте. Обратите внимание, что это не будет работать для файлов, отличных от msbuild, таких как *.sln и *.vcproj(до VS 2010).

Файлы проекта:      ...   $ (ChangeableDir)\foo.cs

Common.targets:          ChangeThis       ...   

Однако я не думаю, что это отличный способ сделать что-то. Если различия между тем, что вы строите, являются большими функциональными возможностями, вам следует подумать о создании ветки в вашей системе управления версиями. OTOH, если различия незначительны - например, жестко закодированные строки - тогда это приводит к вашему второму вопросу...

(б) Тип управления ресурсами, который вы описываете, по сути является той же проблемой, с которой сталкиваются люди, локализующие свой проект на разных языках. К счастью, прямая поддержка встроена в Visual Studio с 2005 года. Проверьте предыдущие вопросы, такие как: Локализация в Visual Studio 2008