Sdílet prostřednictvím


Konfigurace a sestavení pomocí předvoleb CMake v sadě Visual Studio

CMake podporuje dva soubory, které uživatelům umožňují určit společné možnosti konfigurace, sestavení a testování a sdílet je s ostatními: CMakePresets.json a CMakeUserPresets.json. Pomocí těchto souborů můžete řídit CMake v sadě Visual Studio a Visual Studio Code, v kanálu kontinuální integrace (CI) a z příkazového řádku.

CMakePresets.json slouží k ukládání buildů pro celý projekt. CMakeUserPresets.json je určená pro vývojáře, aby si uložili vlastní místní buildy. Oba soubory jsou podporované v sadě Visual Studio 2019 verze 16.10 nebo novější.

Tento článek obsahuje informace o CMakePresets.json integraci se sadou Visual Studio. Tady jsou užitečné odkazy:

Jako CMakePresets.json alternativu CMakeSettings.jsonk . Visual Studio nikdy nečte z obou CMakePresets.json a CMakeSettings.json současně. Pokud chcete povolit nebo zakázat CMakePresets.json integraci v sadě Visual Studio, přečtěte si téma Povolení CMakePresets.json v sadě Visual Studio 2019.

Podporované CMake a CMakePresets.json verze

Podporované CMakePresets.json verze a CMakeUserPresets.json verze schématu závisí na vaší verzi sady Visual Studio:

  • Visual Studio 2019 verze 16.10 a novější podporuje schéma verze 2 a 3.
  • Visual Studio 2022 verze 17.4 Preview 1 přidává podporu schématu verze 4.
  • Visual Studio 2022 verze 17.5 Preview 1 přidává podporu schématu verze 5.

Verzi můžete aktualizovat změnou "version" pole v kořenovém objektu. Příklad a další informace najdete CMakePresets.json ve formátu.

CMake verze 3.20 nebo novější se vyžaduje, když voláte CMake z CMakePresets.json příkazového řádku. Visual Studio ale čte a vyhodnocuje CMakePresets.json a CMakeUserPresets.json sama sebe a nevyvolává CMake přímo s --preset možností. Proto CMake verze 3.20 nebo novější není při sestavování v CMakePresets.json sadě Visual Studio striktně nutná.

Doporučujeme používat aspoň CMake verze 3.14 nebo novější.

Povolení CMakePresets.json integrace v sadě Visual Studio

CMakePresets.json Integrace není ve výchozím nastavení v sadě Visual Studio povolená. Můžete ho povolit v >nástrojích Možnosti>CMake>Obecné:

Snímek obrazovky s vybranou možností Vždy použít CMakePresets.json

Tato obrazovka se dostanete z nabídky sady Visual Studio 2022: Nástroje > Možnosti > CMake > Obecné. Tato možnost je v části Konfigurace souboru CMake.

Důležité

Zavřete a znovu otevřete složku v sadě Visual Studio a aktivujte integraci.

V některých starších verzích sady Visual Studio nabízí nástroje>CMake>>Obecné jenom jednu možnost pro povolení CMakePresets.json integrace:

Snímek obrazovky se starší verzí sady Visual Studio K dispozici je zaškrtávací políčko Použít přednastavení jazyka C .json pro řízení konfigurace, sestavení a testování CMake.

Následující tabulka uvádí, kdy CMakePresets.json se používá místo CMakeSettings.json použití konfigurace CMake a sestavení v sadě Visual Studio 2022 a Visual Studio 2019 verze 16.10 a novější. Pokud neexistuje žádný konfigurační soubor, použijí se výchozí předvolby konfigurace.

V tabulce "Možnosti nástrojů>povoleno" znamená použití CMakePresets.json k řízení konfigurace, sestavení a testování CMake je vybrán v> nástrojích Možnosti>CMake>Obecné.

Konfigurační soubory Možnosti nástrojů > zakázány Možnosti nástrojů > povoleny
Neexistuje žádný konfigurační soubor. CMakeSettings.json CMakePresets.json
CMakeSettings.json přítomný CMakeSettings.json CMakePresets.json
CMakePresets.json přítomný CMakePresets.json CMakePresets.json
Oba konfigurační soubory jsou k dispozici. CMakePresets.json CMakePresets.json

