Visual Studio'da CMake Ön Ayarları ile yapılandırma ve derleme

CMake, kullanıcıların ortak yapılandırma, derleme ve test seçeneklerini belirtmesine ve bunları başkalarıyla paylaşmasına olanak sağlayan iki dosyayı destekler: CMakePresets.json ve CMakeUserPresets.json. Visual Studio ve Visual Studio Code'da, sürekli tümleştirme (CI) işlem hattında ve komut satırından CMake'yi yönlendirmek için bu dosyaları kullanın.

CMakePresets.json proje genelindeki derlemeleri kaydetmeye yöneliktir. CMakeUserPresets.json , geliştiricilerin kendi yerel derlemelerini kaydetmesine yöneliktir. Her iki dosya da Visual Studio 2019 sürüm 16.10 veya sonraki sürümlerde desteklenir.

Bu makale, Visual Studio ile tümleştirme hakkında CMakePresets.json bilgi içerir. İşte yararlı bağlantılar:

alternatif olarak CMakeSettings.jsonöneririzCMakePresets.json. Visual Studio hiçbir zaman hem hem de CMakePresets.json CMakeSettings.json aynı anda okumaz. Visual Studio'da tümleştirmeyi etkinleştirmek veya devre dışı bırakmak CMakePresets.json için bkz. Visual Studio 2019'da etkinleştirmeCMakePresets.json.

Desteklenen CMake ve CMakePresets.json sürümleri

Desteklenen CMakePresets.json ve CMakeUserPresets.json şema sürümleri Visual Studio sürümünüze bağlıdır:

  • Visual Studio 2019 sürüm 16.10 ve üzeri şema 2. ve 3. sürümleri destekler.
  • Visual Studio 2022 sürüm 17.4 önizleme 1, şema sürüm 4 için destek ekler.
  • Visual Studio 2022 sürüm 17.5 önizleme 1, şema sürüm 5 için destek ekler.

Kök nesnedeki alanı değiştirerek "version" sürümü güncelleştirebilirsiniz. Örnek ve daha fazla bilgi için bkz CMakePresets.json . biçim.

CMake'yi komut satırından ile çağırırken CMake CMakePresets.json sürüm 3.20 veya üzeri gereklidir. Ancak Visual Studio, ve kendisini okur ve değerlendirir CMakePresets.json CMakeUserPresets.json ve CMake'yi doğrudan seçeneğiyle --preset çağırmaz. Bu nedenle, Visual Studio içinde ile CMakePresets.json derleme yaparken CMake sürüm 3.20 veya üzeri kesinlikle gerekli değildir.

En az CMake sürüm 3.14 veya üzerini kullanmanızı öneririz.

Visual Studio'da tümleştirmeyi etkinleştirme CMakePresets.json

CMakePresets.json Visual Studio'da tümleştirme varsayılan olarak etkin değildir. Araç>Seçenekleri>CMake>Genel'de etkinleştirebilirsiniz:

'Her zaman CMakePresets.json kullan' öğesinin seçili olduğunu gösteren ekran görüntüsü.

Bu ekrana Visual Studio 2022 menüsünden ulaşılır: CMake > Genel > Araçlar > Seçenekleri. seçeneği, CMake dosya yapılandırma bölümünün altındadır.

Önemli

Tümleştirmeyi etkinleştirmek için Visual Studio'da klasörü kapatıp yeniden açın.

Visual Studio'nun bazı eski sürümlerinde, Araçlar>Seçenekleri>CMake>Genel tümleştirmeyi etkinleştirmek CMakePresets.json için yalnızca tek bir seçeneğe sahiptir:

Visual Studio'nun eski bir sürümünün ekran görüntüsü. 'CMake'i yapılandırmak, derlemek ve test etmek için C Hazır Ayarları .json kullan' etiketli bir onay kutusu vardır.

Aşağıdaki tablo, CMake yapılandırmasını yönlendirmek ve Visual Studio 2022 ve Visual Studio 2019 sürüm 16.10 ve sonraki sürümlerde derlemek yerine CMakeSettings.json ne zaman CMakePresets.json kullanıldığını gösterir. Yapılandırma dosyası yoksa, varsayılan Yapılandırma Ön Ayarları kullanılır.

Tabloda , "Araçlar>Seçenekleri etkinleştirildi", CMake'i yapılandırmak, derlemek ve test etmek için CMakePresets.json kullan'ın Araçlar>Seçenekleri>CMake>Genel'de seçili olduğu anlamına gelir.

Yapılandırma dosyaları Araçlar > Seçenekleri devre dışı Araçlar > Seçenekleri etkin
Yapılandırma dosyası yok CMakeSettings.json CMakePresets.json
CMakeSettings.json hediye CMakeSettings.json CMakePresets.json
CMakePresets.json hediye CMakePresets.json CMakePresets.json
Her iki yapılandırma dosyası da mevcut CMakePresets.json CMakePresets.json

