Megosztás a következőn keresztül:


CMakeSettings.json sémahivatkozás

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: Ha true, a programot a AddressSanitizer használatával fordítja. A Linuxon fordítson a -fno-omit-frame-pointer fordítóval és az -Os vagy -Oo optimalizálási szinttel a legjobb eredmény érdekében.

  • addressSanitizerRuntimeFlags: Az AddressSanitizer-nek átadott futtatási jelzők a ASAN_OPTIONS kö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 -v haszná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_DIR váltáshoz, amelyek meghatározzák, hol jön létre CMakeCache.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ául gencache.bat debug a 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 egy CMakeLists.txt vagy CMakeSettings.json egy 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.txt fá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_FILE haszná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:

    • Debug
    • Release
    • MinSizeRel
    • RelWithDebInfo
  • 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 2019
    • Visual Studio 16 2019 Win64
    • Visual Studio 16 2019 ARM

    Visual Studio 2017 és újabb verziók:

    • 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

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-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: 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 egyik Normal, Verbosevagy Diagnostic.
  • 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. Lehet rsync vagy sftp.
  • 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}, ahol VARIABLE egy környezeti változó, amely a rendszer, a felhasználó vagy a munkamenet szintjén van definiálva.
  • remoteCopySources: A boolean , 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: A boolean , 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: A array forrá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 a CMakeLists.txt fá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á a CMakeCache.txt vá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. Tartalmazza remoteCopyUseOptimizations, rsyncSingleDirectoryCommandArgs és remoteCopySourcesMaxSmallChange.

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 az namespace.variable formában egy konfigurációból hivatkozhatók legyenek. Az alapértelmezett környezeti objektum neve env, é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 egy inheritEnvironments bejegyzé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ájl CMakeLists.txt teljes elérési útja
  • ${projectDir} – a gyökérfájlt CMakeLists.txt tartalmazó mappa teljes elérési útja
  • ${projectDirName} – a gyökérfájlt CMakeLists.txt tartalmazó mappa neve
  • ${thisFile}– a fájl teljes elérési útja CMakeSettings.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 )