CMakeSettings.json
Referenční dokumentace schématu
Projekty CMake se podporují v sadě Visual Studio 2017 a novějších verzích.
Soubor CMakeSettings.json
obsahuje informace, které Sada Visual Studio používá pro IntelliSense, a k vytvoření argumentů příkazového řádku, které předává CMake pro zadané prostředí konfigurace a kompilátoru. Konfigurace určuje vlastnosti, které se vztahují na konkrétní platformu a typ sestavení, x86-Debug
například nebo Linux-Release
. Každá konfigurace určuje prostředí, které zapouzdřuje informace o sadě nástrojů kompilátoru, například MSVC, GCC nebo Clang. CMake používá argumenty příkazového řádku k opětovnému vygenerování kořenového CMakeCache.txt
souboru a dalších souborů projektu pro projekt. Hodnoty lze v souborech CMakeLists.txt
přepsat.
V integrovaném vývojovém prostředí můžete přidat nebo odebrat konfigurace a pak je upravit přímo v souboru JSON nebo použít editor nastavení CMake (Visual Studio 2019 a novější). Mezi konfiguracemi v integrovaném vývojovém prostředí (IDE) můžete snadno přepínat a vygenerovat různé soubory projektu. Další informace najdete v tématu Přizpůsobení nastavení sestavení CMake v sadě Visual Studio.
Konfigurace
Pole configurations
obsahuje všechny konfigurace projektu CMake. Další informace o předdefinovaných konfiguracích najdete v referenčních informacích k předdefinovaným konfiguracím CMake. Do souboru můžete přidat libovolný počet předem definovaných nebo vlastních konfigurací.
A configuration
má tyto vlastnosti:
addressSanitizerEnabled
: Pokudtrue
, kompiluje program pomocí AddressSanitizer. V Linuxu zkompilujte úroveň-Os
optimalizace kompilátoru-fno-omit-frame-pointer
nebo-Oo
pro zajištění nejlepších výsledků.addressSanitizerRuntimeFlags
: Příznaky modulu runtime předané AddressSanitizer vASAN_OPTIONS
proměnné prostředí. Formát: flag1=value:flag2=value2.buildCommandArgs
: Určuje nativní přepínače sestavení předané CMake po--build --
. Předání například-v
při použití generátoru Ninja vynutí Ninja výstup příkazové řádky. Další informace o příkazech Ninja naleznete v části Argumenty příkazového řádku Ninja.buildRoot
: Určuje adresář, ve kterém CMake generuje skripty sestavení pro zvolený generátor. Mapuje pro-DCMAKE_BINARY_DIR
přepnutí a určuje, kdeCMakeCache.txt
se vytvoří. Pokud složka neexistuje, vytvoří se. Mezi podporovaná makra patří , , ,${thisFile}
${name}
${projectDir}
${projectFile}
${thisFileDir}
,${generator}
, .${env.VARIABLE}
${workspaceHash}
${workspaceRoot}
cacheGenerationCommand
: Určuje nástroj příkazového řádku a argumenty, napříkladgencache.bat debug
pro vygenerování mezipaměti. Příkaz se spustí z prostředí v zadaném prostředí pro konfiguraci, když uživatel explicitně požádá o regeneraci neboCMakeLists.txt
se upraví souborCMakeSettings.json
.cacheRoot
: Určuje cestu k mezipaměti CMake. Tento adresář by měl obsahovat existujícíCMakeCache.txt
soubor.clangTidyChecks
: čárkami oddělený seznam upozornění, která se předají clang-tidy; Zástupné kóty jsou povolené a předpona -odebere kontroly.cmakeCommandArgs
: Určuje všechny další možnosti příkazového řádku, které se mají předat CMake při vyvolání pro vygenerování souborů projektu.cmakeToolchain
: Určuje soubor sady nástrojů. Předá se CMake pomocí-DCMAKE_TOOLCHAIN_FILE
.codeAnalysisRuleset
: Určuje sadu pravidel, která se má použít při spouštění analýzy kódu. Můžete použít úplnou cestu nebo název souboru sady pravidel nainstalovaný v sadě Visual Studio.configurationType
: Určuje konfiguraci typu sestavení pro vybraný generátor. Může to být jedna z těchto možností:Debug
Release
MinSizeRel
RelWithDebInfo
ctestCommandArgs
: Určuje všechny další možnosti příkazového řádku, které se mají předat CTest při spuštění testů.description
: Popis této konfigurace, která se zobrazí v nabídkách.enableClangTidyCodeAnalysis
: Pro analýzu kódu použijte Clang-Tidy.enableMicrosoftCodeAnalysis
: Použijte nástroje microsoftu pro analýzu kódu pro analýzu kódu.generator
: Určuje generátor CMake, který se má použít pro tuto konfiguraci. Může to být jedna z těchto možností:Jenom Visual Studio 2019:
Visual Studio 16 2019
Visual Studio 16 2019 Win64
Visual Studio 16 2019 ARM
Visual Studio 2017 a novější:
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
Protože Ninja je navržen pro rychlé rychlosti sestavení místo flexibility a funkce, je nastavena jako výchozí. Některé projekty CMake ale nemusí být schopny správně sestavovat pomocí Ninja. Pokud dojde k selhání sestavení, můžete dát CMake pokyn, aby místo toho vygeneroval projekty sady Visual Studio.
Pokud chcete zadat generátor sady Visual Studio v sadě Visual Studio 2017, otevřete editor nastavení z hlavní nabídky výběrem CMake | Změňte nastavení CMake. Odstraňte "Ninja" a zadejte "V". Tato změna aktivuje Technologii IntelliSense, která umožňuje zvolit požadovaný generátor.
Pokud chcete v sadě Visual Studio 2019 zadat generátor sady Visual Studio, klikněte pravým tlačítkem myši na CMakeLists.txt
soubor v Průzkumník řešení a zvolte Nastavení CMake pro projekt>Zobrazit generátor CMake Advanced Settings.>
Ve výchozím nastavení, když aktivní konfigurace určuje generátor sady Visual Studio, vyvolá NÁSTROJ MSBuild s -m -v:minimal
argumenty. K přizpůsobení sestavení použijte buildCommandArgs
vlastnost uvnitř CMakeSettings.json
souboru. Tady můžete zadat argumenty příkazového řádku MSBuild, které se předávají do systému sestavení:
"buildCommandArgs": "-m:8 -v:minimal -p:PreferredToolArchitecture=x64"
installRoot
: Určuje adresář, ve kterém CMake generuje cíle instalace pro zvolený generátor. Mezi podporovaná makra patří , , ,${thisFile}
${name}
${projectDir}
${projectFile}
${thisFileDir}
,${generator}
, .${env.VARIABLE}
${workspaceHash}
${workspaceRoot}
inheritEnvironments
: Určuje jedno nebo více prostředí kompilátoru, na které tato konfigurace závisí. Může to být jakékoli vlastní prostředí nebo jedno z předdefinovaných prostředí. Další informace naleznete v tématu Prostředí.intelliSenseMode
: Určuje režim používaný pro výpočetní informace technologie IntelliSense. Hodnota může být jedna z těchto hodnot: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
: pojmenuje konfiguraci. Další informace o předdefinovaných konfiguracích najdete v referenčních informacích k předdefinovaným konfiguracím CMake.wslPath
: cesta ke spouštěči instance Subsystém Windows pro Linux.
Nastavení pro projekty CMake Linux
remoteMachineName
: Určuje název vzdáleného počítače s Linuxem, který hostuje CMake, sestavení a ladicí program. K přidání nových počítačů s Linuxem použijte Správce připojení. Mezi podporovaná makra patří${defaultRemoteMachineName}
.remoteCopySourcesOutputVerbosity
: Určuje úroveň podrobností operace kopírování zdroje do vzdáleného počítače. Může být jedním zNormal
,Verbose
neboDiagnostic
.remoteCopySourcesConcurrentCopies
: Určuje souběžné kopie, které se mají použít při synchronizaci zdrojů do vzdáleného počítače (pouze sftp).remoteCopySourcesMethod
: Určuje metodu kopírování souborů do vzdáleného počítače. Může býtrsync
nebosftp
.remoteCMakeListsRoot
: Určuje adresář na vzdáleném počítači, který obsahuje projekt CMake. Mezi podporovaná makra patří , , ,${thisFile}
${thisFileDir}
${projectDir}
${generator}
${name}
${projectFile}
, a .${env.VARIABLE}
${workspaceHash}
${workspaceRoot}
remoteBuildRoot
: Určuje adresář na vzdáleném počítači, ve kterém CMake generuje skripty sestavení pro zvolený generátor. Mezi podporovaná makra patří , , ,${thisFile}
${name}
${projectDir}
${projectFile}
${thisFileDir}
,${generator}
, .${env.VARIABLE}
${workspaceHash}
${workspaceRoot}
remoteInstallRoot
: Určuje adresář na vzdáleném počítači, ve kterém CMake generuje cíle instalace pro zvolený generátor. Podporovaná makra zahrnují${workspaceRoot}
,${workspaceHash}
, , ,${thisFile}
${name}
${projectFile}
${thisFileDir}
${generator}
${projectDir}
a${env.VARIABLE}
, kdeVARIABLE
je proměnná prostředí definovaná na úrovni systému, uživatele nebo relace.remoteCopySources
: Určujeboolean
, zda má visual Studio kopírovat zdrojové soubory do vzdáleného počítače. Výchozí hodnota je true. Pokud spravujete synchronizaci souborů sami, nastavte na hodnotu false.remoteCopyBuildOutput
: Určujeboolean
, zda se mají kopírovat výstupy sestavení ze vzdáleného systému.remoteCopyAdditionalIncludeDirectories
: Další adresáře, které se mají zkopírovat ze vzdáleného počítače pro podporu Technologie IntelliSense. Formátovat jako /path1;/path2...".remoteCopyExcludeDirectories
: Zahrňte adresáře, které se nemají kopírovat ze vzdáleného počítače. Formátovat jako /path1;/path2...".remoteCopyUseCompilerDefaults
: Určuje, jestli se má výchozí definice kompilátoru definovat a zahrnout cesty pro IntelliSense. Měla by být false pouze v případě, že kompilátory, které se používají k tomu, aby nepodněly argumenty ve stylu gcc.rsyncCommandArgs
: Určuje sadu možností příkazového řádku předaných rsync.remoteCopySourcesExclusionList
: Určujearray
seznam cest, které mají být vyloučeny při kopírování zdrojových souborů: cesta může být název souboru nebo adresáře nebo relativní cesta z kořenového adresáře kopie. Zástupné cardy*
a?
lze je použít pro porovnávání vzorů globů.cmakeExecutable
: Určuje úplnou cestu ke spustitelnému souboru CMake, včetně názvu a přípony souboru.remotePreGenerateCommand
: Určuje příkaz, který se má spustit před spuštěním CMake pro parsováníCMakeLists.txt
souboru.remotePrebuildCommand
: Určuje příkaz, který se má spustit na vzdáleném počítači před sestavením.remotePostbuildCommand
: Určuje příkaz, který se má spustit na vzdáleném počítači po sestavení.variables
: Obsahuje dvojici name-value proměnných CMake, které se předávají jako-D name=value
CMake. Pokud pokyny k sestavení projektu CMake určují přidání všech proměnných přímo doCMakeCache.txt
souboru, doporučujeme je sem přidat. Tento příklad ukazuje, jak určit páry název-hodnota pro použití sady nástrojů 14.14.26428 MSVC:
"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"
}
]
Pokud ho nedefinujete "type"
, předpokládá se "STRING"
ve výchozím nastavení typ.
remoteCopyOptimizations
: Visual Studio 2019 verze 16.5 nebo novější vlastnosti pro řízení kopírování zdroje do vzdáleného cíle. Optimalizace jsou ve výchozím nastavení povolené. ZahrnujeremoteCopyUseOptimizations
,rsyncSingleDirectoryCommandArgs
aremoteCopySourcesMaxSmallChange
.
Prostředí
Prostředí zapouzdřuje proměnné prostředí nastavené v procesu, který Visual Studio používá k vyvolání CMake. V případě projektů MSVC zachycuje proměnné nastavené v příkazovém řádku pro vývojáře pro konkrétní platformu. Prostředí je například stejné jako msvc_x64_x64
spuštění příkazového řádku pro vývojáře pro VS {version} s argumenty -arch=amd64 -host_arch=amd64 . Syntaxi CMakeSettings.json
můžete použít env.{<variable_name>}
k odkazování na jednotlivé proměnné prostředí, například k vytvoření cest ke složkám. K dispozici jsou následující předdefinovaná prostředí:
linux_arm
: Vzdáleně zaměřte LINUX na ARM.linux_x64
: Vzdáleně cílí na platformu x64 Linux.linux_x86
: Vzdáleně cílí na platformu x86 Linux.msvc_arm
: Cílová okna ARM s kompilátorem MSVC.msvc_arm_x64
: Cílová okna ARM s 64bitovým kompilátorem MSVC.msvc_arm64
: Cílový systém Windows ARM64 s kompilátorem MSVC.msvc_arm64_x64
: Cílový systém Windows ARM64 s 64bitovým kompilátorem MSVC.msvc_arm64ec
: Cílová ARM64EC Windows s kompilátorem MSVC.msvc_arm64ec_x64
: Cílová ARM64EC Windows s 64bitovým kompilátorem MSVC.msvc_x64
: Cíl x64 Windows pomocí kompilátoru MSVC.msvc_x64_x64
: Cílení na systém Windows x64 pomocí 64bitového kompilátoru MSVC.msvc_x86
: Cíl x86 Windows pomocí kompilátoru MSVC.msvc_x86_x64
: Cíl x86 Windows s 64bitovým kompilátorem MSVC.
Přístup k proměnným prostředí z CMakeLists.txt
CMakeLists.txt
Ze souboru jsou všechny proměnné prostředí odkazovány syntaxí $ENV{variable_name}
. Pokud chcete zobrazit dostupné proměnné pro prostředí, otevřete odpovídající příkazový řádek a zadejte SET
. Některé informace v proměnných prostředí jsou k dispozici také prostřednictvím systémových introspekcí CMake, ale možná je vhodnější použít proměnnou prostředí. Můžete například snadno načíst verzi kompilátoru MSVC nebo verzi sady Windows SDK prostřednictvím proměnných prostředí.
Vlastní proměnné prostředí
V CMakeSettings.json
poli můžete definovat vlastní proměnné prostředí globálně nebo podle konfigurace v environments
poli. Vlastní prostředí je pohodlný způsob, jak seskupit sadu vlastností. Můžete ho použít místo předdefinovaného prostředí nebo rozšířit nebo upravit předdefinované prostředí. Každá položka v environments
poli se skládá z:
namespace
: Pojmenuje prostředí tak, aby na jeho proměnné bylo možné odkazovat z konfigurace ve formulářinamespace.variable
. Výchozí objekt prostředí je volánaenv
a je naplněna určitými systémovými proměnnými prostředí, včetně%USERPROFILE%
.environment
: Jednoznačně identifikuje tuto skupinu proměnných. Umožňuje, aby se skupina zdědila později vinheritEnvironments
položce.groupPriority
: Celé číslo, které určuje prioritu těchto proměnných při vyhodnocování. Položky s vyšším číslem se vyhodnocují jako první.inheritEnvironments
: Pole hodnot, které určují sadu prostředí, která jsou zděděna touto skupinou. Tato funkce umožňuje dědit výchozí prostředí a vytvářet vlastní proměnné prostředí, které se při spuštění předávají CMake.
Visual Studio 2019 verze 16.4 a novější: Cíle ladění se automaticky spustí s prostředím, ve CMakeSettings.json
kterém jste zadali . Proměnné prostředí můžete přepsat nebo přidat v rámci cíle nebo úkolu na launch.vs.json
základě a tasks.vs.json
.
Následující příklad definuje jednu globální proměnnou, BuildDir
která je zděděna v konfiguraci x86-Debug i x64-Debug. Každá konfigurace používá proměnnou k určení hodnoty vlastnosti pro danou buildRoot
konfiguraci. Všimněte si také, jak každá konfigurace používá inheritEnvironments
vlastnost k určení proměnné, která se vztahuje pouze na tuto konfiguraci.
{
// 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}"
}
]
}
V dalším příkladu definuje konfigurace x86-Debug vlastní hodnotu pro BuildDir vlastnost. Tato hodnota přepíše hodnotu nastavenou globální BuildDir vlastnost, aby BuildRoot vyhodnocen jako D:\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}"
}
]
}
Makra
Následující makra lze použít v CMakeSettings.json
:
${workspaceRoot}
– úplná cesta ke složce pracovního prostoru${workspaceHash}
– hodnota hash umístění pracovního prostoru; Užitečné pro vytvoření jedinečného identifikátoru pro aktuální pracovní prostor (například pro použití v cestách ke složkám)${projectFile}
– úplná cesta kořenovéhoCMakeLists.txt
souboru${projectDir}
– úplná cesta ke složce obsahující kořenovýCMakeLists.txt
soubor.${projectDirName}
– název složky obsahující kořenovýCMakeLists.txt
soubor${thisFile}
– úplná cesta kCMakeSettings.json
souboru${name}
– název konfigurace${generator}
– název generátoru CMake použitého v této konfiguraci
Před předáním do příkazového řádku CMake se rozbalí všechny odkazy na makra a proměnné CMakeSettings.json
prostředí.
Argumenty příkazového řádku Ninja
Pokud cíle nejsou zadané, Ninja sestaví výchozí cíl.
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise>ninja -?
ninja: invalid option -- `-?'
usage: ninja [options] [targets...]
Možnost | Popis |
---|---|
--version |
Tisk ninja verze ("1.7.1") |
-C DIR |
Před provedením čehokoli jiného změňte na DIR. |
-f FILE |
Zadání vstupního souboru sestavení (default=build.ninja ) |
-j N |
Paralelní spouštění N úloh (default=14, odvozené z dostupných procesorů) |
-k N |
Pokračujte, dokud N úlohy selžou (default=1) |
-l N |
Nespouštět nové úlohy, pokud je průměr zatížení větší než N |
-n |
Suché spuštění (nespouštět příkazy, ale fungují jako úspěšné) |
-v |
Zobrazit všechny příkazové řádky při sestavování |
-d MODE |
Povolení ladění (použití -d list k výpisu režimů) |
-t TOOL |
Spusťte podnástroj (slouží -t list k výpisu podnástrojů). Ukončí všechny možnosti nejvyšší úrovně; nástroji se předají další příznaky. |
-w FLAG |
Úprava upozornění (použití -w list k zobrazení seznamu upozornění) |