Úprava automatické konfigurace a oznámení mezipaměti

Visual Studio ve výchozím nastavení automaticky vyvolá configure pokaždé, když aktivní cílový systém nebo nakonfiguruje přednastavené změny. Toto chování můžete upravit tak, že v> nástrojích CMake>>Obecné vyberete možnost Nikdy spustit krok konfigurace automaticky. Všechna oznámení mezipaměti CMake (zlaté pruhy) můžete také zakázat zrušením zaškrtnutí políčka Zobrazit oznámení mezipaměti CMake.

Výchozí konfigurace předvoleb

Pokud žádný CMakePresets.json nebo CMakeUserPresets.json soubor neexistuje nebo CMakePresets.json CMakeUserPresets.json je neplatný, sada Visual Studio se vrátí do následujících výchozích předvoleb konfigurace:

Příklad pro Windows

{
  "name": "windows-default",
  "displayName": "Windows x64 Debug",
  "description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type",
  "generator": "Ninja",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "architecture": {
    "value": "x64",
    "strategy": "external"
  },
  "cacheVariables": {
    "CMAKE_BUILD_TYPE": "Debug",
    "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
  },
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": [ "Windows" ]
    }
  }
},

Příklad pro Linux

{
  "name": "linux-default",
  "displayName": "Linux Debug",
  "description": "Sets Ninja generator, compilers, build and install directory, debug build type",
  "generator": "Ninja",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "cacheVariables": {
    "CMAKE_BUILD_TYPE": "Debug",
    "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
  },
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": [ "Linux" ]
    },
    "microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
      "sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
   }
  }
}

Pokud se pokusíte otevřít nebo upravit CMakePresets.json soubor, který neexistuje, Visual Studio automaticky vytvoří CMakePresets.json soubor s výchozím nastavením Konfigurovat přednastavení v kořenovém adresáři projektu.

Konfigurace a sestavení

Na panelu nástrojů sady Visual Studio jsou rozevírací seznamy pro cílové systémy, konfigurovat předvolby a předvolby sestavení, pokud CMakePresets.json je povolená integrace:

Snímek obrazovky znázorňující rozevírací seznamy pro cílový systém nastavený na Místní počítač, konfigurace nastavená na windows-arm64 a předvolba sestavení nastavená na výchozí

Výběr cílového systému

Rozevírací seznam na levé straně označuje aktivní cílový systém. Je to systém, na kterém je CMake vyvolán ke konfiguraci a sestavení projektu. Tento rozevírací seznam obsahuje místní počítač, všechna připojení SSH v Správce připojení podle názvu hostitele a všechny instalace Subsystém Windows pro Linux (WSL), které sada Visual Studio najde:

Snímek obrazovky s rozevíracím seznamem Cílový systém

Rozevírací seznam obsahuje několik položek včetně místního počítače, IP adresy 192.168.0.5, WSL: ubuntu2004, WSL: debian a Manage Connections.

V předchozím příkladu:

  • 192.168.0.5 je vzdálený linuxový systém, který byl přidán do Správce připojení.
  • Ubuntu2004 a debian jsou instalace WSL.

Výběrem možnosti Spravovat připojení otevřete Správce připojení.

Výběr přednastavení konfigurace

Rozevírací seznam uprostřed označuje aktivní předvolbu konfigurace. Je to configurePreset hodnota, která se používá při vyvolání CMake k vygenerování systému sestavení projektu. Tento rozevírací seznam obsahuje sjednocení neskrytá konfigurace přednastavení definovaných v CMakePresets.json a CMakeUserPresets.json.

Visual Studio používá hodnotu hostOS v mapě dodavatele nastavení sady Microsoft Visual Studio ke skrytí předvoleb konfigurace, které se nevztahují na aktivní cílový systém. Další informace najdete v položce hostOS tabulky v mapě dodavatele nastavení sady Visual Studio.

Výběrem možnosti Spravovat konfigurace otevřete CMakePresets.json soubor umístěný v kořenovém adresáři projektu. CMakePresets.json je vytvořen, pokud ještě neexistuje.

Výběr přednastavení sestavení

