Aracılığıyla paylaş


CMakeSettings.json şema referansı

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 ilettiği komut satırı argümanlarının oluşturulması 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, komut satırı bağımsız değişkenlerini kullanarak proje için kök CMakeCache.txt dosyasını ve diğer proje dosyalarını yeniden oluşturur. 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 CMake önceden tanımlanmış yapılandırma referans kılavuzu bölümüne bakın. Dosyaya istediğiniz sayıda önceden tanımlanmış veya özel yapılandırma ekleyebilirsiniz.

A configuration şu özelliklere sahiptir:

  • addressSanitizerEnabled: ise true, programı AddressSanitizer kullanarak derler. Linux'ta, -fno-omit-frame-pointer ile derleyin ve en iyi sonuçlar için derleyici iyileştirme düzeyini -Os veya -Oo olarak belirleyin.

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

  • buildCommandArgs: CMake'e --build -- sonrasında iletilen yerel derleme anahtarlarını belirtir. Örneğin, -v geçirildiğinde Ninja oluşturucuyu kullanırken, Ninja'yı komut satırlarını çıktı almaya 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. -DCMAKE_BINARY_DIR anahtarına eşler ve CMakeCache.txt nerede oluşturulacağını belirtir. Klasör yoksa oluşturulur. Desteklenen makrolar : ${workspaceRoot}, ${workspaceHash}, ${projectFile}, ${projectDir}, ${thisFile}, , ${thisFileDir}, ${name}, ${generator}. ${env.VARIABLE}

  • cacheGenerationCommand: Bir komut satırı aracı ve bağımsız değişkenleri belirtir; örneğin, önbelleği oluşturmak için gencache.bat debug kullanılır. 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 ortamda kabuktan gerçekleştirilir.

  • 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. İçinde -DCMAKE_TOOLCHAIN_FILE kullanılarak CMake'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ı'nı 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'nde dosyasına sağ tıklayın ve proje için CMake Ayarları'nı seçin, ardından Gelişmiş Ayarları Göster ve CMake Oluşturucu'yu 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 CMakeSettings.json dosyasının içindeki buildCommandArgs özelliğini kullanın. Burada, derleme sistemine geçirmek üzere 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 CMake önceden tanımlanmış yapılandırma referans kılavuzu bölümüne bakın.

  • 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. , Normalveya Verbosetürlerinden Diagnosticbiri 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 rsyncolabilirsftp.
  • remoteCMakeListsRoot: CMake projesini içeren uzak makinedeki dizini belirtir. Desteklenen makrolar , , ${workspaceRoot}, ${workspaceHash}, ${projectFile}, ${projectDir}, , ${thisFile}, ${thisFileDir}${name}ve ${generator}makrolarıdır${env.VARIABLE}.
  • 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}, ${name}${generator}, 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, kaynak dosyaları uzak makineye kopyalayıp kopyalamayacağını belirten bir boolean. Varsayılan değer true'dur. Dosya eşitlemeyi kendiniz yönetiyorsanız false olarak ayarlayın.
  • remoteCopyBuildOutput: Uzak sistemden derleme çıkışlarını kopyalayıp kopyalamayacağını belirten bir boolean.
  • 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. Kullanılan derleyiciler gcc tarzı bağımsız değişkenleri desteklemezse yalnızca false olmalıdır.
  • rsyncCommandArgs: rsync'e geçirilen bir dizi komut satırı seçeneğini belirtir.
  • remoteCopySourcesExclusionList array: 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: Derlemeden sonra uzak makinede çalıştırılacak komutu belirtir.
  • variables: CMake'e -D name=value olarak geçirilen CMake değişkenlerinin ad-değer çiftini içerir. CMake projenizin derleme yönergeleri, herhangi bir değişkenin doğrudan CMakeCache.txt dosyasına eklenmesini belirtmiyorsa, bunları buraya eklemenizi öneririz. Bu örnek, 14.14.26428 MSVC Derleme Araçları'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. , remoteCopyUseOptimizationsve rsyncSingleDirectoryCommandArgsiçerirremoteCopySourcesMaxSmallChange.

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, msvc_x64_x64 ortamı, VS {version} için Geliştirici Komut İstemini -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 ARM64EC Windows'u hedefleyin.
  • msvc_arm64ec_x64: 64-bit MSVC derleyicisi ile ARM64EC Windows'u 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

CMakeSettings.json içinde, environments dizisinde küresel 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 namespace.variable biçiminde bir yapılandırmadan başvurulabilecek şekilde adlandırın. Varsayılan ortam nesnesi env olarak adlandırılır ve %USERPROFILE% dahil belirli sistem ortamı değişkenleriyle doldurulur.
  • environment: Bu değişken grubunu benzersiz olarak tanımlar. Grubun ilerde bir inheritEnvironments girdisinde devralınmasına olanak tanır.
  • 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. Her hedef veya görev başına, launch.vs.json ve tasks.vs.json içinde 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, BuildRoot'u D:\custom-builddir\x86-Debug olarak değerlendirmek için global BuildDir özelliği ile belirlenen değeri geçersiz kılar.

{
  "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 CMakeSettings.json içinde kullanı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 Açıklama
--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 N Görevler başarısız olana kadar devam edin (varsayılan=1)
-l N Yük ortalaması belirtilen değerden büyükse yeni iş başlatmayın 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 )