Как определить глобальные настройки в решении в VC ++? - PullRequest
12 голосов
/ 18 декабря 2008

У меня есть ряд решений с большим количеством проектов в них. Я хотел бы иметь возможность определить глобальные параметры для решения, которые используются во всех проектах. Например, каталог включения. Я хочу иметь возможность изменить каталог включения в одном месте для всех проектов в решениях.

Когда я искал решение, я нашел хорошее описание проблемы, которое точно соответствует моему , но предлагаемое там решение, листы свойств проекта, определены для проекта, а не для решения.

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

Может кто-нибудь предложить способ сделать это? Спасибо.

Ответы [ 5 ]

15 голосов
/ 18 декабря 2008

Для этого мы используем листы свойств. Один лист свойств может быть назначен всем проектам в решении. С этого момента вы можете изменить настройку в одном листе свойств, и это повлияет на все проекты.

Расширенный совет: на самом деле мы используем несколько листов свойств (например, один для целевых типов выпуска, другой для целевых типов отладки). Совет заключается в том, что порядок очень важен. Если вы редактируете файлы проекта вручную, то последний лист свойств будет переопределять настройки предыдущих списков свойств в списке. Если вы редактируете в GUI, то верхний переопределяет те, что под ним.

2 голосов
/ 19 декабря 2008

Как и предполагали другие, списки свойств могут делать то, что вы хотите. Хитрость заключается в том, чтобы использовать InheritedPropertySheets, как если бы вы использовали #include в C ++. ПРИМЕЧАНИЕ: XML немного отличается для файлов проекта и файлов свойств. Вот надуманный и упрощенный пример двух проектов (prjA.vcproj и prjB.vcproj), включая один и тот же лист свойств (sln.vsprops), который сам включает в себя другой (strict.vsprops):

strict.vsprops

<VisualStudioPropertySheet ...>
    <Tool Name="VCCLCompilerTool" WarningLevel="3" WarnAsError="true"/>
</VisualStudioPropertySheet>

sln.vsprops

<VisualStudioPropertySheet ... InheritedPropertySheets=".\strict.vsprops">
    <Tool
        Name="VCCLCompilerTool"
        PreprocessorDefinitions="NOMINMAX=1"
        RuntimeTypeInfo="true"
    />
</VisualStudioPropertySheet>

prjA.vcproj

<VisualStudioProject ...>
    <Configurations>
        <Configuration ... InheritedPropertySheets=".\sln.vsprops">
        </Configuration>
    </Configurations>
    ...
</VisualStudioProject>

prjB.vcproj

<VisualStudioProject ...>
    <Configurations>
        <Configuration ... InheritedPropertySheets=".\sln.vsprops">
        </Configuration>
    </Configurations>
    ...
</VisualStudioProject>

Вы также можете найти этот вопрос и ответы на него полезными.

1 голос
/ 28 августа 2009

Как и предполагалось, вы должны посмотреть листы свойств (файлы .vsprops).
Я написал очень краткое введение в эту функцию здесь .

1 голос
/ 18 декабря 2008

Может быть, вы могли бы добавить файл MSBuild в свое решение, в котором вы определяете ряд общих свойств, а затем этот файл во все ваши реальные проекты?

То есть в вашем файле "настроек" MSBuild вы определяете ряд свойств:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WinUnitIncludeDir>C:\Includes\WinUnit</WinUnitIncludeDir>
        <!-- Other shared properties go here -->
    </PropertyGroup>
</Project>

Из ваших реальных проектов вы можете обратиться к этому:

<Project ...>
    ...
    <Import Project="path/to/settings.msbuild" />
    ...
    <Configurations>
        <Configuration ...>
            <Tool Name="VCCLCompilerTool"
                  ...
                  AdditionalIncludeDirectories="$(WinUnitIncludeDir)"
                  ... />
            ...
        ...
    ...
</Project>
0 голосов
/ 18 декабря 2008

Некоторое время назад я искал точно то же самое, но не нашел именно то, что хотел.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...