Rozevírací seznam vpravo označuje aktivní předvolbu sestavení. Je to buildPreset hodnota, která se používá při vyvolání CMake k sestavení projektu. Tento rozevírací seznam obsahuje sjednocení neskrytých předvoleb sestavení definovaných v CMakePresets.json a CMakeUserPresets.json.

K určení přidružené configurePreset hodnoty jsou vyžadovány všechny předvolby sestavení. Visual Studio skryje předvolby sestavení, které se nevztahují na aktivní předvolbu konfigurace. Další informace najdete v seznamu předvoleb sestavení.

Pokud nejsou k aktivní konfiguraci přednastavení přidruženy žádné přednastavení sestavení, sada Visual Studio zobrazí výchozí předvolbu sestavení. Výchozí předvolba sestavení je ekvivalentní předávání cmake --build bez dalších argumentů z příkazového řádku.

Konfigurovat

Visual Studio se automaticky pokusí nakonfigurovat projekt, když zjistí, že mezipaměť CMake je za aktuální. Pokud chcete konfiguraci vyvolat ručně, vyberte v hlavní nabídce možnost Project>Configure project-name (Konfigurovat <název> projektu). Je to stejné jako spuštění cmake --preset <configurePreset> z příkazového řádku, kde <configurePreset> je název aktivní konfigurace přednastavení.

Pokud chcete zakázat automatické generování mezipaměti, přečtěte si téma Automatická konfigurace a oznámení mezipaměti.

Sestavení

Chcete-li sestavit celý projekt, vyberte v hlavní nabídce možnost Sestavit>vše. Je to stejné jako spuštění cmake --build --preset <buildPreset> z příkazového řádku, kde <buildPreset> je název aktivní předvolby sestavení.

Pokud chcete vytvořit jeden cíl, přepněte do zobrazení cílů CMake v Průzkumník řešení. Potom klikněte pravým tlačítkem na libovolný cíl a v místní nabídce vyberte Vytvořit .

Poznámka:

Visual Studio 2019 nepodporuje buildPresets.targets možnost vytvořit podmnožinu cílů zadaných v CMakePresets.jsonsadě .

Spuštění CTestu

CMakePresets.json podporuje dvě možnosti nabídky v sadě Visual Studio 2019:

  • Testovací>spuštění CTests pro <název> projektu vyvolá CTest a spustí všechny testy přidružené k aktivní předvolbě konfigurace a přednastavení sestavení bez dalších argumentů předaných CTest.
  • >Předvolba testu testu pro <konfiguraciPreset> se rozbalí, aby se zobrazily všechny přednastavení testů přidružené k aktivní předvolbě konfigurace. Výběr jedné předvolby testu je stejný jako spuštění ctest --preset <testPreset> z příkazového řádku, kde <testPreset> je název vybrané předvolby testu. Tato možnost není k dispozici, pokud nejsou pro aktivní předvolbu konfigurace definovány žádné přednastavení testů.

V sadě Visual Studio 2019 není Průzkumník testů integrovaný s CMakePresets.json.

Přidání nových předvoleb

V sadě Visual Studio 2019 se změní CMakePresets.jsonvšechny příkazy a přednastavené šablony . Nové předvolby na úrovni uživatele můžete přidat přímo úpravou CMakeUserPresets.json.

/Pro cesty v CMakePresets.json a CMakeUserPresets.json.

Přidání nových přednastavení konfigurace

Chcete-li přidat novou předvolbu CMakePresets.jsonkonfigurace pro , z Průzkumník řešení, klikněte pravým tlačítkem na CMakePresets.json zobrazení složky a v místní nabídce vyberte Přidat konfiguraci. Zobrazí se dialogové okno pro výběr šablony Konfigurovat přednastavení:

Snímek obrazovky s dialogovým oknem Přidat předvolbu konfigurace do souboru JSON Obsahuje položky, jako je Linux Debug, macOS Debug, x64 Debug atd.

Vyberte šablonu ladění systému Windows x64 a nakonfigurujte ji v systémech Windows. Vyberte šablonu ladění Linuxu a nakonfigurujte ji ve vzdálených systémech Linux. Další informace o úpravách CMakePresets.jsonnaleznete v tématu Úpravy předvoleb.

Vybraná šablona se přidá, CMakePresets.json pokud existuje. V opačném případě se šablona zkopíruje do nového CMakePresets.json souboru.

