CMakeSettings.json şema başvurusu

CMake projeleri Visual Studio 2017 ve sonraki sürümlerde desteklenir.

Dosya, Visual Studio'nın CMakeSettings.json IntelliSense için kullandığı ve belirtilen yapılandırma ve derleyici ortamı için CMake'e geçirdiği komut satırı bağımsız değişkenlerini oluşturmak için kullandığı bilgileri içerir. Yapılandırma, belirli bir platforma ve derleme türüne (örneğin) x86-DebugLinux-Releaseuygulanan özellikleri belirtir. Her yapılandırma, MSVC, GCC veya Clang gibi derleyici araç takımı hakkındaki bilgileri kapsülleyen bir ortam belirtir. CMake, proje için kök CMakeCache.txt dosyayı ve diğer proje dosyalarını yeniden oluşturmak için komut satırı bağımsız değişkenlerini kullanır. Dosyalardaki CMakeLists.txt değerler geçersiz kılınabilir.

IDE'ye yapılandırma ekleyebilir veya kaldırabilir ve sonra bunları doğrudan JSON dosyasında düzenleyebilir veya CMake Ayarlar düzenleyicisini (Visual Studio 2019 ve üzeri) kullanabilirsiniz. Çeşitli proje dosyalarını oluşturmak için IDE'de yapılandırmalar arasında kolayca geçiş yapabilirsiniz. Daha fazla bilgi için bkz . Visual Studio'da CMake derleme ayarlarını özelleştirme.

Yapılandırmalar

Dizi, configurations bir CMake projesi için tüm yapılandırmaları içerir. Önceden tanımlanmış yapılandırmalar hakkında daha fazla bilgi için bkz . CMake önceden tanımlanmış yapılandırma başvurusu. Dosyaya istediğiniz sayıda önceden tanımlanmış veya özel yapılandırma ekleyebilirsiniz.

A configuration şu özelliklere sahiptir:

  • addressSanitizerEnabled: isetrue, AddressSanitizer kullanarak programı derler. Linux'ta ve derleyici iyileştirme düzeyi -Os ile -fno-omit-frame-pointer derleyin veya -Oo en iyi sonuçları elde edin.

  • addressSanitizerRuntimeFlags: Ortam değişkeninde AddressSanitizer'a ASAN_OPTIONS geçirilen çalışma zamanı bayrakları. Biçim: flag1=value:flag2=value2.

  • buildCommandArgs: sonrasında CMake'e --build --geçirilen yerel derleme anahtarlarını belirtir. Örneğin, Ninja oluşturucuyu kullanırken geçirme -v , Ninja'yı komut satırlarını çıktıya zorlar. Ninja komutları hakkında daha fazla bilgi için bkz . Ninja komut satırı bağımsız değişkenleri.

  • buildRoot: CMake'in seçilen oluşturucu için derleme betikleri oluşturduğu dizini belirtir. geçiş yapmak için -DCMAKE_BINARY_DIR Haritalar ve nerede CMakeCache.txt oluşturulduğunu belirtir. Klasör yoksa oluşturulur. Desteklenen makrolar : ${workspaceRoot}, ${workspaceHash}, ${projectFile}, ${projectDir}, ${thisFile}, , ${thisFileDir}, ${name}, ${generator}. ${env.VARIABLE}

  • cacheGenerationCommand: Önbelleği oluşturmak için bir gencache.bat debug komut satırı aracı ve bağımsız değişkenleri belirtir. Komut, kullanıcı açıkça yeniden oluşturma istediğinde veya bir CMakeLists.txt veya CMakeSettings.json dosya değiştirildiğinde yapılandırma için belirtilen ortamdaki kabuktan çalıştırılır.

  • cacheRoot: CMake önbelleğinin yolunu belirtir. Bu dizin mevcut CMakeCache.txt bir dosya içermelidir.

  • clangTidyChecks: clang-tidy'a geçirilen uyarıların virgülle ayrılmış listesi; joker karakterlere izin verilir ve '-' ön eki denetimleri kaldırır.

  • cmakeCommandArgs: Proje dosyalarını oluşturmak için çağrıldığında CMake'e geçirecek ek komut satırı seçeneklerini belirtir.

  • cmakeToolchain: Araç zinciri dosyasını belirtir. kullanılarak -DCMAKE_TOOLCHAIN_FILECMake'e geçirilir.

  • codeAnalysisRuleset: Kod analizini çalıştırırken kullanılacak kural kümesini belirtir. Visual Studio tarafından yüklenen bir kural kümesi dosyasının tam yolunu veya dosya adını kullanabilirsiniz.

  • configurationType: Seçili oluşturucu için derleme türü yapılandırmasını belirtir. Şu durumlardan biri olabilir:

    • Debug
    • Release
    • MinSizeRel
    • RelWithDebInfo
  • ctestCommandArgs: Testleri çalıştırırken CTest'e geçirebilmek için ek komut satırı seçeneklerini belirtir.

  • description: Menülerde görüntülenen bu yapılandırmanın açıklaması.

  • enableClangTidyCodeAnalysis: Kod analizi için Clang-Tidy kullanın.

  • enableMicrosoftCodeAnalysis: Kod analizi için Microsoft kod çözümleme araçlarını kullanın.

  • generator: Bu yapılandırma için kullanılacak CMake oluşturucuyu belirtir. Şu durumlardan biri olabilir:

    Yalnızca Visual Studio 2019:

    • Visual Studio 16 2019
    • Visual Studio 16 2019 Win64
    • Visual Studio 16 2019 ARM

    Visual Studio 2017 ve üzeri:

    • Visual Studio 15 2017
    • Visual Studio 15 2017 Win64
    • Visual Studio 15 2017 ARM
    • Visual Studio 14 2015
    • Visual Studio 14 2015 Win64
    • Visual Studio 14 2015 ARM
    • Unix Makefiles
    • Ninja

Ninja esneklik ve işlev yerine yüksek derleme hızları için tasarlandığından varsayılan olarak ayarlanır. Ancak bazı CMake projeleri Ninja kullanarak doğru şekilde oluşturulamayabilir. Derleme hatası oluşursa, CMake'e bunun yerine Visual Studio projeleri oluşturmasını sağlayabilirsiniz.

Visual Studio 2017'de bir Visual Studio oluşturucu belirtmek için, CMake | öğesini seçerek ana menüden ayarlar düzenleyicisini açın CMake Ayarlar değiştirin. "Ninja" öğesini silin ve "V" girin. Bu değişiklik, istediğiniz oluşturucuyu seçmenize olanak tanıyan IntelliSense'i etkinleştirir.

Visual Studio 2019'da bir Visual Studio oluşturucu belirtmek için, Çözüm Gezgini'daki dosyaya CMakeLists.txt sağ tıklayın ve Gelişmiş Ayarlar CMake Oluşturucusunu Göster projesi>için CMake Ayarlar'ı> seçin.

Varsayılan olarak, etkin yapılandırma bir Visual Studio oluşturucuyu belirttiğinde, bağımsız değişkenlerle -m -v:minimal MSBuild'i çağırır. Derlemeyi özelleştirmek için dosyasının buildCommandArgsCMakeSettings.json içindeki özelliğini kullanın. Burada, derleme sistemine geçirmek için MSBuild komut satırı bağımsız değişkenlerini belirtebilirsiniz:

"buildCommandArgs": "-m:8 -v:minimal -p:PreferredToolArchitecture=x64"
  • installRoot: CMake'in seçilen oluşturucu için yükleme hedefleri oluşturduğu dizini belirtir. Desteklenen makrolar : ${workspaceRoot}, ${workspaceHash}, ${projectFile}, ${projectDir}, ${thisFile}, , ${thisFileDir}, ${name}, ${generator}. ${env.VARIABLE}

  • inheritEnvironments: Bu yapılandırmanın bağımlı olduğu bir veya daha fazla derleyici ortamı belirtir. Herhangi bir özel ortam veya önceden tanımlanmış ortamlardan biri olabilir. Daha fazla bilgi için bkz . Ortamlar.

  • intelliSenseMode: IntelliSense bilgilerini bilgi işlem için kullanılan modu belirtir". Değer aşağıdakilerden biri olabilir:

    • windows-msvc-x86
    • windows-msvc-x64
    • windows-msvc-arm
    • windows-msvc-arm64
    • android-clang-x86
    • android-clang-x64
    • android-clang-arm
    • android-clang-arm64
    • ios-clang-x86
    • ios-clang-x64
    • ios-clang-arm
    • ios-clang-arm64
    • windows-clang-x86
    • windows-clang-x64
    • windows-clang-arm
    • windows-clang-arm64
    • linux-gcc-x86
    • linux-gcc-x64
    • linux-gcc-arm
  • name: yapılandırmayı adlandırın. Önceden tanımlanmış yapılandırmalar hakkında daha fazla bilgi için bkz . CMake önceden tanımlanmış yapılandırma başvurusu.

  • wslPath: Linux için Windows Alt Sistemi örneğinin başlatıcısının yolu.

CMake Linux projeleri için Ayarlar

  • remoteMachineName: CMake, derlemeler ve hata ayıklayıcıyı barındıran uzak Linux makinesinin adını belirtir. Yeni Linux makineleri eklemek için Bağlantı Yöneticisi kullanın. Desteklenen makrolar şunlardır: ${defaultRemoteMachineName}.
  • remoteCopySourcesOutputVerbosity: Uzak makineye kaynak kopyalama işleminin ayrıntı düzeyini belirtir. , Verboseveya Diagnostictürlerinden Normalbiri olabilir.
  • remoteCopySourcesConcurrentCopies: Kaynakların uzak makineye eşitlenmesi sırasında kullanılacak eşzamanlı kopyaları belirtir (yalnızca sftp).
  • remoteCopySourcesMethod: Uzak makineye dosya kopyalama yöntemini belirtir. veya sftpolabilirrsync.
  • remoteCMakeListsRoot: CMake projesini içeren uzak makinedeki dizini belirtir. Desteklenen makrolar , , ${workspaceHash}, ${projectFile}, ${projectDir}, ${thisFile}, , ${thisFileDir}, ${generator}${name}ve ${env.VARIABLE}makrolarıdır${workspaceRoot}.
  • remoteBuildRoot: CMake'in seçilen oluşturucu için derleme betikleri oluşturduğu uzak makinedeki dizini belirtir. Desteklenen makrolar : ${workspaceRoot}, ${workspaceHash}, ${projectFile}, ${projectDir}, ${thisFile}, , ${thisFileDir}, ${name}, ${generator}. ${env.VARIABLE}
  • remoteInstallRoot: CMake'in seçilen oluşturucu için yükleme hedefleri oluşturduğu uzak makinedeki dizini belirtir. Desteklenen makrolar , ${workspaceRoot}, ${workspaceHash}${projectFile}, , ${projectDir}, ${thisFile}, , ${thisFileDir}, ${generator}${name}, ve ${env.VARIABLE}' dir; burada VARIABLE sistem, kullanıcı veya oturum düzeyinde tanımlanmış bir ortam değişkenidir.
  • remoteCopySources: Visual Studio'nın boolean kaynak dosyaları uzak makineye kopyalayıp kopyalamayacağını belirten bir. Varsayılan değer true'dur. Dosya eşitlemeyi kendiniz yönetiyorsanız false olarak ayarlayın.
  • remoteCopyBuildOutputboolean: Uzak sistemden derleme çıkışlarının kopyalanıp kopyalanmayacağını belirten bir.
  • remoteCopyAdditionalIncludeDirectories: IntelliSense'i desteklemek için uzak makineden kopyalanacak dizinleri ekleyin. "/path1;/path2..." olarak biçimlendirin.
  • remoteCopyExcludeDirectories: Uzak makineden kopyalanacak DEĞİl dizinleri ekleyin. "/path1;/path2..." olarak biçimlendirin.
  • remoteCopyUseCompilerDefaults: Derleyicinin varsayılan tanımlarının kullanılıp kullanılmayacağını ve IntelliSense için yolların eklenip eklenmeyeceğini belirtir. Yalnızca kullanılan derleyiciler gcc stili bağımsız değişkenleri desteklemezse false olmalıdır.
  • rsyncCommandArgs: rsync'e geçirilen bir dizi komut satırı seçeneğini belirtir.
  • remoteCopySourcesExclusionListarray: Kaynak dosyalar kopyalanırken dışlanacak yolların listesini belirten bir yol: yol, bir dosyanın/dizinin adı veya kopyanın kökünden göreli bir yol olabilir. Joker karakterler * ve ? glob desen eşleştirme için kullanılabilir.
  • cmakeExecutable: Dosya adı ve uzantısı dahil olmak üzere CMake programının yürütülebilir dosyasının tam yolunu belirtir.
  • remotePreGenerateCommand: Dosyayı ayrıştırmak CMakeLists.txt için CMake'yi çalıştırmadan önce çalıştırılacak komutu belirtir.
  • remotePrebuildCommand: Derlemeden önce uzak makinede çalıştırılacak komutu belirtir.
  • remotePostbuildCommand: Derledikten sonra uzak makinede çalıştırılacak komutu belirtir.
  • variables: CMake'ye olarak -D name=value geçirilen CMake değişkenlerinin ad-değer çiftini içerir. CMake proje derleme yönergeleriniz herhangi bir değişkenin doğrudan dosyaya eklenmesini CMakeCache.txt belirtiyorsa, bunları buraya eklemenizi öneririz. Bu örnek, 14.14.26428 MSVC araç takımını kullanmak için ad-değer çiftlerinin nasıl belirtileceğini gösterir:
"variables": [
    {
      "name": "CMAKE_CXX_COMPILER",
      "value": "C:/Program Files (x86)/Microsoft Visual Studio/157/Enterprise/VC/Tools/MSVC/14.14.26428/bin/HostX86/x86/cl.exe",
      "type": "FILEPATH"
    },
    {
      "name": "CMAKE_C_COMPILER",
      "value": "C:/Program Files (x86)/Microsoft Visual Studio/157/Enterprise/VC/Tools/MSVC/14.14.26428/bin/HostX86/x86/cl.exe",
      "type": "FILEPATH"
    }
  ]

öğesini tanımlamazsanız"type""STRING", türü varsayılan olarak kabul edilir.

  • remoteCopyOptimizations: Uzak hedefe kaynak kopyayı denetlemek için Visual Studio 2019 sürüm 16.5 veya üzeri özellikler. İyileştirmeler varsayılan olarak etkindir. , rsyncSingleDirectoryCommandArgsve remoteCopySourcesMaxSmallChangeiçerirremoteCopyUseOptimizations.

Ortamlar

Ortam, Visual Studio'un CMake'yi çağırmak için kullandığı işlemde ayarlanan ortam değişkenlerini kapsüller. MSVC projeleri için, belirli bir platform için geliştirici komut isteminde ayarlanan değişkenleri yakalar. Örneğin ortam, msvc_x64_x64 VS {version} için Geliştirici Komut İstemi'ni -arch=amd64 -host_arch=amd64 bağımsız değişkenleriyle çalıştırmakla aynıdır. söz dizimini env.{<variable_name>}CMakeSettings.json kullanarak tek tek ortam değişkenlerine başvurabilirsiniz. Örneğin, klasörlere yönelik yollar oluşturabilirsiniz. Önceden tanımlanmış aşağıdaki ortamlar sağlanır:

  • linux_arm: ARM Linux'ı uzaktan hedefle.
  • linux_x64: x64 Linux'ı uzaktan hedefle.
  • linux_x86: x86 Linux'ı uzaktan hedefle.
  • msvc_arm: MSVC derleyicisi ile ARM Windows'unu hedefle.
  • msvc_arm_x64: 64 bit MSVC derleyicisi ile ARM Windows'un hedefini belirleyin.
  • msvc_arm64: MSVC derleyicisi ile ARM64 Windows'ı hedefle.
  • msvc_arm64_x64: 64 bit MSVC derleyicisi ile ARM64 Windows'un hedefini belirleyin.
  • msvc_arm64ec: MSVC derleyicisi ile Windows ARM64EC hedefle.
  • msvc_arm64ec_x64: 64 bit MSVC derleyicisi ile Windows'ARM64EC hedefle.
  • msvc_x64: MSVC derleyicisi ile x64 Windows'ı hedefle.
  • msvc_x64_x64: 64 bit MSVC derleyicisi ile x64 Windows'un hedefini belirleyin.
  • msvc_x86: MSVC derleyicisi ile x86 Windows'ı hedefle.
  • msvc_x86_x64: 64 bit MSVC derleyicisi ile x86 Windows'un hedefini belirleyin.

Ortam değişkenlerine erişme CMakeLists.txt

Bir CMakeLists.txt dosyadan, tüm ortam değişkenlerine söz dizimi $ENV{variable_name}tarafından başvurulur. Bir ortamın kullanılabilir değişkenlerini görmek için ilgili komut istemini açın ve yazın SET. Ortam değişkenlerindeki bilgilerin bazıları CMake sistem introspection değişkenleri aracılığıyla da kullanılabilir, ancak ortam değişkenini kullanmayı daha uygun bulabilirsiniz. Örneğin, ortam değişkenleri aracılığıyla MSVC derleyici sürümünü veya Windows SDK sürümünü kolayca alabilirsiniz.

Özel ortam değişkenleri

içinde CMakeSettings.json, dizide environments genel olarak veya yapılandırma başına özel ortam değişkenleri tanımlayabilirsiniz. Özel ortam, bir özellik kümesini gruplandırmak için kullanışlı bir yoldur. Önceden tanımlanmış bir ortamın yerine kullanabilir veya önceden tanımlanmış bir ortamı genişletmek veya değiştirmek için kullanabilirsiniz. Dizideki environments her öğe şunlardan oluşur:

  • namespace: Ortamı, değişkenlerine biçimindeki namespace.variablebir yapılandırmadan başvurulabilecek şekilde adlandırın. Varsayılan ortam nesnesi çağrılır env ve dahil olmak üzere %USERPROFILE%belirli sistem ortamı değişkenleriyle doldurulur.
  • environment: Bu değişken grubunu benzersiz olarak tanımlar. Grubun daha sonra bir inheritEnvironments girdide devralınmasını sağlar.
  • groupPriority: Bu değişkenleri değerlendirirken önceliğini belirten bir tamsayı. Önce daha yüksek sayıda öğe değerlendirilir.
  • inheritEnvironments: Bu grup tarafından devralınan ortam kümesini belirten bir değer dizisi. Bu özellik, varsayılan ortamları devralmanıza ve çalıştığında CMake'e geçirmek için özel ortam değişkenleri oluşturmanıza olanak tanır.

Visual Studio 2019 sürüm 16.4 ve üzeri: Hata ayıklama hedefleri içinde CMakeSettings.jsonbelirttiğiniz ortamla otomatik olarak başlatılır. ve tasks.vs.jsoniçinde hedef veya görev başına temelinde launch.vs.json ortam değişkenlerini geçersiz kılabilir veya ekleyebilirsiniz.

Aşağıdaki örnek, BuildDirhem x86-Debug hem de x64-Debug yapılandırmalarında devralınan tek bir genel değişkeni tanımlar. Her yapılandırma, bu yapılandırmanın özelliğinin buildRoot değerini belirtmek için değişkenini kullanır. Ayrıca, her yapılandırmanın inheritEnvironments yalnızca bu yapılandırma için geçerli olan bir değişken belirtmek için özelliğini nasıl kullandığını da unutmayın.

{
  // The "environments" property is an array of key-value pairs of the form
  // { "EnvVar1": "Value1", "EnvVar2": "Value2" }
  "environments": [
    {
      "BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build",
    }
  ],

  "configurations": [
    {
      "name": "x86-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      // Inherit the defaults for using the MSVC x86 compiler.
      "inheritEnvironments": [ "msvc_x86" ],
      "buildRoot": "${env.BuildDir}\\${name}"    },
    {
      "name": "x64-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      // Inherit the defaults for using the MSVC x64 compiler.
      "inheritEnvironments": [ "msvc_x64" ],
      "buildRoot": "${env.BuildDir}\\${name}"
    }
  ]
}

Sonraki örnekte, x86-Debug yapılandırması BuildDir özelliği için kendi değerini tanımlar. Bu değer global BuildDir özelliği tarafından ayarlanan değeri geçersiz kılarak BuildRoot değerinin olarak değerlendirilmesini sağlarD:\custom-builddir\x86-Debug.

{
  "environments": [
    {
      "BuildDir": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}",
    }
  ],

  "configurations": [
    {
      "name": "x86-Debug",

      // The syntax for this property is the same as the global one above.
      "environments": [
        {
          // Replace the global property entirely.
          "BuildDir": "D:\\custom-builddir"
          // This environment does not specify a namespace, hence by default "env" is assumed.
          // "namespace" : "name" would require that this variable be referenced with "${name.BuildDir}".
        }
      ],

      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x86" ],
      // Evaluates to "D:\custom-builddir\x86-Debug"
      "buildRoot": "${env.BuildDir}\\${name}"
    },
    {
      "name": "x64-Debug",

      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x64" ],
      // Since this configuration doesn't modify BuildDir, it inherits
      // from the one defined globally.
      "buildRoot": "${env.BuildDir}\\${name}"
    }
  ]
}

Makrolar

aşağıdaki makrolar içinde CMakeSettings.jsonkullanılabilir:

  • ${workspaceRoot} – çalışma alanı klasörünün tam yolu
  • ${workspaceHash} – çalışma alanı konumunun karması; geçerli çalışma alanı için benzersiz bir tanımlayıcı oluşturmak için kullanışlıdır (örneğin, klasör yollarında kullanmak için)
  • ${projectFile} – kök CMakeLists.txt dosyanın tam yolu
  • ${projectDir} – kök CMakeLists.txt dosyayı içeren klasörün tam yolu
  • ${projectDirName} – kök CMakeLists.txt dosyayı içeren klasörün adı
  • ${thisFile}– dosyanın tam yolu CMakeSettings.json
  • ${name} – yapılandırmanın adı
  • ${generator} – bu yapılandırmada kullanılan CMake oluşturucusunun adı

içindeki CMakeSettings.json makrolara ve ortam değişkenlerine yapılan tüm başvurular, CMake komut satırına geçirilmeden önce genişletilir.

Ninja komut satırı bağımsız değişkenleri

Hedefler belirtilmezse, Ninja 'varsayılan' hedefi oluşturur.

C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise>ninja -?
ninja: invalid option -- `-?'
usage: ninja [options] [targets...]
Seçenek Tanım
--version Ninja sürümünü yazdır ("1.7.1")
-C DIR Başka bir şey yapmadan önce DIR olarak değiştirin
-f FILE Giriş derleme dosyasını belirtme (default=build.ninja)
-j N İşleri paralel olarak çalıştırma N (varsayılan=14, kullanılabilir CPU'lardan türetilmiş)
-k N İşler başarısız olana kadar N devam edin (default=1)
-l N Yük ortalaması şundan büyükse yeni işleri başlatma N
-n Kuru çalıştırma (komutları çalıştırma ama başarılı gibi davran)
-v Derleme sırasında tüm komut satırlarını göster
-d MODE Hata ayıklamayı etkinleştirme (mod listelemek için kullanın -d list )
-t TOOL Bir alt araç çalıştırın (alt araçları listelemek için kullanın -t list ). Tüm üst düzey seçenekleri sonlandırır; ek bayraklar ara çubuğuna geçirilir
-w FLAG Uyarıları ayarlama (uyarıları listelemek için kullanın -w list )