Otomatik yapılandırma ve önbellek bildirimlerini değiştirme

Varsayılan olarak, Etkin Hedef Sistem veya Önceden Ayarlanmış Yapılandırma değişikliklerinde Visual Studio otomatik olarak çağrılır configure . Araç>Seçenekleri>CMake>Genel'de Yapılandırma adımlarını otomatik olarak çalıştırma seçeneğini belirleyerek bu davranışı değiştirebilirsiniz. Ayrıca, CMake önbellek bildirimlerini göster seçeneğini temizleyerek tüm CMake önbellek bildirimlerini (altın çubuklar) devre dışı bırakabilirsiniz.

Varsayılan Ön Ayarları Yapılandır

Dosya yoksa CMakePresets.json veya CMakeUserPresets.json yoksa ya da CMakeUserPresets.json geçersizseCMakePresets.json, Visual Studio aşağıdaki varsayılan Ön Ayarları Yapılandır'a geri döner:

Windows örneği

{
  "name": "windows-default",
  "displayName": "Windows x64 Debug",
  "description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type",
  "generator": "Ninja",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "architecture": {
    "value": "x64",
    "strategy": "external"
  },
  "cacheVariables": {
    "CMAKE_BUILD_TYPE": "Debug",
    "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
  },
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": [ "Windows" ]
    }
  }
},

Linux örneği

{
  "name": "linux-default",
  "displayName": "Linux Debug",
  "description": "Sets Ninja generator, compilers, build and install directory, debug build type",
  "generator": "Ninja",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "cacheVariables": {
    "CMAKE_BUILD_TYPE": "Debug",
    "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
  },
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": [ "Linux" ]
    },
    "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
      "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
   }
  }
}

Var olmayan bir CMakePresets.json dosyayı açmaya veya değiştirmeye çalışırsanız, Visual Studio projenizin kökünde varsayılan Ön Ayarları Yapılandır seçeneğine sahip bir CMakePresets.json dosyayı otomatik olarak oluşturur.

Yapılandırma ve derleme

Visual Studio araç çubuğunda, tümleştirme etkinleştirildiğinde CMakePresets.json Hedef Sistemler, Yapılandırma Ön Ayarları ve Derleme Ön Ayarları için açılan menüler vardır:

Yerel Makine olarak ayarlanmış hedef sistem, windows-arm64 olarak ayarlanmış yapılandırma ve varsayılan olarak ayarlanmış derleme ön ayarı açılan listelerini gösteren ekran görüntüsü.

Hedef Sistem Seçin

Soldaki açılan liste etkin Hedef Sistemi gösterir. Projeyi yapılandırmak ve derlemek için CMake'nin çağrıldığı sistemdir. Bu açılan liste yerel makinenizi, konak adına göre Bağlantı Yöneticisi'deki tüm SSH bağlantılarını ve Visual Studio'nun bulabileceği tüm Linux için Windows Alt Sistemi (WSL) yüklemelerini içerir:

Hedef Sistem açılan listesinin ekran görüntüsü

Açılan listede Yerel Makine, ip adresi 192.168.0.5, WSL: ubuntu2004, WSL: debian ve Bağlantıları Yönet gibi çeşitli girişler bulunur.

Yukarıdaki örnekte:

  • 192.168.0.5, Bağlantı Yöneticisi eklenen uzak bir Linux sistemidir.
  • ubuntu2004 ve debian , WSL yüklemeleridir.

Bağlantı Yöneticisi açmak için Bağlantıları Yönet'i seçin.

Önceden Ayarlanmış Yapılandır'ı seçin

Ortadaki açılan liste etkin Ön Ayarı Yapılandır'ı gösterir. configurePreset Proje derleme sistemini oluşturmak için CMake çağrıldığında kullanılan değerdir. Bu açılan liste, ve CMakeUserPresets.jsoniçinde CMakePresets.json tanımlanan gizli olmayan Yapılandırma Ön Ayarlarının birleşimini içerir.

Visual Studio, etkin Hedef Sistem için geçerli olmayan Ön Ayarları Yapılandır'ı gizlemek için Microsoft Visual Studio Ayarları satıcı haritasındaki değerini hostOS kullanır. Daha fazla bilgi içinhostOS, Visual Studio Ayarları satıcı haritası altındaki tabloda için girişe bakın.

Projenin kökünde bulunan dosyayı açmak CMakePresets.json için Yapılandırmaları Yönet'i seçin. CMakePresets.json henüz yoksa oluşturulur.

Derleme Ön Ayarı Seçme