Přidání nových předvoleb sestavení a předvoleb testů

Visual Studio 2019 nenabízí šablony pro nové předvolby sestavení a předvolby testů. Předvolby sestavení a předvolby testů můžete přidat přímo úpravou CMakePresets.json. Další informace najdete v seznamu přednastavení sestavení, seznamu předvoleb testů nebo ukázkového CMakePresets.json souboru.

Úprava přednastavení

Oficiální dokumentace CMake je nejlepším prostředkem pro úpravy konfigurací předvoleb, předvoleb sestavení a testovacích předvoleb. Následující informace jsou podmnožinou dokumentace CMake, která je zvláště relevantní pro vývojáře sady Visual Studio.

Výběr kompilátorů

Kompilátory jazyka C a C++ můžete nastavit pomocí cacheVariables.CMAKE_C_COMPILER cacheVariables.CMAKE_CXX_COMPILER a v předvolbě konfigurace. Je ekvivalentem předávání -D CMAKE_C_COMPILER=<value> a -D CMAKE_CXX_COMPILER=<value> CMake z příkazového řádku. Další informace najdete na webu CMAKE_<LANG>_COMPILER.

Následující příklady použijte k sestavení pomocí cl.exe sady Visual Studio a clang-cl.exe ze sady Visual Studio. Nástroje Clang jazyka C++ pro součásti systému Windows musí být nainstalovány, aby bylo možné sestavovat pomocí clang-cl.

Sestavení s:cl.exe

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
  "CMAKE_C_COMPILER": "cl",
  "CMAKE_CXX_COMPILER": "cl"
},

Sestavení s:clang

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
  "CMAKE_C_COMPILER": "clang-cl",
  "CMAKE_CXX_COMPILER": "clang-cl"
},

"vendor": {
  "microsoft.com/VisualStudioSettings/CMake/1.0": {
    "intelliSenseMode": "windows-clang-x64"
  }
}

Pokud použijete buď nebo Visual Studio 16 2019 Visual Studio 17 2022 jako generátor, můžete sadu nástrojů zadat ClangCL pomocí toolset přednastavení konfigurace:

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
},

"toolset": "ClangCL",

"vendor": {
  "microsoft.com/VisualStudioSettings/CMake/1.0": {
    "intelliSenseMode": "windows-clang-x64"
  }
}

Další informace o generátorech, které podporují toolset specifikaci, najdete CMAKE_GENERATOR_TOOLSET v dokumentaci k CMake.

Důležité

V sadě Visual Studio 2019 musíte explicitně zadat režim Clang IntelliSense při sestavování pomocí clang nebo clang-cl.

Pokud chcete tyto buildy reprodukovat mimo Visual Studio, přečtěte si téma Spuštění CMake z příkazového řádku nebo kanálu CI.

Pokud chcete sestavovat v Linuxu nebo bez sady nástrojů Visual C++, zadejte název kompilátoru ve vaší PATH instanci nebo proměnnou prostředí, která se vyhodnotí jako úplná cesta kompilátoru. Úplné cesty se nedoporučuje, aby soubor zůstal sdíletelný. Přednastavení sestavení s GCC verze 8 může vypadat takto:

"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
  "CMAKE_C_COMPILER": "gcc-8",
  "CMAKE_CXX_COMPILER": "g++-8"
},

Kompilátory můžete také nastavit pomocí souboru sady nástrojů CMake. Soubory toolchain lze nastavit pomocí cacheVariables.CMAKE_TOOLCHAIN_FILE, což je ekvivalent pro předávání -D CMAKE_TOOLCHAIN_FILE=<value> CMake z příkazového řádku. Soubor sady nástrojů CMake se nejčastěji používá pro křížovou kompilaci. Další informace o vytváření souborů toolchain CMake naleznete v sadě nástrojů CMake.

Výběr generátoru

Předdefinované šablony konfigurace Windows i Linuxu určují jako výchozí generátor Ninja. Další běžné generátory jsou generátory sady Visual Studio v systémech Windows a Unix Makefile v systémech Linux a macOS. Nový generátor můžete zadat pomocí generator možnosti Konfigurovat předvolbu. Odpovídá předání -G CMake z příkazového řádku.

