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

Как установить глобальные настройки в решении в VC++?

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Как показали другие, листы свойств могут делать то, что вы хотите. Хитрость заключается в использовании InheritedPropertySheets, поскольку вы использовали бы #include в С++. ПРИМЕЧАНИЕ. 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>

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

Ответ 3

Возможно, вы могли бы добавить файл MSBuild к вашему решению, в котором вы определяете несколько общих свойств, а затем <Import> , который файл во все ваши реальные проекты?

Таким образом, в вашем файле настроек 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>

Ответ 4

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

Ответ 5

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

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