Sağdaki açılan liste etkin Derleme Ön Ayarı'nı gösterir. Projeyi buildPreset oluşturmak için CMake çağrıldığında kullanılan değerdir. Bu açılan liste, ve CMakeUserPresets.jsoniçinde CMakePresets.json tanımlanan gizli olmayan Derleme Önayarlarının birleşimini içerir.

İlişkili configurePreset bir değer belirtmek için tüm Derleme Ön Ayarları gereklidir. Visual Studio, etkin Yapılandırma Ön Ayarı için geçerli olmayan Derleme Ön Ayarlarını gizler. Daha fazla bilgi için Derleme Ön Ayarları listesine bakın.

Etkin Yapılandırma Ön Ayarı ile ilişkilendirilmiş Derleme Ön Ayarları yoksa, Visual Studio varsayılan Derleme Ön Ayarı'nı listeler. Varsayılan Derleme Ön Ayarı, komut satırından başka bağımsız değişken olmadan geçiş cmake --build yapmaya eşdeğerdir.

Yapılandırma

Visual Studio, CMake önbelleğinin güncel olmadığını algıladığında projeyi otomatik olarak yapılandırmaya çalışır. Yapılandırmayı el ile çağırmak için ana menüden Proje>Yapılandırma <proje adını> seçin. Komut satırından çalıştırmakla cmake --preset <configurePreset> aynıdır; burada <configurePreset> etkin Yapılandırma Ön Ayarının adıdır.

Otomatik önbellek oluşturmayı devre dışı bırakmak için bkz . Otomatik yapılandırma ve önbellek bildirimleri.

Derleme

Projenin tamamını oluşturmak için ana menüden Tümünü Derle'yi> seçin. Komut satırından çalıştırmakla cmake --build --preset <buildPreset> aynıdır; burada <buildPreset> etkin Derleme Ön Ayarı'nın adıdır.

Tek bir hedef oluşturmak için Çözüm Gezgini'da CMake Hedefleri Görünümü'ne geçin. Ardından herhangi bir hedefe sağ tıklayın ve kısayol menüsünden Oluştur'a tıklayın.

Not

Visual Studio 2019, içinde CMakePresets.jsonbelirtilen hedeflerin buildPresets.targets bir alt kümesini oluşturma seçeneğini desteklemez.

CTest'i çalıştırma

CMakePresets.json Visual Studio 2019'da iki menü seçeneğini destekler:

  • Proje adı> için <Test>Çalıştırma CTest'leri CTest'i çağırır ve etkin Ön Ayarı Yapılandır ve Derleme Ön Ayarı ile ilişkili tüm testleri çalıştırır ve CTest'e başka bağımsız değişken geçirilmemiştir.
  • ConfigurePreset> için <Test>Çalıştırma Testi Ön Ayarı, etkin Yapılandırma Ön Ayarı ile ilişkili tüm Test Ön Ayarlarını gösterecek şekilde genişler. Tek bir Test Önayarını seçmek, komut satırından çalıştırmakla ctest --preset <testPreset> aynıdır ve burada <testPreset> seçili Test Ön Ayarı'nın adıdır. Etkin Ön Ayarı Yapılandır için test ön ayarları tanımlanmadıysa bu seçenek kullanılamaz.

Visual Studio 2019'da Test Gezgini ile CMakePresets.jsontümleşik değildir.

Yeni ön ayarlar ekleme

Visual Studio 2019'da tüm komutlar ve önceden ayarlanmış şablonlar öğesini değiştirir CMakePresets.json. doğrudan düzenleyerek CMakeUserPresets.jsonyeni kullanıcı düzeyinde ön ayarlar ekleyebilirsiniz.

ve CMakeUserPresets.jsoniçindeki CMakePresets.json yollar için eğik çizgi (/) kullanın.

Yeni Yapılandırma Ön Ayarları Ekleme

öğesine yeni bir Önayar Yapılandır eklemek içinCMakePresets.json, Çözüm Gezgini Klasör Görünümü'nden sağ tıklayın CMakePresets.json ve kısayol menüsünden Yapılandırma Ekle'yi seçin. Önceden Ayarlanmış Şablonu Yapılandır'ı seçme iletişim kutusu görüntülenir:

JSON dosyası için Yapılandırma Hazır Ayarı Ekle iletişim kutusunun ekran görüntüsü. Linux Hata Ayıklama, macOS Hata Ayıklama, x64 Hata Ayıklama vb. gibi girdiler içerir.

Windows sistemlerinde yapılandırmak için Windows x64 Hata Ayıklama şablonunu seçin. WSL ve uzak Linux sistemlerinde yapılandırmak için Linux Hata Ayıklama şablonunu seçin. düzenleme CMakePresets.jsonhakkında daha fazla bilgi için bkz . Ön ayarları düzenleme.

