Как использовать файл .vsprops для переопределения каталогов VC ++ в MS Visual Studio - PullRequest
6 голосов
/ 17 февраля 2010

Я бы хотел переопределить каталоги, используемые Visual Studio (devenv.exe) для путей к компилятору и библиотеке. Я знаю, как сделать это в интерактивном режиме через Сервис-> Параметры-> Каталоги VC ++, но я бы хотел автоматизировать это.

http://msdn.microsoft.com/en-us/library/t9az1d21(VS.80).aspx содержит заманчивое примечание: «Если вы хотите настроить пути поиска в каталоге (для ваших проектов), которые могут совместно использоваться другими пользователями или могут применяться на нескольких компьютерах, Visual C ++ предоставляет альтернатива использованию этого диалога через листы свойств проекта. Для получения дополнительной информации см. Таблицы свойств (C ++). "

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

Я нашел информацию, заполняемую диалогом каталогов VC ++, в% LocalAppData% \ Microsoft \ VisualStudio \ 8.0 \ VCComponents.dat (для VS 2005 и 9.0 для VS 2008); кажется, что он устанавливает различные свойства в VC \ VC_OBJECTS_PLATFORM_INFO \ win32 \ Directories и ... \ x64 \ Directories.

Кто-нибудь делал это раньше и знает, что такое сопоставление от имен свойств, используемых в VCComponents.dat, до имен, которые будут использоваться в файле .vsprops?

Я бы хотел, чтобы это работало в VS2005, VS2008 и VS2010, в идеале.

В VS2010 Microsoft полностью покончила с диалогом каталогов VC ++ в разделе «Параметры просмотра», добавив его для каждого проекта, и теперь вы получаете интерактивный пользовательский интерфейс для редактирования этих каталогов в свойствах проекта вместо «Параметры просмотра»; это также означает, что для этого в менеджере свойств есть пользовательский интерфейс; затем, если вы хотите вносить изменения для каждого компьютера, а не для проекта, как это было раньше, вы просто настраиваете лист свойств так, как хотите, и заставляете все свои проекты наследовать от него. Это звучит как большое улучшение по сравнению со старым. И прямой способ сделать то, что я хочу сделать. Но только в VS2010.

VS2005 и VS2008 не имеют пользовательского интерфейса для установки этих свойств в проекте или в списке свойств; Я счастлив сделать это вручную, но я не знаю, как это должно выглядеть!

Вот пустой файл VS 2005.vsprops:

<?xml version="1.0"?>
<VisualStudioPropertySheet
    ProjectType="Visual C++"
    Version="8.00"
    Name="pathSettings"
    >
</VisualStudioPropertySheet>

Я установил VS 2010 и использовал его аккуратный новый графический интерфейс для внесения изменений в каталоги поиска; это выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup>
    <ExecutablePath>C:\Test;$(PATH)</ExecutablePath>
  </PropertyGroup>
</Project>

Однако, это не работает дословно в VS2005 - VS2005 отказывается загружать его (жалуется, что DTD / объявление схемы не найдено).

Я вставил это в контейнер, в ответ на что VS2005 сообщает мне, что «Элемент PropertyGroup является неожиданным в соответствии с моделью содержимого родительского элемента« VisualStudioPropertySheet ». Ожидается: Инструмент, UserMacro». Tool и UserMacro - это единственные вещи, показанные в примере на странице MSDN [drat - StackOverflow не позволит мне, как новому пользователю, разместить здесь гиперссылку - первый результат поиска Google для «инструмента листов свойств usermacro»] - возможно, единственные вещи, законные в листе собственности VS2005?

1 Ответ

8 голосов
/ 04 апреля 2011

Прежде всего, на самом деле есть графический интерфейс для редактирования таблиц свойств точно так же, как свойства проекта для всех версий VS, о которых вы говорите.

View->Other Windows->Property Manager

вызывает окно, в котором вы можете увидеть все конфигурации проекта и иерархию листов свойств.

Лист свойств можно использовать для переопределения всех свойств, которые имеет файл vcproj, а также содержит пользовательские макросы. Чтобы переопределить пути, о которых вы говорите, это пример списка свойств для VS2008, который устанавливает промежуточные, выходные, включаемые и библиотечные каталоги; поместите его в верхнюю часть иерархии диспетчера свойств, чтобы убедиться, что он вступает в силу:

<?xml version="1.0" encoding="Windows-1252"?>
<!-- override paths -->
<VisualStudioPropertySheet
  ProjectType="Visual C++"
  Version="8.00"
  Name="PathSettings"
  IntermediateDirectory="$(TEMP)\$(ProjectName)_$(ConfigurationName)"
>
<Tool
  Name="VCCLCompilerTool"
  AdditionalIncludeDirectories="d:\api\include"
/>
<Tool
  Name="VCLibrarianTool"
  OutputFile="c:\mylibs"
/>
<Tool
  Name="VCLinkerTool"
  OutputFile="c:\myoutput"
  AdditionalLibraryDirectories="d:\api\_lib"
/>

Это должно работать и для VS2005, но не для VS2010: как вы выяснили, он использует другой формат, поэтому вам придется хранить их по отдельности.

...