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-Debug
Linux-Release
uygulanan ö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'aASAN_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ş için-DCMAKE_BINARY_DIR
eşler ve neredeCMakeCache.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 birgencache.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 birCMakeLists.txt
veyaCMakeSettings.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 mevcutCMakeCache.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_FILE
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'da dosyaya CMakeLists.txt
sağ tıklayın ve proje>için CMake Ayarları Gelişmiş Ayarları>Göster 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 dosyasının buildCommandArgs
CMakeSettings.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. ,Verbose
veyaDiagnostic
türlerindenNormal
biri 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. veyasftp
olabilirrsync
.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; buradaVARIABLE
sistem, kullanıcı veya oturum düzeyinde tanımlanmış bir ortam değişkenidir.remoteCopySources
: Visual Studio'nınboolean
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.remoteCopyBuildOutput
boolean
: 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.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ırmakCMakeLists.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 eklenmesiniCMakeCache.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. ,rsyncSingleDirectoryCommandArgs
veremoteCopySourcesMaxSmallChange
iç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çimindekinamespace.variable
bir yapılandırmadan başvurulabilecek şekilde adlandırın. Varsayılan ortam nesnesi çağrılırenv
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 birinheritEnvironments
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.json
belirttiğiniz ortamla otomatik olarak başlatılır. ve tasks.vs.json
iç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, BuildDir
hem 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.json
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ökCMakeLists.txt
dosyanın tam yolu${projectDir}
– kökCMakeLists.txt
dosyayı içeren klasörün tam yolu${projectDirName}
– kökCMakeLists.txt
dosyayı içeren klasörün adı${thisFile}
– dosyanın tam yoluCMakeSettings.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 |
İş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 ) |