Seçili şablon varsa öğesine CMakePresets.json eklenir. Aksi takdirde, şablon yeni CMakePresets.json bir dosyaya kopyalanır.

Yeni Derleme Ön Ayarları ve Test Ön Ayarları ekleme

Visual Studio 2019, yeni Derleme Ön Ayarları ve Test Ön Ayarları için şablon sunmaz. Doğrudan düzenleyerek CMakePresets.jsonDerleme Ön Ayarları ve Test Ön Ayarları ekleyebilirsiniz. Daha fazla bilgi için Derleme Ön Ayarları listesine, Test Ön Ayarları listesine veya örnek CMakePresets.json bir dosyaya bakın.

Ön ayarları düzenleme

Resmi CMake belgeleri , Yapılandırma Ön Ayarları, Derleme Ön Ayarları ve Test Ön Ayarları'nı düzenlemek için en iyi kaynaktır. Aşağıdaki bilgiler, Özellikle Visual Studio geliştiricileri için uygun olan CMake belgelerinin bir alt kümesidir.

Derleyicilerinizi seçin

C ve C++ derleyicilerini, önceden ayarlanmış yapılandırmayı kullanarak ve cacheVariables.CMAKE_CXX_COMPILER kullanarak cacheVariables.CMAKE_C_COMPILER ayarlayabilirsiniz. Komut satırından CMake'ye ve -D CMAKE_CXX_COMPILER=<value> geçişiyle -D CMAKE_C_COMPILER=<value> eşdeğerdir. Daha fazla bilgi için bkz. CMAKE_<LANG>_COMPILER.

Visual Studio ile cl.exe ve clang-cl.exe Visual Studio'dan derlemek için aşağıdaki örnekleri kullanın. ile clang-clderlemeniz için Windows bileşenleri için C++ Clang araçları yüklenmelidir.

ile derleyin cl.exe:

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
  "CMAKE_C_COMPILER": "cl",
  "CMAKE_CXX_COMPILER": "cl"
},

ile derleyin clang:

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
  "CMAKE_C_COMPILER": "clang-cl",
  "CMAKE_CXX_COMPILER": "clang-cl"
},

"vendor": {
  "microsoft.com/VisualStudioSettings/CMake/1.0": {
    "intelliSenseMode": "windows-clang-x64"
  }
}

Oluşturucu olarak veya kullanıyorsanızVisual Studio 16 2019, araç takımını toolset belirtmek için Önceden Ayarlanmış Yapılandırma'yı ClangCL kullanabilirsiniz:Visual Studio 17 2022

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
},

"toolset": "ClangCL",

"vendor": {
  "microsoft.com/VisualStudioSettings/CMake/1.0": {
    "intelliSenseMode": "windows-clang-x64"
  }
}

Belirtimi destekleyen toolset oluşturucular hakkında daha fazla bilgi için CMake belgelerine bakın CMAKE_GENERATOR_TOOLSET .

Önemli

Visual Studio 2019'da veya ile clang clang-clderleme yaparken açıkça bir Clang IntelliSense modu belirtmeniz gerekir.

Bu derlemeleri Visual Studio dışında yeniden oluşturmak için bkz . Komut satırından veya CI işlem hattından CMake çalıştırma.

Linux üzerinde veya Visual C++ araç takımı olmadan derlemek için örneğinizdeki PATH bir derleyicinin adını veya derleyicinin tam yolunu değerlendiren bir ortam değişkenini belirtin. Dosyanın paylaşılabilir kalabilmesi için tam yollar önerilmez. GCC sürüm 8 ile oluşturulan bir ön ayar aşağıdaki gibi görünebilir:

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
  "CMAKE_C_COMPILER": "gcc-8",
  "CMAKE_CXX_COMPILER": "g++-8"
},

CMake araç zinciri dosyasıyla derleyicileri de ayarlayabilirsiniz. Araç zinciri dosyaları ile cacheVariables.CMAKE_TOOLCHAIN_FILEayarlanabilir. Bu, komut satırından CMake'ye geçirmeye -D CMAKE_TOOLCHAIN_FILE=<value> eşdeğerdir. CMake araç zinciri dosyası genellikle çapraz derleme için kullanılır. CMake araç zinciri dosyalarını yazma hakkında daha fazla bilgi için bkz . CMake araç zincirleri.

Oluşturucunuzu seçin

Windows ve Linux Configure Preset şablonlarının her ikisi de varsayılan oluşturucu olarak Ninja'yi belirtir. Diğer yaygın oluşturucular, Windows'ta Visual Studio Oluşturucuları ve Linux ve macOS'ta Unix Makefiles'tır. Ön Ayarı Yapılandır seçeneğiyle generator yeni bir oluşturucu belirtebilirsiniz. Komut satırından CMake'ye geçişle -G eşdeğerdir.

