Работа со свойствами проектов
В интегрированной среде разработки все параметры компилятора, компоновщика и отладчика, а также пользовательские этапы сборки предоставляются как свойства.Для просмотра и изменения свойств проекта используются страницы свойств.Свойства проекта можно применять независимо к любому сочетанию конфигурации сборки (отладка или выпуск) и целевой платформы (Win32, x64 или ARM).Также можно задать свойства для отдельных файлов проекта.
Хотя свойства можно задавать "глобально" для каждого пользователя и для каждого компьютера, мы больше не рекомендуем это делать.Вместо этого рекомендуется использовать диспетчер свойств, чтобы создать страницу свойств для сохранения параметров для каждого типа проекта, который планируется повторно использовать или предоставлять другим пользователям.Страницы свойств также уменьшают вероятность случайного изменения значений свойств для других типов проектов.Более подробно страницы свойств будут рассмотрены далее в этой статье.
Чтобы открыть диспетчер свойств, в строке меню последовательно выберите Вид, Другие окна и Диспетчер свойств.
Система проектов Visual C++ основана на MSBuild.XML- файлы проекта и страницы свойств можно изменять непосредственно в командной строке, однако мы рекомендуем использовать интегрированную среду разработки, особенно при изменении свойства, участвующих в отношениях наследования.Вручную измененный файл, который является допустимым в MSBuild, не обязательно будет доступен для чтения системой проектов Visual C++. Кроме того, вы можете внести незаметные ошибки в процесс сборки.
Файл проекта — это XML-файл, который имеет расширение VCXPROJ.Все свойства, заданные в интегрированной среде разработки, записываются непосредственно в файл проекта или на страницы свойств, которые импортируются во время сборки.
На следующем рисунке показаны страницы свойств для проекта Visual C++.Обратите внимание, что в левой области выбрано правилоКаталоги VC++, а в правой области отображаются свойства, связанные с этим правилом. (Значения $(...) являются макросами, которые рассматриваются далее в этой статье). Каталоги VC++ — это свойство конфигурации, и его значения зависят от конкретной конфигурации — например, они могут быть разными для отладки и для выпуска.Можно использовать списки Конфигурация и Платформа в верхней части диалогового окна для настройки конфигураций, к которым применяются свойства; во многих случаях целесообразно использовать варианты Все платформы и Все конфигурации.Параметры в правиле Общие свойства применяются ко всем конфигурациям.
Задание свойств для проекта
Ниже представлен общий порядок задания свойств для проекта.
Задание свойства проекта
В строке меню выберите Проект, Свойства.Можно также открыть контекстное меню вашего проекта в обозревателе решений или диспетчере свойств, а затем выбрать пункт Свойства.Откроется диалоговое окно Окна свойств.
В полях в верхней части диалогового окна выделите конфигурации и платформы, к которым должен применяться параметр.
Для создания или изменения конфигураций, которые отображаются в поле Конфигурация, нажмите кнопку Диспетчер конфигураций.
Задайте значение свойства.При нажатии кнопки ОК новое значение записывается в файл проекта.
Примечание |
---|
В диалоговом окне Окна свойств отображаются только страницы свойств, которые относятся к текущему проекту.Например, если проект не содержит IDL-файл, страница свойств MIDL не отображается. |
Дополнительные сведения о свойствах в диалоговом окне Окна свойств:
Совет |
---|
Страницу свойств можно открыть напрямую — для этого введите ее имя в окне Быстрый запуск. |
Жестко заданные свойства и макросы
Некоторые свойства проекта могут принимать в качестве значения ссылку на свойство, определенное в другом месте.Этот вид значения называется макрос, что позволяет отличать его от других видов параметров свойств проекта.Макрос может обращаться к свойству, определяемому системой MSBuild, или свойству, которое вы определили самостоятельно.Использование макросов вместо жестко заданных значений, таких как пути к каталогам, упрощает совместное использование параметров свойств на разных компьютерах и в разных версиях Visual Studio, а также позволяет гарантировать, что параметры проекта правильно участвуют в наследовании свойств.
глобальные макросы
Применяются ко всем элементам в конфигурации проекта.Синтаксис: $(name).Пример глобального макроса — свойство $(VCInstallDir), которое сохраняет корневой каталог установки Visual Studio.Глобальный макрос соответствует элементу PropertyGroup в MSBuild.макросы элементов
Синтаксис: %(name).В случае файла макрос элемента применяется только к этому файлу — для примера можно использовать %(AdditionalIncludeDirectories), чтобы определить каталоги, которые применяются только к конкретному файлу.Этот тип макроса элемента соответствует метаданным ItemGroup в MSBuild.При использовании в контексте конфигурации проекта макрос элемента применяется ко всем файлам определенного типа.Например, свойство конфигурации C/C++ Определения препроцессора может принимать макрос элемента %(PreprocessorDefinitions), который применяется ко всем CPP-файлам в проекте.Этот тип макроса элемента соответствует метаданным ItemDefinitionGroup в MSBuild.Дополнительные сведения см. в разделе Определения элементов.
Макросы можно использовать для определения значений свойств. Для просмотра значений доступных макросов можно использовать редактор свойств.
Редактор свойств
Редактор свойств можно использовать для изменения некоторых строковых свойств и выбора макросов в качестве значений.Чтобы открыть редактор свойств, выберите свойство на странице свойств, а затем нажмите кнопку со стрелкой вниз справа.Если раскрывающийся список содержит команду <Изменить>, можно выбрать ее, чтобы открыть редактор свойств для данного свойства.
В редакторе свойств можно нажать кнопку Макросы, чтобы просмотреть доступные макросы и их текущие значения.На следующем рисунке показан редактор свойств для свойства Дополнительные каталоги включаемых файлов после нажатия кнопки Макросы.Если вы добавляете новое значение, когда установлен флажок Наследовать от родителя или от значений по умолчанию для проекта, оно добавляется ко всем значениям, которые в данный момент наследуются.Если снять флажок, новое значение заменяет наследуемые значения.В большинстве случаев следует не снимать этот флажок.
Общий доступ к повторно используемым конфигурациям свойств
Если имеется общий, часто используемый набор свойств, которые необходимо применить к нескольким проектам, то с помощью диспетчера свойств их можно записать в повторно используемый файл страницы свойств, который по соглашению имеет расширение имени файла PROPS.Эту страницу можно применять к новым проектам, чтобы исключить необходимость в задании свойств с нуля.Чтобы открыть Диспетчер свойств, в строке меню выберите Вид, Диспетчер свойств.
Если щелкнуть команду Добавить новую страницу свойств проекта, а затем выбрать, например, страницу свойств MyProps.props, откроется диалоговое окно страницы свойств.Обратите внимание, что оно относится к странице свойств MyProps; все вносимые изменения записываются на эту страницу, а не в файл проекта (с расширением VCXPROJ).
Свойства на странице свойств переопределяются, если то же свойство задано непосредственно в VCXPROJ-файле.
Страницу свойств можно импортировать любое количество раз.Несколько проектов в решении могут наследовать параметры от одной страницы свойств, и проект может иметь несколько страниц.Страница свойств сама может наследовать параметры от другой страницы свойств.
Важно |
---|
По умолчанию PROPS-файл не участвует в системе управления версиями, поскольку он не создается как элемент проекта.Если требуется включить этот файл в систему управления версиями, можно вручную добавить его как элемент решения. |
Создание страницы свойств
В строке меню выберите Вид, Диспетчер свойств.Откроется диалоговое окно Диспетчер свойств.
Чтобы определить область страницы свойств, выберите элемент, к которому она применяется.Это может быть определенная конфигурация или другая страница свойств.Откройте контекстное меню этого элемента и выберите команду Добавить новую страницу свойств проекта.Укажите имя и расположение.
В диспетчере свойств откройте новую страницу свойств, а затем задайте свойства, которые следует включить.
Наследование свойств
Свойства проекта имеют многоуровневую структуру.Каждый уровень наследует значения предыдущего уровня, но унаследованное значение может быть переопределено путем явного задания свойства.Ниже представлено базовое дерево наследования.
Параметры по умолчанию из набора инструментов CPP системы MSBuild (..\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.Cpp.Default.props, импортируемый VCXPROJ-файлом).
Страницы свойств.
VCXPROJ-файл (может переопределять параметры по умолчанию и параметры страницы свойств).
Метаданные элементов.
Совет |
---|
Свойство, выделенное полужирным шрифтом (bold) на странице свойств, определяется в текущем контексте.Свойство в обычном шрифте наследуется. |
Файл проекта (VCXPROJ) импортирует другие страницы свойств во время сборки.После завершения импорта страниц свойств вычисляется файл проекта, и в нем используется последнее определение любого значения свойства.Иногда полезно просмотреть развернутый файл, чтобы определить, как наследуется значение данного свойства.Для просмотра развернутой версии введите следующую команду в командной строке Visual Studio (замените заполнители на конкретные имена файлов).
msbuild /pp:temp.txtmyapp**.vcxproj**
Развернутые файлы проекта могут быть большими и трудными для понимания, если пользователь не знаком с MSBuild.Ниже представлена основная структура файла проекта.
Основные свойства проекта, которые не представлены в интегрированной среде разработки.
Импорт файла Microsoft.cpp.default.props, который определяет некоторые базовые, независимые от набора инструментов свойства.
Глобальные свойства конфигурации (предоставляемые как свойства по умолчанию PlatformToolset и Project на странице Конфигурация > Общие).Эти свойства определяют, какие страницы свойств наборов инструментов и встроенные страницы свойств будут импортироваться из файла Microsoft.cpp.props на следующем шаге.
Импорт файла Microsoft.cpp.props, который задает большинство значений проекта по умолчанию.
Импорт всех страниц свойств, включая USER-файлы.Эти страницы свойств могут переопределить все значения, кроме свойств по умолчанию PlatformToolset и Project.
Остальная часть свойств конфигурации проекта.Эти значения могут переопределять значения, заданные на страницах свойств.
Элементы (файлы) вместе с связанными с ними метаданными.Эти элементы всегда используются последними в правилах вычисления MSBuild, даже если появляются до других свойств и импортов.
Дополнительные сведения см. в разделе Свойства MSBuild.
USER-файлы и связанные с ними проблемы
В последних версиях Visual Studio использовались глобальные страницы свойств с расширением имени файла USER, которые были расположены в папке <профиль_пользователя>\AppData\Local\Microsoft\MSBuild\v4.0\.Мы больше не рекомендуем использовать эти файлы, поскольку они определяют свойства для конфигураций проектов для каждого пользователя и для каждого компьютера.Такие "глобальные" параметры могут конфликтовать со сборками, особенно при использовании нескольких целевых платформ на компьютере сборки.Например, при наличии одновременно проекта MFC и проекта Windows Phone свойства USER будут недопустимыми для одного из них.Многократно используемые страницы свойств обеспечивают большую гибкость и надежность.
Хотя USER-файлы по-прежнему устанавливаются средой Visual Studio и участвуют в наследовании свойств, по умолчанию они являются пустыми.Рекомендуется удалить ссылку на эти файлы в диспетчере свойств, чтобы гарантировать работу проектов независимо от параметров конкретного пользователя или конкретного компьютера. Это важно для обеспечения правильного поведения в среде управления исходным кодом (SCC).
Добавление каталога включения к набору каталогов по умолчанию
При добавлении каталога включения в проект важно не переопределить все каталоги по умолчанию.Правильный способ добавления каталога — добавить новый путь, например "C:\MyNewIncludeDir\", и затем добавить макрос $(IncludePath) к значению свойства.
Создание пользовательского макроса
Можно создавать пользовательские макросы для использования в качестве переменных в сборках проекта.Например, можно создать пользовательский макрос, предоставляющий значение пользовательскому шагу сборки или пользовательскому средству сборки.Пользовательский макрос — это пара "имя-значение".Для доступа к этому значению в файле проекта используется нотация $(name).
Пользовательский макрос хранится на странице свойств.Если проект еще не содержит страницу свойств, можно создать ее, выполнив действия, описанные ранее в данной статье.
Создание пользовательского макроса
В окнеДиспетчер свойств (в строке меню выберите Вид, Диспетчер свойств) откройте контекстное меню для страницы свойств (ее имя имеет расширение USER), а затем выберите пункт "Свойства".Откроется диалоговое окно Страницы свойств для данной страницы свойств.
В левой области диалогового окна выберите Пользовательские макросы.В правой области нажмите кнопку Добавить макрос, чтобы открыть диалоговое окно Добавление пользовательского макроса.
В диалоговом окне задайте имя и значение для макроса.Кроме того, можно установить флажок Задание данного макроса в качестве переменной среды в среде сборки.
Задание переменных среды для сборки
Компилятор Visual C++ (cl.exe ) распознает определенные переменные среды, в частности LIB, LIBPATH, PATH и INCLUDE.При сборке с помощью интегрированной среды разработки для задания этих переменных среды используются свойства, заданные на странице свойств Страница свойств каталогов VC++.Если значения LIB, LIBPATH, и ВКЛЮЧАЕТ уже заданы, например с помощью командной строки разработчика, они заменяются значениями соответствующих свойств MSBuild.Сборка затем добавляет значение свойства каталогов исполняемых файлов "Каталоги VC++" в начало переменной PATH.Для задания пользовательской переменной среды можно создать пользовательский макрос и затем установить флажок Задание данного макроса в качестве переменной среды в среде сборки.
Задание переменных среды для сеанса отладки
В левой области диалогового окна Страницы свойств проекта разверните узел Свойства конфигурации и выберите пункт Отладка.
В правой области измените параметры проекта Среда или Объединение среды, а затем нажмите кнопку ОК.
Просмотр всех макросов и их значений
В диалоговом окне Страницы свойств проекта выберите строковое свойство, например Каталоги VC++, нажмите кнопку со стрелкой вниз в правом столбце, а затем щелкните <Изменить>, чтобы открыть редактор свойств.В редакторе свойств нажмите кнопку Макросы.
Одновременное задание свойств для нескольких конфигураций
Чтобы задать свойства для всех конфигураций, в полях в верхней части диалогового окна Окна свойств проекта выберите Все конфигурации и Все платформы, а затем задайте требуемые свойства.
Чтобы задать свойства только для некоторых конфигураций, выберите несколько свойств в диспетчере свойств, а затем откройте контекстное меню и щелкните пункт Свойства.Все параметры, которые вы изменяете, применяются к каждой выбранной конфигурации.
Также можно создать одну страницу свойства для нескольких конфигураций.Для этого создайте страницу свойств для каждой конфигурации, откройте контекстное меню для одной из них, выберите Добавить существующую страницу свойств и добавьте другие страницы.Однако при использовании одной общей страницы свойств следует иметь в виду, что, устанавливая свойство, вы задаете его для всех конфигураций, к которым применяется соответствующая страница, и интегрированная среда разработки не указывает, какие проекты или другие страницы свойств наследуют от данной страницы свойств.
В больших решениях, которые будут содержать много проектов, имеет смысл создать страницу свойств на уровне решения.При добавлении проекта к решению используйте диспетчер свойств для добавления этой страницы свойств в проект.При необходимости можно добавить новую страницу свойств на уровне проекта для задания значений, относящихся к данному проекту.
Быстрый просмотр и поиск всех параметров
Страница свойств Все параметры (в узле C/C++ в левой области диалогового окна Страницы свойств) предоставляет быстрый способ просмотра и поиска свойств, доступных в текущем контексте.Она имеет специальное поле поиска и простой синтаксис, который помогает отфильтровать результаты.
Без префикса:
поиск только в именах свойств (подстрока без учета регистра)."/" или "-":
поиск только в параметрах компилятора (префикс без учета регистра)v:
поиск только в значениях (подстрока без учета регистра).