Nastavte a toolset.strategy nastavte architecture.strategy set při vytváření pomocí nástroje Visual Studio Generator. Další informace najdete v tématu Generátory CMake.

Vyberte typ konfigurace.

Typ konfigurace (DebugneboRelease) pro generátory konfigurace můžete nastavit pomocí .cacheVariables.CMAKE_BUILD_TYPE Odpovídá předání -D CMAKE_BUILD_TYPE=<value> CMake z příkazového řádku. Další informace najdete na webu CMAKE_BUILD_TYPE.

Výběr cílové architektury a architektury hostitele při sestavování pomocí sady nástrojů Visual C++

Cílovou architekturu (x64, Win32, ARM64 nebo ARM) můžete nastavit pomocí .architecture.value Odpovídá předání -A CMake z příkazového řádku. Další informace naleznete v tématu Výběr platformy.

Poznámka:

Generátory sady Visual Studio v současné době očekávají syntaxi Win32 a generátory příkazového řádku (například Ninja) při sestavování pro x86 syntaxi x86.

Architekturu hostitele (x64 nebo x86) a sadu nástrojů můžete nastavit pomocí .toolset.value Odpovídá předání -T CMake z příkazového řádku. Další informace naleznete v tématu Výběr sady nástrojů.

Hodnoty architecture.strategy a toolset.strategy říkají CMake, jak zpracovat pole architektury a sady nástrojů. set znamená, že CMake nastaví příslušnou hodnotu a external znamená, že CMake nenastaví příslušnou hodnotu.

Doporučujeme používat set s generátory ide, jako je Generátor sady Visual Studio. Používejte external s generátory příkazového řádku, jako je Ninja. Tyto hodnoty umožňují dodavatelům, jako je Visual Studio, poskytnout požadované prostředí před vyvolání CMake. Další informace o polích architektury a sady nástrojů najdete v seznamu konfigurovat přednastavení.

Pokud nechcete vytvořit zdroj prostředí, můžete ho external nastavit architecture.strategy a architecture.value nastavit na unspecifiedhodnotu . Z některého z těchto důvodů se může stát, že není vhodné vytvořit prostředí:

  • Používáte jinou sadu nástrojů než MSVC.
  • Používáte vlastní sadu nástrojů, například ve vložených scénářích.
  • K sestavení nepotřebujete konkrétní prostředí.

Úplný seznam generátorů IDE, které podporují pole architektury, najdete v tématu CMAKE_GENERATOR_PLATFORM. Úplný seznam generátorů IDE, které podporují pole sady nástrojů, najdete v tématu CMAKE_GENERATOR_TOOLSET.

Pomocí následujících příkladů můžete cílit na ARM64 s generátorem Ninja nebo cílit na Win32 (x86) pomocí generátoru sady Visual Studio 16 2019:

"generator": "Ninja",
"architecture": {
    "strategy": "external",
    "value": "arm64"
},

"generator": "Visual Studio 16 2019",
"architecture": {
    "strategy": "set",
     "value": "Win32"
},

Nastavení a referenční proměnné prostředí

Proměnné prostředí můžete nastavit pomocí mapy prostředí. Proměnné prostředí se dědí prostřednictvím inherits pole, ale můžete je přepsat podle potřeby.

Přednastavené prostředí je sjednocením vlastního prostředí a prostředí ze všech nadřazených prostředí. Pokud více inherits předvoleb poskytuje konfliktní hodnoty pro stejnou proměnnou, je upřednostňovaná předchozí předvolba v inherits seznamu. Proměnnou zděděnou z jiné předvolby můžete zrušit tak, že ji nastavíte na nullhodnotu .

Proměnné prostředí nastavené v předvolbě konfigurace také automaticky procházejí přidruženými předvolbami sestavení a předvolbami testů, pokud inheritConfigureEnvironment není nastavena na falsehodnotu . Další informace najdete v seznamu konfigurace předvoleb.

Proměnné prostředí můžete odkazovat pomocí $env{<variable-name>} syntaxe a $penv{<variable-name>} syntaxe. Další informace naleznete v tématu Rozšíření makra.

Konfigurace IntelliSense pro křížový kompilátor