Visual Studio Oluşturucu ile derleme yaparken ve toolset.strategy set değerini ayarlayınarchitecture.strategy. Daha fazla bilgi için bkz . CMake oluşturucuları.

Yapılandırma türünüzü seçin

kullanarak cacheVariables.CMAKE_BUILD_TYPEtek yapılandırma oluşturucuları için yapılandırma türünü (Debug veya Release) ayarlayabilirsiniz. Komut satırından CMake'ye geçişle -D CMAKE_BUILD_TYPE=<value> eşdeğerdir. Daha fazla bilgi için bkz. CMAKE_BUILD_TYPE.

Visual C++ araç takımıyla derleme yaparken hedef ve konak mimarinizi seçin

kullanarak hedef mimariyi (x64, Win32, ARM64 veya ARM) ayarlayabilirsiniz architecture.value. Komut satırından CMake'ye geçişle -A eşdeğerdir. Daha fazla bilgi için bkz . Platform Seçimi.

Not

Şu anda Visual Studio Oluşturucuları, x86 için derleme yaparken Win32 söz dizimini ve komut satırı oluşturucularını (Ninja gibi) x86 söz dizimini bekler.

kullanarak toolset.valuekonak mimarisini (x64 veya x86) ve araç takımını ayarlayabilirsiniz. Komut satırından CMake'ye geçişle -T eşdeğerdir. Daha fazla bilgi için bkz . Araç Takımı Seçimi.

architecture.strategy ve toolset.strategy değerleri CMake'e mimari ve araç takımı alanlarının nasıl işleneceğini bildirir. set CMake'nin ilgili değeri external ayarlayıp CMake'nin ilgili değeri ayarlamayacağı anlamına gelir.

Visual Studio Oluşturucu gibi IDE oluşturucuları ile kullanmanızı set öneririz. Ninja gibi komut satırı oluşturucularla kullanın external . Bu değerler, Visual Studio gibi satıcıların CMake çağrılmadan önce gerekli ortamı sağlamasına olanak tanır. Mimari ve araç takımı alanları hakkında daha fazla bilgi için, Ön Ayarları Yapılandırma listesine bakın.

Bir ortamın kaynağını belirlemek istemiyorsanız ve unspecifiedarchitecture.value olarak ayarlayabilirsiniz architecture.strategy external. Aşağıdaki nedenlerden herhangi biri nedeniyle ortam kaynağı oluşturmamak yararlı olabilir:

  • MSVC dışında bir araç takımı kullanırsınız.
  • Ekli senaryolarda olduğu gibi özel bir araç zinciri kullanırsınız.
  • Derlemek için belirli bir ortama ihtiyacınız yoktur.

Mimari alanını destekleyen IDE oluşturucularının tam listesi için bkz CMAKE_GENERATOR_PLATFORM. . Araç takımı alanını destekleyen IDE oluşturucularının tam listesi için bkz CMAKE_GENERATOR_TOOLSET. .

Arm64'i Ninja oluşturucuyla hedeflemek veya Visual Studio 16 2019 oluşturucu ile Win32'yi (x86) hedeflemek için aşağıdaki örnekleri kullanın:

"generator": "Ninja",
"architecture": {
    "strategy": "external",
    "value": "arm64"
},

"generator": "Visual Studio 16 2019",
"architecture": {
    "strategy": "set",
     "value": "Win32"
},

Ortam değişkenlerini ayarlama ve bunlara başvurma

Ortam eşlemesini kullanarak ortam değişkenlerini ayarlayabilirsiniz. Ortam değişkenleri alan aracılığıyla devralınır inherits , ancak bunları istediğiniz gibi geçersiz kılabilirsiniz.

Ön ayarın ortamı, kendi ortamının ve tüm üst kuruluşlarının ortamın birleşimidir. Birden çok inherits ön ayar aynı değişken için çakışan değerler sağlıyorsa, listedeki önceki ön ayar inherits tercih edilir. Başka bir ön ayardan devralınan bir değişkeni olarak ayarlayarak nullayarını kaldırabilirsiniz.

Yapılandırma Ön Ayarı'nda ayarlanan ortam değişkenleri, olarak ayarlanmadığı sürece inheritConfigureEnvironment otomatik olarak ilişkili Derleme Ön Ayarları ve Test Ön Ayarları'na falsedoğru akar. Daha fazla bilgi için Ön Ayarları Yapılandırma listesine bakın.

ve $penv{<variable-name>} söz dizimini kullanarak ortam değişkenlerine $env{<variable-name>} başvurabilirsiniz. Daha fazla bilgi için bkz . Makro Genişletme.

Derleyiciler arası için IntelliSense'i yapılandırma

Varsayılan olarak, Visual Studio belirtilen araç takımınızla ve hedef mimarinizle eşleşen IntelliSense modunu kullanır. Çapraz derleme yapıyorsanız, Visual Studio Ayarları satıcı haritasındaki seçeneği kullanarak intelliSenseMode doğru IntelliSense modunu el ile belirtmeniz gerekebilir. Daha fazla bilgi içinintelliSenseMode, Visual Studio Ayarları satıcı haritası altındaki tabloda için girişe bakın.

Uzak bir sistemi veya Linux için Windows Alt Sistemi yapılandırma ve derleme

Visual Studio desteğiyle CMakePresets.json projenizi Windows, WSL ve uzak sistemlerde kolayca yapılandırabilir ve oluşturabilirsiniz. Projenizi Windows, uzak sistem veya WSL'de yapılandırma ve derleme adımları aynıdır. Ancak, birkaç davranış uzaktan geliştirmeye özgüdür.

${sourceDir} uzaktan kopyalama senaryolarında davranış

Yerel senaryolarda (WSL1 dahil), ${sourceDir} Visual Studio'da açık olan proje kaynak dizininin yolunu değerlendirir. Uzak kopyalama senaryolarında, ${sourceDir} yerel makinedeki proje kaynak dizinine değil Hedef Sistemdeki proje kaynak dizinine giden yolu değerlendirir.

Visual Studio Uzak Ayarlar satıcı eşlemesindeki değeri sourceDir , Hedef Sistemdeki proje kaynak dizinini belirler (varsayılan olarak $env{HOME}/.vs/$ms{projectDirName}olarak ). Daha fazla bilgi içinsourceDir, Visual Studio Ayarları satıcı haritası altındaki tabloda için girişe bakın.

Uzak çıkış için yerel klasör

Uzaktan kopyalama senaryoları, CMake Dosya API'si yanıt dosyaları veya Visual Studio Uzak Ayarlar satıcı eşlemesi olarak ayarlandıysa copyBuildOutput derleme dosyaları gibi bazı uzak dosyaları kopyalamak için trueyerel bir dizin gerektirir. Bu dosyalar otomatik olarak öğesine <local-source-directory>/out/<remote-connection-ID>/build/${presetName}kopyalanır.

Windows ve WSL1'de aynı Yapılandırma Ön Ayarını çağırma

Windows ve WSL1'de aynı Ön Ayarı Yapılandır özelliğini kullanmaya çalışırsanız bir hata görürsünüz. Hem Windows hem de WSL1, Windows dosya sistemini kullanır, bu nedenle CMake hem Windows hem de WSL1 derleme ağaçları için aynı çıkış dizinini (binaryDir) kullanmayı dener.

Aynı Ön Ayarı Hem Windows hem de WSL1 araç takımıyla kullanmak istiyorsanız, özgün ön ayardan devralan ve yeni binaryDir bir değer belirten ikinci bir Ön Ayar Yapılandır oluşturun. Aşağıdaki örnekte, windows-preset Windows'da base-preset ve WSL1'de kullanılabilir:

{
  "name": "windows-preset",
  "inherits": "base-preset",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": "Windows"
    }
  }
}

Not

Visual Studio 2019'da yalnızca WSL1 araç takımı desteklenir. Bu davranışı hem Windows hem de WSL'de her çağırdığınızda configure görürsünüz.

vcpkg tümleştirmesini etkinleştirme

Vcpkg, Windows, Linux ve macOS'ta C ve C++ kitaplıklarını yönetmenize yardımcı olur. Vcpkg tümleştirmesini etkinleştirmek için bir vcpkg araç zinciri dosyası (vcpkg.cmake) CMake'ye geçirilmelidir. Daha fazla bilgi için vcpkg belgelerine bakın.

Visual Studio artık tümleştirme etkinleştirildiğinde CMakePresets.json vcpkg araç zinciri dosyanızı otomatik olarak CMake'e geçiremeyecek. Bu değişiklik Visual Studio'ya özgü davranışı ortadan kaldırır ve derlemenizi komut satırından yeniden oluşturabilmenizi sağlar.

Bunun yerine, içindeki CMakePresets.jsonortam değişkenini VCPKG_ROOT kullanarak yolunu vcpkg.cmake olarak ayarlayın:

"cacheVariables": {
   "CMAKE_TOOLCHAIN_FILE": {
      "value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
       "type": "FILEPATH"
    }
 },

VCPKG_ROOT vcpkg yüklemenizin köküne ayarlanmalıdır. Daha fazla bilgi için bkz . vcpkg ortam değişkenleri.

