Как установить глобальные настройки в решении в VC++?
У меня есть ряд решений с большим количеством проектов в них. Я хотел бы иметь возможность определять глобальные параметры для решения, которые используются всеми проектами. Например, каталог include. Я хочу иметь возможность изменить каталог include в одном месте для всех проектов в решениях.
Когда я искал решение, я нашел хорошее описание проблемы, которая соответствует мне точно, но предлагаемое решение, листы свойств проекта, определяются по каждому проекту, а не по решениям.
Я мог бы использовать переменные окружения или настройки Visual Studio, но тогда всем, кому нужно скомпилировать код, нужно определить одни и те же настройки.
Может кто-нибудь предложить способ сделать это? Спасибо.
Ответы
Ответ 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. Это не совсем глобально, поскольку он принадлежит проекту и используется другими.