Visual Studio ve výchozím nastavení používá režim IntelliSense, který odpovídá zadané sadě nástrojů a cílové architektuře. Pokud křížově kompilujete, budete možná muset ručně zadat správný režim IntelliSense pomocí intelliSenseMode možnosti na mapě dodavatele nastavení sady Visual Studio. Další informace najdete v položce intelliSenseMode tabulky v mapě dodavatele nastavení sady Visual Studio.

Konfigurace a sestavení ve vzdáleném systému nebo Subsystém Windows pro Linux

Díky CMakePresets.json podpoře v sadě Visual Studio můžete snadno nakonfigurovat a sestavit projekt ve Windows, WSL a vzdálených systémech. Postup konfigurace a sestavení projektu ve Windows, vzdáleném systému nebo WSL jsou stejné. Několik chování je však specifické pro vzdálený vývoj.

${sourceDir} chování ve scénářích vzdáleného kopírování

V místních scénářích (včetně WSL1) ${sourceDir} se vyhodnotí cesta ke zdrojovému adresáři projektu, který je otevřený v sadě Visual Studio. Ve scénářích ${sourceDir} vzdáleného kopírování se vyhodnotí cesta ke zdrojovému adresáři projektu v cílovém systému, a ne ke zdrojovému adresáři projektu na místním počítači.

Hodnota v mapě dodavatele vzdáleného sourceDir nastavení sady Visual Studio určuje zdrojový adresář projektu v cílovém systému (výchozí hodnota $env{HOME}/.vs/$ms{projectDirName}). Další informace najdete v položce sourceDir tabulky v mapě dodavatele nastavení sady Visual Studio.

Místní složka pro vzdálený výstup

Scénáře vzdáleného kopírování vyžadují, aby místní adresář zkopíroval některé vzdálené soubory, jako jsou soubory odpovědí rozhraní CMake File API nebo soubory sestavení, pokud copyBuildOutput je v mapě dodavatele vzdáleného nastavení sady Visual Studio nastavena na true. Tyto soubory se automaticky zkopírují do <local-source-directory>/out/<remote-connection-ID>/build/${presetName}.

Vyvolání stejné předvolby konfigurace ve Windows a WSL1

Pokud se pokusíte použít stejnou předvolbu konfigurace ve Windows a WSL1, zobrazí se chyba. Windows i WSL1 používají systém souborů Windows, takže CMake se pokusí použít stejný výstupní adresář (binaryDir) pro stromy sestavení Windows i WSL1.

Pokud chcete použít stejnou předvolbu konfigurace s Windows i sadou nástrojů WSL1, vytvořte druhou předvolbu konfigurace, která dědí z původní předvolby a určuje novou binaryDir hodnotu. V následujícím příkladu windows-preset lze použít ve Windows a base-preset lze ho použít ve WSL1:

{
  "name": "windows-preset",
  "inherits": "base-preset",
  "binaryDir": "${sourceDir}/out/build/${presetName}",
  "vendor": {
    "microsoft.com/VisualStudioSettings/CMake/1.0": {
      "hostOS": "Windows"
    }
  }
}

Poznámka:

V sadě Visual Studio 2019 se podporuje pouze sada nástrojů WSL1. Toto chování se zobrazí při každém vyvolání configure windows i WSL.

Povolení integrace vcpkg

Vcpkg pomáhá spravovat knihovny C a C++ ve Windows, Linuxu a macOS. Aby bylo možné povolit integraci vcpkg, musí být do CMake předán soubor vcpkg toolchain (vcpkg.cmake). Další informace najdete v dokumentaci k vcpkg.

Visual Studio už při povolení integrace nepředá soubor vcpkg toolchain do CMake automaticky CMakePresets.json . Tato změna eliminuje chování specifické pro Visual Studio a zajišťuje, že sestavení můžete reprodukovat z příkazového řádku.

Místo toho nastavte cestu vcpkg.cmake pomocí VCPKG_ROOT proměnné prostředí v CMakePresets.json:

"cacheVariables": {
   "CMAKE_TOOLCHAIN_FILE": {
      "value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
       "type": "FILEPATH"
    }
 },

VCPKG_ROOT měla by být nastavena na kořen vaší instalace vcpkg. Další informace najdete v tématu proměnné prostředí vcpkg.