Zaten bir CMake araç zinciri dosyası kullanıyorsanız ve vcpkg tümleştirmesini etkinleştirmek istiyorsanız bkz . Birden çok araç zinciri dosyası kullanma. Vcpkg kullanarak projeyle dış araç zinciri dosyası kullanmak için bu yönergeleri izleyin.

ve içinde launch.vs.json değişken değiştirme tasks.vs.json

CMakePresets.jsonve tasks.vs.jsoniçinde launch.vs.json değişken değiştirmeyi destekler. Dikkat edilmesi gereken bazı noktalar şunlardır:

  • Etkin Yapılandırma Ön Ayarı'nda ayarlanan ortam değişkenleri ve yapılandırmalarına otomatik olarak akar launch.vs.json tasks.vs.json . ve tasks.vs.json içindeki launch.vs.json tek tek ortam değişkenlerini olarak ayarlayarak kümeyi nullkaldırabilirsiniz. Aşağıdaki örnek, değişkenini DEBUG_LOGGING_LEVEL içinde launch.vs.jsonolarak null ayarlar: "env": { "DEBUG_LOGGING_LEVEL": null }.

  • Etkin Yapılandırma Ön Ayarı'nda ayarlanan anahtar değerleri ve launch.vs.json tasks.vs.json söz dizimi ${cmake.<KEY-NAME>}ile kullanılabilir. Örneğin, etkin Yapılandırma Ön Ayarının çıkış dizinine başvurmak için kullanın ${cmake.binaryDir} .

  • Etkin Yapılandırma Hazır Ayarının ortam haritasında ayarlanan tek tek ortam değişkenleri, ve tasks.vs.json söz dizimi ${env.<VARIABLE-NAME>}aracılığıyla kullanılabilirlaunch.vs.json.

ve task.vs.json dosyalarınızı launch.vs.json söz dizimi yerine CMakeSettings.json söz dizimine başvuracak CMakePresets.json şekilde güncelleştirin. Etkin yapılandırma dosyası olduğunda CMakePresets.json eski CMakeSettings.json söz dizimine başvuran makrolar, gelecek bir sürümde kullanım dışı bırakılmıştır. Örneğin, söz dizimini kullandığından, ile yerine etkin Ön Ayarı ${cmake.binaryDir} Yapılandır'ın CMakePresets.json ${cmake.buildRoot}çıkış dizinine binaryDir başvurun.

Sorun giderme

İşler beklendiği gibi çalışmıyorsa birkaç sorun giderme adımı deneyebilirsiniz.

CMakePresets.json Veya CMakeUserPresets.json geçersizse, Visual Studio varsayılan davranışına geri döner ve yalnızca varsayılan Ön Ayarları Yapılandır'ı gösterir. Visual Studio IntelliSense bu JSON hatalarının çoğunu yakalamanıza yardımcı olabilir, ancak ön ayara yanlış adla inheritsconfigurePreset başvurdığınızı anlamayacaktır.

Önceden ayarlanmış dosyalarınızın geçerli olup olmadığını denetlemek için proje dizininizin kökündeki komut satırından komutunu çalıştırın cmake --list-presets . (CMake 3.20 veya üzeri gereklidir.) Dosyalardan biri geçersizse aşağıdaki hatayı görürsünüz:

CMake Error: Could not read presets from
C:/Users/<user>/source/repos/<project-name>: JSON parse error

Diğer sorun giderme adımları şunlardır:

  • Önbelleği silin ve projeyi yeniden yapılandırın (CMake: Önbelleği Sil ve Proje>Proje Adını> Yapılandır).<
  • Visual Studio'da klasörü kapatın ve yeniden açın (Dosya>Klasörü Kapat).
  • .vs Projenizin kökündeki klasörü silin.

Bir sorun belirlediyseniz, bunu bildirmenin en iyi yolu Visual Studio'nun sağ üst köşesindeki Geri Bildirim Gönder düğmesini seçmektir.

Uzak bağlantılar için günlüğe kaydetmeyi etkinleştirme

Dosyaları uzak bir sisteme bağlarken veya kopyalarken sorun yaşıyorsanız uzak bağlantılar için günlüğe kaydetmeyi etkinleştirebilirsiniz. Daha fazla bilgi için bkz . Uzak bağlantılar için günlüğe kaydetme.

Windows ve Linux için AddressSanitizer'ı etkinleştirme

Visual Studio, hem Windows hem de Linux geliştirmesi için C ve C++ çalışma zamanı bellek hata algılayıcısı olan AddressSanitizer'ı (ASAN) destekler. içindeki addressSanitizerEnabled CMakeSettings.json seçeneği AddressSanitizer'ı etkinleştirir. CMakePresets.json bu davranışı desteklemez.

