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.