Во-первых, для этого ответа я предполагаю, что вы хотели бы сделать это из Visual Studio IDE, а вы скомпилировали проект C ++.
Вы можете сделать это, добавив страницы свойств в свой проект, где вы указываете все этисимволы компиляции.Страницы свойств дают пользовательский интерфейс в очень мало усилий.Когда пользователь редактирует страницы свойств, данные сохраняются в элементах / свойствах в файле проекта или в файле пользователя.Вам также необходимо добавить пользовательское задание, которое на самом деле будет извлекать данные, которые были сохранены страницами свойств, и применять их при компиляции файлов.
Итак, здесь есть несколько подробностей:
Импорт файла целей из файла проекта.Отредактируйте .vcxproj и добавьте в конце (например, перед закрывающим элементом </Project>
) что-то вроде:
<Import Project="$(ProjectDir)MyTargets.xml" />
Составьте файл MyTargets.xml.Он должен импортировать страницы свойств и определить пользовательскую цель.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<PropertyPageSchema Include="$(ProjectDir)MyProperties.xml"/>
</ItemGroup>
<Target Name="AddMySymbols"
Inputs="@ClCompile"
Outputs="__non_existent_outputs__"
BeforeTargets="ClCompile">
<ItemGroup>
<ClCompile Include="@ClCompile">
<PreprocessorDefinitions Condition="'$(MY_SYMBOL)'='true'">MY_SYMBOL; %(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemGroup>
</Target>
</Project>
Цель AddMySymbols выполняется перед компиляцией каждого файла.Для каждого файла мы добавляем MY_SYMBOL в PreprocessorDefinitions, если свойство «MY_SYMBOL» имеет значение true.
- Compose MyProperties.xml file.Этот файл используется Visual Studio для отображения пользовательского интерфейса страниц свойств.Это позволит пользователю установить для свойства MY_SYMBOL значение true / false.Вот пример MyProperties.xml:
<?xml version="1.0" encoding="utf-8"?>
<ProjectSchemaDefinitions xmlns="http://schemas.microsoft.com/build/2009/properties">
<Rule Name="Symbols" PageTemplate="tool" DisplayName="Symbols" SwitchPrefix="/" Order="1" xmlns="http://schemas.microsoft.com/build/2009/properties" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Rule.Categories>
<Category Name="MySymbols">
<Category.DisplayName>
<sys:String>My Symbols</sys:String>
</Category.DisplayName>
</Category>
</Rule.Categories>
<Rule.DataSource>
<DataSource Persistence="ProjectFile" ItemType="" HasConfigurationCondition="false" />
</Rule.DataSource>
<BoolProperty
Name="MY_SYMBOL"
Category="MySymbols"
DisplayName="MY_SYMBOL"
Description="When enabled, MY_SYMBOL will be added to preprocessor symbols when compiling C/C++ files."/>
</ProjectSchemaDefinitions>
ItemType равен "", так что MY_SYMBOL будет сохранен в файле проекта как свойство, а не какпункт.Вы можете расположить это по-другому и вместо этого работать с предметами.Если вы хотите, чтобы символы сохранялись для каждого пользователя, вы можете сохранить его в файле пользователя, изменив DataSource на <DataSource Persistence="UserFile" ItemType="" HasConfigurationCondition="false" />
Вот ссылка на некоторые пояснения о страницах свойств .
Амир