Bunun yerine, gerekli derleyici ve bağlayıcı bayraklarını kendiniz ayarlayarak AddressSanitizer'ı etkinleştirin ve devre dışı bırakın. Bunların ayarlanması Visual Studio'ya özgü davranışı kaldırır ve aynı CMakePresets.json dosyanın komut satırından derlemenizi yeniden oluşturabilmesini sağlar.

Hedef için AddressSanitizer'ı etkinleştirmek veya devre dışı bırakmak için aşağıdaki örneği CMakeLists.txt ekleyebilirsiniz:

option(ASAN_ENABLED "Build this target with AddressSanitizer" ON)

if(ASAN_ENABLED)
  if(MSVC)
    target_compile_options(<target> PUBLIC /fsanitize=address)
  else()
    target_compile_options(<target> PUBLIC -fsanitize=address <additional-options>)
    target_link_options(<target> PUBLIC -fsanitize=address)
  endif()
endif()

bölümünde <additional-options> gibi "-fno-omit-frame-pointer"diğer derleme bayrakları listelenir. Linux için AddressSanitizer hakkında daha fazla bilgi için bkz . AddressSanitizer kullanma. MSVC ile AddressSanitizer kullanma hakkında daha fazla bilgi için bkz . Geliştirici komut isteminden AddressSanitizer kullanma.

içindeki launch.vs.jsonalanını kullanarak AddressSanitizer'a çalışma zamanı bayrakları ASAN_OPTIONS geçirme. ASAN_OPTIONSdetect_leaks=0, LeakSanitizer Visual Studio'da desteklenmediğinden başka çalışma zamanı seçeneği belirtilmediğinde varsayılan olarak ayarlanır.

CMake'i komut satırından veya CI işlem hattından çalıştırma

Visual Studio'da ve komut satırından CMake'yi çağırmak için aynı CMakePresets.json ve CMakeUserPresets.json dosyalarını kullanabilirsiniz. CMake ve CTest belgeleri ile --presetCMake ve CTest çağırmak için en iyi kaynaklardır. CMake sürüm 3.20 veya üzeri gereklidir.

Windows'da komut satırı oluşturucularla derleme yaparken ortamın kaynağını belirleme

CMake komut satırı oluşturucu ile derlemede çağrılmadan önce ortamı yapılandırmak kullanıcıya aittir. Windows üzerinde Ninja ve Visual C++ araç takımıyla derleme yapıyorsanız, derleme sistemini oluşturmak için CMake çağrılmadan önce ortamı ayarlayın. Bunu bağımsız değişkeniyle architecture çağırarak vcvarsall.bat yapabilirsiniz. architecture bağımsız değişkeni, kullanılacak konak ve hedef mimariyi belirtir. Daha fazla bilgi için bkz vcvarsall . söz dizimi. Visual Studio Oluşturucu ile Linux veya Windows üzerinde derleme yapıyorsanız bu adımı uygulamanız gerekmez.

IDE CMake'yi çağırdığında Visual Studio'nun sizin için aldığı adımla aynıdır. Visual Studio, ve architecturetarafından toolset belirtilen konak ve hedef mimari için etkin Yapılandırma Hazır Ayarını ayrıştırıyor. Ardından Visual Studio belirtilen ortamı kaynağından vcvarsall.batalır. Ninja ile Windows komut satırından derleme yaparken bu adımı kendiniz uygulamanız gerekir.

vcvarsall.bat , Visual Studio için Derleme Araçları ile birlikte yüklenir. Varsayılan olarak, vcvarsall.bat içinde C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Buildyüklüdür. Komut satırı iş akışını sık kullanıyorsanız öğesine PATH ekleyebilirsinizvcvarsall.bat.

Örnek komut satırı iş akışı

X64 derleme araçlarıyla ARM64'i hedeflemek için Ninja kullanan bir CMake projesi yapılandırmak ve derlemek için aşağıdaki komutları kullanabilirsiniz. CMake sürüm 3.20 veya üzeri gereklidir. Dosyanızın CMakePresets.json bulunduğu dizinden şu komutları çalıştırın:

/path/to/vcvarsall.bat x64_arm64 
cmake --list-presets=all .
cmake --preset <configurePreset-name>
cmake --build --preset <buildPreset-name> 

Örnek CMakePresets.json dosya

CMakePresets.json box2d-lite dosyasındaKi dosyaDayarları Yapılandırma, Derleme Ön Ayarları ve Test Ön Ayarları örnekleri içerir. Bu örnek hakkında daha fazla bilgi için bkz. CMakePresets.json Giriş sunusu. DirectXTK projesinde, bölümünde birçok derleme hedefi configurePresets gösteren başka bir örnek görebilirsiniz.

Sonraki adımlar

Visual Studio'da CMake projelerini yapılandırma ve hata ayıklama hakkında daha fazla bilgi edinin: