Personalizzare le compilazioni C++

È possibile usare Directory.Build.props e Directory.Build.targets per personalizzare tutti i progetti C++ in una cartella padre comune. Vedere Personalizzare per cartella. Inoltre, i progetti C++ forniscono i punti di estendibilità seguenti. È possibile usare le proprietà per specificare o importare .props automaticamente i file prima o dopo i file Microsoft.Cpp.* :.targets

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Queste importazioni forniscono il controllo sulla sequenza delle definizioni delle proprietà che dipendono da altre proprietà o destinazioni che dipendono da altre destinazioni. La sequenza di importazioni in un .vcxproj oggetto è simile alla seguente:

   vcxproj
      Microsoft.Cpp.default.props
         Microsoft.Common.props
            Directory.Build.props
      Microsoft.Cpp.props
      Microsoft.Cpp.targets
         Microsoft.Common.targets
            Directory.Build.targets

Vedere .vcxproj e la struttura del file props. Se è necessario definire proprietà che usano altre proprietà definite in Microsoft.Cpp.default.props o Microsoft.Cpp.props, è possibile creare un altro .props file (ad esempio, MyProps.props) e definire la ForceImportAfterCppProps proprietà in Directory.Build.props modo che punti al file:

<PropertyGroup>
  <ForceImportAfterCppProps>$(MSBuildThisFileDirectory)\MyProps.props</ForceImportAfterCppProps>
</PropertyGroup>

MyProps.props verrà importato automaticamente alla fine di Microsoft.Cpp.props.

Personalizzare tutte le compilazioni C++

La personalizzazione dell'installazione di Visual Studio non è consigliata, poiché non è facile tenere traccia di tali personalizzazioni, ma se si estende Visual Studio per personalizzare le compilazioni C++ per una determinata piattaforma, è possibile creare .targets file per ogni piattaforma e inserirli nelle cartelle di importazione appropriate per tali piattaforme come parte di un'estensione di Visual Studio.

Il .targets file per la piattaforma Win32, Microsoft.Cpp.Win32.targets, contiene l'elemento seguente Import :

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportBefore\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportBefore')"
/>

C'è un elemento simile alla fine dello stesso file:

<Import Project="$(VCTargetsPath)\Platforms\Win32\ImportAfter\*.targets"
        Condition="Exists('$(VCTargetsPath)\Platforms\Win32\ImportAfter')"
/>

Esistono elementi di importazione simili per altre piattaforme di destinazione in *%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms*.

Dopo aver inserito il .targets file nella cartella appropriata ImportAfter in base alla piattaforma, MSBuild importa il file in ogni compilazione C++ per tale piattaforma. Se necessario, è possibile inserire più .targets file.

Usando l'estendibilità di Visual Studio, sono possibili ulteriori personalizzazioni, ad esempio la definizione di una nuova piattaforma. Per altre informazioni, vedere Estendibilità del progetto C++.

Specificare un'importazione personalizzata nella riga di comando

Per la personalizzazione .targets da includere per una compilazione specifica di un progetto C++, impostare una o entrambe le proprietà ForceImportBeforeCppTargets e ForceImportAfterCppTargets nella riga di comando.

msbuild /p:ForceImportBeforeCppTargets="C:\build\config\Custom.Before.Microsoft.Cpp.Targets" MyCppProject.vcxproj

Per un'impostazione globale ,ad esempio tutte le build C++ per una piattaforma in un server di compilazione, sono disponibili due metodi. Prima di tutto, è possibile impostare queste proprietà usando una variabile di ambiente di sistema sempre impostata. Questa tecnica funziona perché MSBuild legge sempre l'ambiente e crea (o esegue l'override) delle proprietà per tutte le variabili di ambiente.