Pokud už používáte soubor sady nástrojů CMake a chcete povolit integraci vcpkg, přečtěte si téma Použití více souborů sady nástrojů. Podle těchto pokynů použijte externí soubor sady nástrojů s projektem pomocí nástroje vcpkg.

Nahrazení proměnných v launch.vs.json a tasks.vs.json

CMakePresets.json podporuje nahrazení proměnných v launch.vs.json a tasks.vs.json. Tady je několik aspektů:

  • Proměnné prostředí nastavené v aktivní předvolbě konfigurace se automaticky protékají do launch.vs.json a tasks.vs.json konfigurací. Jednotlivé proměnné launch.vs.json prostředí můžete zrušit tak tasks.vs.json , že je nastavíte na nullhodnotu . Následující příklad nastaví proměnnou DEBUG_LOGGING_LEVEL na null hodnotu in launch.vs.json: "env": { "DEBUG_LOGGING_LEVEL": null }.

  • Hodnoty klíče nastavené v aktivní předvolbě konfigurace jsou k dispozici pro spotřebu launch.vs.json v syntaxi a tasks.vs.json syntaxi ${cmake.<KEY-NAME>}. Slouží ${cmake.binaryDir} například k odkazování na výstupní adresář aktivní konfigurace přednastavení.

  • Jednotlivé proměnné prostředí nastavené v mapě prostředí aktivní předvolby konfigurace jsou k dispozici pro spotřebu v launch.vs.json syntaxi a tasks.vs.json prostřednictvím syntaxe ${env.<VARIABLE-NAME>}.

Místo syntaxe aktualizujte své launch.vs.json soubory tak task.vs.json , aby odkazy CMakePresets.json na syntaxi CMakeSettings.json . Makra, která odkazují na starou CMakeSettings.json syntaxi, pokud CMakePresets.json se jedná o aktivní konfigurační soubor, se zastarávají pro vyřazení v budoucí verzi. Například odkazovat na výstupní adresář aktivní Konfigurace přednastavení namísto ${cmake.binaryDir} ${cmake.buildRoot}, protože CMakePresets.json používá binaryDir syntaxi.

Odstraňování potíží

Pokud věci nefungují podle očekávání, můžete vyzkoušet několik kroků pro řešení potíží.

Pokud je některý CMakePresets.json nebo CMakeUserPresets.json neplatný, Sada Visual Studio se vrátí k výchozímu chování a zobrazí pouze výchozí přednastavení konfigurace. Visual Studio IntelliSense vám může pomoct zachytit mnoho z těchto chyb JSON, ale nebude vědět, jestli odkazujete na předvolbu s inherits nesprávným názvem nebo configurePreset s nesprávným názvem.

Pokud chcete zkontrolovat, jestli jsou přednastavené soubory platné, spusťte cmake --list-presets z příkazového řádku v kořenovém adresáři projektu. (Vyžaduje se CMake 3.20 nebo novější.) Pokud některý soubor není platný, zobrazí se následující chyba:

CMake Error: Could not read presets from
C:/Users/<user>/source/repos/<project-name>: JSON parse error

Mezi další kroky pro řešení potíží patří:

  • Odstraňte mezipaměť a překonfigurujte projekt (CMake: Odstranit mezipaměť a projekt>konfigurovat <název> projektu).
  • Zavřete a znovu otevřete složku v sadě Visual Studio (Zavřít složku souboru>).
  • .vs Odstraňte složku v kořenovém adresáři projektu.

Pokud jste problém identifikovali, nejlepším způsobem, jak ho nahlásit, je vybrat tlačítko Odeslat názor v pravém horním rohu sady Visual Studio.

Povolení protokolování pro vzdálená připojení

Protokolování vzdálených připojení můžete povolit, pokud máte potíže s připojením nebo kopírováním souborů do vzdáleného systému. Další informace naleznete v tématu Protokolování pro vzdálená připojení.

Povolení AddressSanitizeru pro Windows a Linux

Visual Studio podporuje AddressSanitizer (ASAN), detektor chyb paměti modulu runtime C a C++ pro vývoj pro Windows i Linux. Možnost addressSanitizerEnabled v CMakeSettings.json enables AddressSanitizer. CMakePresets.json nepodporuje toto chování.

