Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A CMake-projektek támogatottak a Visual Studio 2017-ben és újabb verzióiban.
A CMakeSettings.json fájl olyan információkat tartalmaz, amelyeket a Visual Studio az IntelliSense-hez használ, valamint azokat a parancssori argumentumokat, amelyeket a CMake-nek ad át egy adott konfigurációs és fordítókörnyezethez. A konfiguráció olyan tulajdonságokat határoz meg, amelyek egy adott platformra és buildtípusra vonatkoznak, például x86-DebugLinux-Release. Minden konfiguráció meghatároz egy környezetet, amely a fordítóeszközkészlettel kapcsolatos információkat foglalja magában, például MSVC, GCC vagy Clang. A CMake a parancssori argumentumokkal hozza létre újra a projekt gyökérfájlját CMakeCache.txt és más projektfájljait. Az értékek felülírhatók a CMakeLists.txt fájlokban.
Hozzáadhat vagy eltávolíthat konfigurációkat az IDE-ben, majd közvetlenül a JSON-fájlban szerkesztheti őket, vagy használhatja a CMake-beállítások szerkesztőt (Visual Studio 2019 és újabb verziók). Az IDE-ben egyszerűen válthat a konfigurációk között a különböző projektfájlok létrehozásához. További információ: A CMake buildelési beállításainak testreszabása a Visual Studióban.
Konfigurációk
A configurations tömb egy CMake-projekt összes konfigurációját tartalmazza. Az előre definiált konfigurációkkal kapcsolatos további információkért lásd a CMake előre definiált konfigurációs referenciáját. Tetszőleges számú előre definiált vagy egyéni konfigurációt adhat hozzá a fájlhoz.
Az A configuration a következő tulajdonságokkal rendelkezik:
addressSanitizerEnabled: Hatrue, a programot a AddressSanitizer használatával fordítja. A Linuxon fordítson a-fno-omit-frame-pointerfordítóval és az-Osvagy-Oooptimalizálási szinttel a legjobb eredmény érdekében.addressSanitizerRuntimeFlags: Az AddressSanitizer-nek átadott futtatási jelzők aASAN_OPTIONSkörnyezeti változóban. Formátum: flag1=value:flag2=value2.buildCommandArgs: Megadja a CMake-nek átadott natív buildkapcsolókat, amelyeket a--build --után használ. Például a-vhasználatakor a Ninja generátor beállítása arra kényszeríti a Ninját, hogy a parancssorokat megjelenítse. A Ninja-parancsokkal kapcsolatos további információkért lásd a Ninja parancssori argumentumait.buildRoot: Azt a könyvtárat adja meg, amelyben a CMake buildszkripteket hoz létre a kiválasztott generátorhoz. Térképek a-DCMAKE_BINARY_DIRváltáshoz, amelyek meghatározzák, hol jön létreCMakeCache.txt. Ha a mappa nem létezik, létrejön. Támogatott makrók:${workspaceRoot},${workspaceHash},${projectFile},${projectDir},${thisFile},${thisFileDir}${name}, ,${generator}.${env.VARIABLE}cacheGenerationCommand: Egy parancssori eszközt és argumentumot határoz meg, példáulgencache.bat debuga gyorsítótár létrehozásához. A parancsot a rendszer a megadott környezetben futtatja a konfigurációhoz, amikor a felhasználó explicit módon kéri az újragenerálást, vagy módosít egyCMakeLists.txtvagyCMakeSettings.jsonegy fájlt.cacheRoot: Meghatározza a CMake gyorsítótár elérési útját. Ennek a könyvtárnak egy meglévőCMakeCache.txtfájlt kell tartalmaznia.clangTidyChecks: a clang-tidynek átadott figyelmeztetések vesszővel tagolt listája; a helyettesítő karakterek engedélyezettek, a "-" előtag pedig eltávolítja az ellenőrzéseket.cmakeCommandArgs: Megadja a CMake-nek a projektfájlok létrehozásakor meghívandó további parancssori beállításokat.cmakeToolchain: Meghatározza az eszközlánc fájlt. Az-DCMAKE_TOOLCHAIN_FILEhasználatával továbbítják a CMake-hez.codeAnalysisRuleset: Megadja a kódelemzés futtatásakor használni kívánt szabálykészletet. Használhatja a Visual Studio által telepített szabálykészletfájl teljes elérési útját vagy fájlnevét.configurationType: A kiválasztott generátor buildtípus-konfigurációját adja meg. Az alábbiak egyike lehet:DebugReleaseMinSizeRelRelWithDebInfo
ctestCommandArgs: Megadja azokat a további parancssori beállításokat, amelyeket a tesztek futtatásakor át kell adni a CTestnek.description: A menükben megjelenő konfiguráció leírása.enableClangTidyCodeAnalysis: Használja a Clang-Tidy a kódelemzéshez.enableMicrosoftCodeAnalysis: A Microsoft kódelemzési eszközeinek használata a kódelemzéshez.generator: A konfigurációhoz használni kívánt CMake-generátort adja meg. Az alábbiak egyike lehet:Csak Visual Studio 2019:
Visual Studio 16 2019Visual Studio 16 2019 Win64Visual Studio 16 2019 ARM
Visual Studio 2017 és újabb verziók:
Visual Studio 15 2017Visual Studio 15 2017 Win64Visual Studio 15 2017 ARMVisual Studio 14 2015Visual Studio 14 2015 Win64Visual Studio 14 2015 ARMUnix MakefilesNinja
Mivel a Ninja a rugalmasság és a funkció helyett a gyors buildelési sebességre van tervezve, ez az alapértelmezett beállítás. Előfordulhat azonban, hogy egyes CMake-projektek nem tudnak megfelelően építeni a Ninja használatával. Ha buildelési hiba történik, utasíthatja a CMake-t, hogy inkább Visual Studio-projekteket hozzon létre.
Ha meg szeretne adni egy Visual Studio-generátort a Visual Studio 2017-ben, a főmenüben válassza a CMake | CMake beállítások módosítása lehetőséget a beállítások szerkesztőjének megnyitásához. Törölje a "Ninja" szót, és írja be a "V" szót. Ez a módosítás aktiválja az IntelliSense-t, amely lehetővé teszi a kívánt generátor kiválasztását.
Ha Visual Studio-generátort szeretne megadni a Visual Studio 2019-ben, kattintson a jobb gombbal a fájlra a CMakeLists.txtMegoldáskezelőben , és válassza a CMake Settings for project>Show Advanced Settings>CMake Generator lehetőséget.
Alapértelmezés szerint, amikor az aktív konfiguráció egy Visual Studio-generátort ad meg, argumentumokkal -m -v:minimal hívja meg az MSBuild függvényt. A build testreszabásához használja a buildCommandArgs tulajdonságot a CMakeSettings.json fájlban. Itt adhatja meg az MSBuild parancssori argumentumokat , hogy átadják a buildelési rendszernek:
"buildCommandArgs": "-m:8 -v:minimal -p:PreferredToolArchitecture=x64"
installRoot: Azt a könyvtárat adja meg, amelyben a CMake telepítési célokat hoz létre a kiválasztott generátorhoz. Támogatott makrók:${workspaceRoot},${workspaceHash},${projectFile},${projectDir},${thisFile},${thisFileDir}${name}, ,${generator}.${env.VARIABLE}inheritEnvironments: Egy vagy több fordítókörnyezetet határoz meg, amelyektől ez a konfiguráció függ. Lehet bármilyen egyéni környezet vagy az előre definiált környezetek egyike. További információ: Környezetek.intelliSenseMode: Megadja az intellisense-információk kiszámításához használt módot". Az érték a következő lehet:windows-msvc-x86windows-msvc-x64windows-msvc-armwindows-msvc-arm64android-clang-x86android-clang-x64android-clang-armandroid-clang-arm64ios-clang-x86ios-clang-x64ios-clang-armios-clang-arm64windows-clang-x86windows-clang-x64windows-clang-armwindows-clang-arm64linux-gcc-x86linux-gcc-x64linux-gcc-arm
name: a konfiguráció neve. Az előre definiált konfigurációkkal kapcsolatos további információkért lásd a CMake előre definiált konfigurációs referenciáját.wslPath: a Linuxhoz készült Windows-alrendszer egy példányának indítási útvonala.
CMake Linux-projektek beállításai
-
remoteMachineName: Megadja a CMake-t, buildeket és hibakeresőt üzemeltető távoli Linux-gép nevét. Új Linux-gépek hozzáadásához használja a Connection Managert. A támogatott makrók közé tartoznak a következők${defaultRemoteMachineName}: . -
remoteCopySourcesOutputVerbosity: Meghatározza a forrásmásolási művelet részletességi szintjét a távoli gépre. Lehet az egyikNormal,VerbosevagyDiagnostic. -
remoteCopySourcesConcurrentCopies: Megadja a források távoli gépre való szinkronizálása során használandó egyidejű másolatokat (csak sftp). -
remoteCopySourcesMethod: Megadja a fájlok távoli gépre másolásának módját. Lehetrsyncvagysftp. -
remoteCMakeListsRoot: Megadja a CMake-projektet tartalmazó távoli gépen található könyvtárat. A támogatott makrók közé tartoznak:${workspaceRoot},${workspaceHash},${projectFile},${projectDir},${thisFile},${thisFileDir},${name},${generator}és${env.VARIABLE}. -
remoteBuildRoot: Megadja azt a könyvtárat a távoli gépen, amelyben a CMake buildszkripteket hoz létre a kiválasztott generátorhoz. Támogatott makrók:${workspaceRoot},${workspaceHash},${projectFile},${projectDir},${thisFile},${thisFileDir}${name}, ,${generator}.${env.VARIABLE} -
remoteInstallRoot: Megadja azt a könyvtárat a távoli gépen, amelyben a CMake telepítési célokat hoz létre a kiválasztott generátorhoz. A támogatott makrók közé tartozik${workspaceRoot}a ,${workspaceHash},${projectFile},${projectDir},${thisFile}${thisFileDir},${name}, , és${generator}${env.VARIABLE}, aholVARIABLEegy környezeti változó, amely a rendszer, a felhasználó vagy a munkamenet szintjén van definiálva. -
remoteCopySources: Aboolean, amely meghatározza, hogy a Visual Studio átmásolja-e a forrásfájlokat a távoli gépre. Az alapértelmezett érték igaz. Állítsa hamis értékre, ha saját maga kezeli a fájlszinkronizálást. -
remoteCopyBuildOutput: Aboolean, amely meghatározza, hogy a buildkimeneteket a távoli rendszerből másolja-e. -
remoteCopyAdditionalIncludeDirectories: A távoli gépről az IntelliSense támogatásához másolni kívánt könyvtárakat is tartalmaz. Formátum : "/path1;/path2...". -
remoteCopyExcludeDirectories: A távoli gépről nem másolandó könyvtárak belefoglalása. Formátum : "/path1;/path2...". -
remoteCopyUseCompilerDefaults: Meghatározza, hogy a fordító alapértelmezett definícióit és tartalmazási útvonalait használja-e az IntelliSense számára. Csak akkor legyen hamis, ha a használt fordítók nem támogatják a GCC-stílusú argumentumokat. -
rsyncCommandArgs: Az rsyncnek átadott parancssori beállítások készletét adja meg. -
remoteCopySourcesExclusionList: Aarrayforrásfájlok másolása során kizárandó elérési utak listáját adja meg: az elérési út lehet egy fájl/könyvtár neve, vagy a másolat gyökeréből származó relatív elérési út. Helyettesítő karakterek,*és?használhatók a glob minta egyeztetéséhez. -
cmakeExecutable: Megadja a végrehajtható CMake program teljes elérési útját, beleértve a fájlnevet és a bővítményt. -
remotePreGenerateCommand: A CMake futtatása előtt futtatandó parancsot adja meg aCMakeLists.txtfájl elemzéséhez. -
remotePrebuildCommand: Megadja a távoli gépen az építés előtt futtatandó parancsot. -
remotePostbuildCommand: Megadja a távoli gépen az építés után futtatandó parancsot. -
variables: Olyan név-érték párokat tartalmaz, amelyek CMake változók, és-D name=value-ként adódnak át a CMake-nek. Ha a CMake-projekt összeállítási utasításai közvetlenül a fájlhoz adják hozzá aCMakeCache.txtváltozókat, javasoljuk, hogy itt adja hozzá őket. Ez a példa bemutatja, hogyan adhatja meg a név-érték párokat a 14.14.26428 MSVC buildeszközök használatához:
"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"
}
]
Ha nem adja meg a típust "type", a rendszer alapértelmezés szerint feltételezi a "STRING" típust.
-
remoteCopyOptimizations: A Visual Studio 2019 16.5-ös vagy újabb verziójának tulajdonságai a távoli célra történő forrásmásolás szabályozásához. Az optimalizálás alapértelmezés szerint engedélyezve van. TartalmazzaremoteCopyUseOptimizations,rsyncSingleDirectoryCommandArgsésremoteCopySourcesMaxSmallChange.
Környezetek
A környezet magában foglalja a Visual Studio által a CMake meghívásához használt folyamat során beállított környezeti változókat. MSVC-projektek esetén egy adott platform fejlesztői parancssorában beállított változókat rögzíti. A környezet például ugyanaz, msvc_x64_x64 mint a VS {version} fejlesztői parancssorának futtatása az -arch=amd64 -host_arch=amd64 argumentumokkal. A env.{<variable_name>} szintaxis CMakeSettings.json használatával hivatkozhat az egyes környezeti változókra, például mappák elérési útjainak létrehozásához. A következő előre definiált környezetek érhetők el:
-
linux_arm: Az ARM Linux távoli megcélzása. -
linux_x64: Cél x64 Linux távolról. -
linux_x86: Célozza meg az x86 Linuxot távolról. -
msvc_arm: Windows ARM megcélzása az MSVC fordítóval. -
msvc_arm_x64: Az ARM Windows megcélzása a 64 bites MSVC-fordítóval. -
msvc_arm64: Az MSVC fordító használatával célozza meg az ARM64-Windows platformot. -
msvc_arm64_x64: Az ARM64-alapú Windows megcélzása a 64 bites MSVC-fordítóval. -
msvc_arm64ec: Az ARM64EC Windows-ra célozzon az MSVC fordítóval. -
msvc_arm64ec_x64: Az ARM64EC Windowst célozza a 64 bites MSVC-fordítóval. -
msvc_x64: Célozza meg az x64 Windows rendszert az MSVC fordítóval. - A cél az x64 Windows a 64 bites MSVC fordítóval.
-
msvc_x86: Célozd meg az x86 Windows-t az MSVC fordítóval. -
msvc_x86_x64: Célozza meg az x86 Windows rendszert a 64 bites MSVC fordítóval.
Környezeti változók elérése a következőből: CMakeLists.txt
CMakeLists.txt Egy fájlban az összes környezeti változóra a szintaxis $ENV{variable_name}hivatkozik. A környezet elérhető változóinak megtekintéséhez nyissa meg a megfelelő parancssort, és írja be a kívánt parancsot SET. A környezeti változók egyes információi a CMake rendszer introspection változóin keresztül is elérhetők, de kényelmesebbnek tűnhet a környezeti változó használata. Például egyszerűen lekérheti az MSVC fordító vagy a Windows SDK verzióját a környezeti változókon keresztül.
Egyéni környezeti változók
Ebben CMakeSettings.jsonaz esetben globálisan vagy konfigurációnként definiálhat egyéni környezeti változókat a environments tömbben. Az egyéni környezetek kényelmesen csoportosítják a tulajdonságokat. Használhatja egy előre definiált környezet helyett, vagy bővítheti vagy módosíthatja az előre definiált környezetet. A tömb minden eleme a environments következőkből áll:
-
namespace: A környezetet el kell nevezni, hogy a változók aznamespace.variableformában egy konfigurációból hivatkozhatók legyenek. Az alapértelmezett környezeti objektum neveenv, és bizonyos rendszerkörnyezeti változókkal van feltöltve, például%USERPROFILE%. -
environment: A változók ezen csoportját egyedileg azonosítja. Lehetővé teszi, hogy a csoport később örökölhető legyen egyinheritEnvironmentsbejegyzésben. -
groupPriority: Egy egész szám, amely meghatározza ezeknek a változóknak a prioritását a kiértékelésük során. A nagyobb számú elemek kiértékelése történik meg először. -
inheritEnvironments: Az értékek tömbje, amely meghatározza a csoport által öröklődő környezeteket. Ezzel a funkcióval örökölheti az alapértelmezett környezeteket, és egyéni környezeti változókat hozhat létre a CMake-nek való továbbításhoz a futtatáskor.
Visual Studio 2019 16.4-es és újabb verzió: A hibakeresési célok automatikusan elindulnak a megadott CMakeSettings.jsonkörnyezettel. A környezeti változókat felülbírálhatja vagy hozzáadhatja célonként vagy tevékenységenként a launch.vs.json és tasks.vs.json alapján.
Az alábbi példa egy globális változót határoz meg, BuildDiramely az x86-Debug és az x64-Debug konfigurációkban öröklődik. Minden konfiguráció a változó használatával adja meg az adott konfiguráció tulajdonságának buildRoot értékét. Figyelje meg azt is, hogy az egyes konfigurációk hogyan használják a inheritEnvironments tulajdonságot egy olyan változó megadására, amely csak az adott konfigurációra vonatkozik.
{
// 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}"
}
]
}
A következő példában az x86-Debug konfiguráció saját értéket határoz meg a BuildDir tulajdonsághoz. Ez az érték felülbírálja a globális BuildDir tulajdonság által beállított értéket, így a BuildRoot kiértékeli a következőt 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}"
}
]
}
Makrók
A következő makrók használhatók a következőben CMakeSettings.json:
-
${workspaceRoot}– a munkaterület mappa teljes elérési útja -
${workspaceHash}– a munkaterület helyének kivonata; hasznos az aktuális munkaterület egyedi azonosítójának létrehozásához (például a mappa elérési útjaiban való használathoz) -
${projectFile}– a gyökérfájlCMakeLists.txtteljes elérési útja -
${projectDir}– a gyökérfájltCMakeLists.txttartalmazó mappa teljes elérési útja -
${projectDirName}– a gyökérfájltCMakeLists.txttartalmazó mappa neve -
${thisFile}– a fájl teljes elérési útjaCMakeSettings.json -
${name}– a konfiguráció neve -
${generator}– az ebben a konfigurációban használt CMake-generátor neve
A makrókra és környezeti változókra CMakeSettings.json mutató összes hivatkozás ki van bontva, mielőtt a CMake parancssorba kerül.
Ninja parancssori argumentumok
Ha a célok nincsenek meghatározva, a Ninja létrehozza az "alapértelmezett" célt.
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Enterprise>ninja -?
ninja: invalid option -- `-?'
usage: ninja [options] [targets...]
| Lehetőség | Leírás |
|---|---|
--version |
Nindzsa verzió nyomtatása ("1.7.1") |
-C DIR |
Váltás DIR-re, mielőtt bármi mást csinálna |
-f FILE |
Bemeneti buildfájl megadása (default=build.ninja) |
-j N |
Feladatok párhuzamos futtatása N (elérhető PROCESSZORokból származtatott default=14) |
-k N |
Folytassa addig, amíg N feladatok meghiúsulnak (alapértelmezett=1) |
-l N |
Ne kezdjen új feladatokat, ha a terhelési átlag nagyobb, mint N |
-n |
Próbafuttatás (a parancsok tényleges végrehajtása nélkül úgy tesz, mintha sikeresen megtörténtek volna) |
-v |
Az összes parancssor megjelenítése az összeállítás során |
-d MODE |
Hibakeresés engedélyezése (a módok listázására használja a -d list ) |
-t TOOL |
Egy al-eszköz futtatása (az al-eszközök listázásához használja a -t list-t). A legfelső szintű beállítások vége; további jelzők kerülnek az eszközre |
-w FLAG |
Figyelmeztetések módosítása (figyelmeztetések listázására használható -w list ) |