Я бы включил файл целей вручную и создавал извне с помощью MSBuild, а не из среды IDE, потому что, когда компиляция из IDE была немного беспорядочной, чтобы узнать, какая конфигурация и цель были вами применены (это тот, который нажал на проект? Или один из включенная цель? вы не получаете визуального намека на то, что настраиваемая цель включена).
Обычно я делаю это до того, Import Project="$(BDS)BinCodeGear.Delphi.Targets"
чтобы они не показывались на IDE (они существуют, но скрыты для разработчиков).
Например, мои проекты Delphi XE4 заканчиваются:
<Import Project="..BuildServer.Targets"/>
<Import Project="$(BDS)BinCodeGear.Delphi.Targets" Condition="Exists('$(BDS)BinCodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)Embarcadero$(BDSAPPDATABASEDIR)$(PRODUCTVERSION)UserTools.proj" Condition="Exists('$(APPDATA)Embarcadero$(BDSAPPDATABASEDIR)$(PRODUCTVERSION)UserTools.proj')"/>
</Project>
Мой файл .targets определяет пользовательские «PropertyGroup» и «Target» с условием, поэтому они будут применяться только при вызове из MSBuild:
<PropertyGroup Condition="'$(Config)'=='CustomConfig'">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
...
</PropertyGroup>
<Target Name="DisplayProjectInfo">
<Message Text="Project File Name = $(MSBuildProjectFile)"/>
<Message Text="Version = $(VerInfo_Keys)"/>
<Message Text="OutputDir = $(DCC_ExeOutput)"/>
</Target>
<Target Name="CustomTarget" Condition="'$(Config)'=='CustomConfig'">
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Clean" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" />
<CallTarget Targets="DisplayProjectInfo"/>
</Target>
Затем скомпилируйте его с помощью:
msbuild /t:CustomTarget /p:config=CustomConfig poject.dproj
Используя этот подход, вы можете настроить цели сборки, чтобы убедиться, что каждое приложение получает правильные настройки, не подвергая изменениям, внесенным кем-либо.