Místo toho povolte a zakažte AddressSanitizer nastavením požadovaného kompilátoru a příznaku linkeru sami. Nastavením odeberete chování specifické pro Visual Studio a zajistíte, aby stejný CMakePresets.json soubor mohl reprodukovat sestavení z příkazového řádku.

Přidáním následující ukázky CMakeLists.txt můžete povolit nebo zakázat AddressSanitizer pro cíl:

option(ASAN_ENABLED "Build this target with AddressSanitizer" ON)

if(ASAN_ENABLED)
  if(MSVC)
    target_compile_options(<target> PUBLIC /fsanitize=address)
  else()
    target_compile_options(<target> PUBLIC -fsanitize=address <additional-options>)
    target_link_options(<target> PUBLIC -fsanitize=address)
  endif()
endif()

Tato <additional-options> část uvádí další příznaky kompilace, například "-fno-omit-frame-pointer". Další informace o AddressSanitizer pro Linux naleznete v tématu Použití AddressSanitizer. Další informace o použití AddressSanitizer s MSVC naleznete v tématu Použití AddressSanitizer z příkazového řádku vývojáře.

Předat příznaky modulu runtime AddressSanitizer pomocí ASAN_OPTIONS pole v launch.vs.json. ASAN_OPTIONS Pokud nejsou zadány detect_leaks=0 žádné další možnosti modulu runtime, protože v sadě Visual Studio není podporována funkce LeakSanitizer.

Spuštění CMake z příkazového řádku nebo kanálu CI

Stejné soubory a CMakeUserPresets.json soubory můžete použít CMakePresets.json k vyvolání CMake v sadě Visual Studio a z příkazového řádku. Dokumentace CMake a CTest jsou nejlepšími prostředky pro vyvolání CMake a CTest s --preset. Vyžaduje se CMake verze 3.20 nebo novější.

Sourcing prostředí při sestavování pomocí generátorů příkazového řádku ve Windows

Než se CMake vyvolá při sestavování pomocí generátoru příkazového řádku, je na uživateli, aby nakonfiguroval prostředí. Pokud vytváříte sadu nástrojů Ninja a Visual C++ ve Windows, nastavte prostředí před zavolání CMake, aby se vygeneroval systém sestavení. Můžete to udělat voláním vcvarsall.bat argumentu architecture . Argument architecture určuje hostitelskou a cílovou architekturu, která se má použít. Další informace najdete v vcvarsall syntaxi. Pokud vytváříte Linux nebo Windows pomocí nástroje Visual Studio Generator, nemusíte tento krok provádět.

Je to stejný krok, který sada Visual Studio vezme za vás, když integrované vývojové prostředí vyvolá CMake. Visual Studio parsuje aktivní předvolbu konfigurace pro architekturu hostitele a cíle určenou parametrem toolset a architecture. Visual Studio pak z zdroje zadaného prostředí .vcvarsall.bat Při sestavování z příkazového řádku Windows s Ninja budete muset tento krok provést sami.

vcvarsall.bat se instaluje s nástroji Build Tools for Visual Studio. Ve výchozím nastavení vcvarsall.bat je nainstalován v C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Build. Pokud často používáte pracovní postup příkazového řádku, můžete ho přidat vcvarsall.bat PATH .

Příklad pracovního postupu příkazového řádku

Následující příkazy můžete použít ke konfiguraci a sestavení projektu CMake, který používá Ninja k cílení ARM64 s nástroji pro sestavení x64. Vyžaduje se CMake verze 3.20 nebo novější. Spusťte tyto příkazy z adresáře, ve kterém CMakePresets.json se soubor nachází:

/path/to/vcvarsall.bat x64_arm64 
cmake --list-presets=all .
cmake --preset <configurePreset-name>
cmake --build --preset <buildPreset-name> 

Ukázkový CMakePresets.json soubor

Soubor CMakePresets.json v box2d-lite obsahuje příklady konfigurace přednastavení, přednastavení sestavení a testovací přednastavení. Další informace o tomto příkladu najdete v prezentaci Úvod k CMakePresets.json. V projektu DirectXTK můžete vidět další příklad, který ukazuje mnoho cílů sestavení v jeho configurePresets části.

Další kroky

Další informace o konfiguraci a ladění projektů CMake v sadě Visual Studio: