C++ derlemelerini özelleştirme

C++ projeleri için özel .targets ve .props dosyalar, varsayılan ayarları geçersiz kılmak için aynı şekilde kullanılamaz. Bu makalede, C++ derlemeleri için çalışan derlemeyi özelleştirmenin farklı bir yolu açıklanmaktadır.

.NET projelerini özelleştirmek için yararlı olan Directory.Build.props dosyası, içinde içeri aktarılan Microsoft.Common.props tarafından içeri aktarılırkenMicrosoft.Cpp.Default.props, varsayılanların çoğu Microsoft.Cpp.props içinde tanımlanır ve birçok özellik için "henüz tanımlanmamışsa" koşulu kullanılamaz, çünkü özellik zaten tanımlanmıştır, ancak ile tanımlanan Label="Configuration"PropertyGroup belirli proje özellikleri için varsayılanın farklı olması gerekir (bkz. .vcxproj ve .props dosya yapısı).

C++ projelerde, Microsoft.Cpp.* dosyalarından önce/sonra otomatik olarak içeri aktarılacak dosyaları belirtmek .props için aşağıdaki özellikleri kullanabilirsiniz:

  • ForceImportAfterCppDefaultProps
  • ForceImportBeforeCppProps
  • ForceImportAfterCppProps
  • ForceImportBeforeCppTargets
  • ForceImportAfterCppTargets

Tüm C++ derlemelerinde özelliklerin varsayılan değerlerini özelleştirmek için başka bir .props dosya (örneğin, MyProps.props) oluşturun ve özelliği ona işaret eden olarak Directory.Build.props tanımlayınForceImportAfterCppProps:

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

MyProps.props, Microsoft.Cpp.props dosyasının en sonunda otomatik olarak içeri aktarılır.

Tüm C++ derlemelerini özelleştirme

Bu tür özelleştirmeleri izlemek kolay olmadığından Visual Studio yüklemesini özelleştirmek önerilmez, ancak Visual Studio'yu belirli bir platform için C++ derlemelerini özelleştirmek üzere genişletiyorsanız, her platform için dosya oluşturabilir .targets ve visual studio uzantısının bir parçası olarak bu platformlar için uygun içeri aktarma klasörlerine yerleştirebilirsiniz.

.targets Win32 platformu microsoft.Cpp.Win32.targets dosyası aşağıdaki Import öğeyi içerir:

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

Aynı dosyanın sonuna yakın benzer bir öğe vardır:

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

*%ProgramFiles32%\MSBuild\Microsoft.Cpp\v{version}\Platforms* içindeki diğer hedef platformlar için de benzer içeri aktarma öğeleri var.

Dosyayı platforma .targets göre uygun ImportAfter klasöre yerleştirdikten sonra, MSBuild dosyanızı bu platform için her C++ derlemesine aktarır. Gerekirse oraya birden çok .targets dosya yerleştirebilirsiniz.

Visual Studio Genişletilebilirliği'ni kullanarak yeni bir platform tanımlama gibi daha fazla özelleştirme yapılabilir. Daha fazla bilgi için bkz . C++ proje genişletilebilirliği.

Komut satırında özel içeri aktarma belirtme

C++ projesinin belirli bir derlemesine eklemek istediğiniz özel .targets için, özelliklerden ForceImportBeforeCppTargets birini veya her ikisini de ForceImportAfterCppTargets komut satırına ayarlayın.

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

Genel bir ayar için (örneğin, derleme sunucusundaki bir platform için tüm C++ derlemelerini etkilemek için) iki yöntem vardır. İlk olarak, her zaman ayarlanmış bir sistem ortam değişkeni kullanarak bu özellikleri ayarlayabilirsiniz. MSBuild ortamı her zaman okuduğundan ve tüm ortam değişkenleri için özellikler oluşturduğundan (veya geçersiz kıldığından) bu teknik çalışır.