Delen via


Configureren en bouwen met CMake-voorinstellingen in Visual Studio

CMake ondersteunt twee bestanden waarmee gebruikers algemene configuratie-, build- en testopties kunnen opgeven en deze met anderen kunnen delen: CMakePresets.json en CMakeUserPresets.json. Gebruik deze bestanden om CMake te stationeren in Visual Studio en Visual Studio Code, in een CI-pijplijn (continue integratie) en vanaf de opdrachtregel.

CMakePresets.json is bedoeld voor het opslaan van projectbrede builds. CMakeUserPresets.json is bedoeld voor ontwikkelaars om hun eigen lokale builds op te slaan. Beide bestanden worden ondersteund in Visual Studio 2019 versie 16.10 of hoger.

Dit artikel bevat informatie over CMakePresets.json integratie met Visual Studio. Dit zijn nuttige koppelingen:

We raden u aan CMakePresets.json als alternatief voor CMakeSettings.json. Visual Studio leest nooit van beide CMakePresets.json en CMakeSettings.json tegelijkertijd. Zie CMakePresets.json om integratie in of uit te schakelen CMakePresets.json in Visual Studio.

Ondersteunde CMake en CMakePresets.json versies

De ondersteunde CMakePresets.json en CMakeUserPresets.json schemaversies zijn afhankelijk van uw versie van Visual Studio:

  • Visual Studio 2019 versie 16.10 en hoger ondersteunen schemaversie 2 en 3.
  • Visual Studio 2022 versie 17.4 preview 1 voegt ondersteuning toe voor schemaversie 4.
  • Visual Studio 2022 versie 17.5 preview 1 voegt ondersteuning toe voor schemaversie 5.

U kunt de versie bijwerken door het "version" veld in het hoofdobject te wijzigen. Zie de indeling voor een voorbeeld en meer informatieCMakePresets.json.

CMake versie 3.20 of hoger is vereist wanneer u CMake CMakePresets.json aanroept vanaf de opdrachtregel. Visual Studio leest echter en evalueert en evalueert CMakePresets.json en CMakeUserPresets.json zelf en roept CMake niet rechtstreeks aan met de --preset optie. CMake versie 3.20 of hoger is dus niet strikt vereist wanneer u met CMakePresets.json Visual Studio bouwt.

U wordt aangeraden ten minste CMake versie 3.14 of hoger te gebruiken.

Integratie in Visual Studio inschakelen CMakePresets.json

CMakePresets.json Integratie is niet standaard ingeschakeld in Visual Studio. U kunt deze inschakelen in Extra>Options>CMake>General:

Schermopname met Altijd CMakePresets.jsongeselecteerd.

Dit scherm is bereikt vanuit het menu van Visual Studio 2022: Extra > Options > CMake > General. De optie bevindt zich onder de sectie CMake-configuratiebestand.

Belangrijk

Sluit de map in Visual Studio en open deze opnieuw om de integratie te activeren.

In sommige oudere versies van Visual Studio heeft Tools>Options>CMake>General slechts één optie om integratie in te schakelen CMakePresets.json :

Schermopname van een oudere versie van Visual Studio. Er is een selectievakje met het label 'Use C Make Presets .json to drive CMake configure, build, and test'.

De volgende tabel geeft aan wanneer CMakePresets.json wordt gebruikt in plaats van CMakeSettings.json CMake-configuratie en build in Visual Studio 2022 en Visual Studio 2019 versie 16.10 en hoger. Als er geen configuratiebestand aanwezig is, worden standaardinstellingen geconfigureerd.

In de tabel betekent 'Extra>opties ingeschakeld': Gebruik CMakePresets.json om CMake te configureren, bouwen en testen is geselecteerd in Extra>Opties>CMake>General.

Configuratiebestanden Extra-opties > uitgeschakeld Extra-opties > ingeschakeld
Er is geen configuratiebestand aanwezig CMakeSettings.json CMakePresets.json
CMakeSettings.json aanwezig CMakeSettings.json CMakePresets.json
CMakePresets.json aanwezig CMakePresets.json CMakePresets.json
Beide configuratiebestanden aanwezig CMakePresets.json CMakePresets.json

Automatische configuratie- en cachemeldingen wijzigen

Visual Studio wordt standaard automatisch aangeroepen configure telkens wanneer het actieve doelsysteem wordt geactiveerd of vooraf ingestelde wijzigingen configureren. U kunt dit gedrag wijzigen door de stap Nooit uitvoeren automatisch uit te voeren in Extra>Opties>CMake>General te selecteren. U kunt ook alle CMake-cachemeldingen (gouden balken) uitschakelen door CMake-cachemeldingen weergeven te wissen.

Standaardinstellingen configureren

Als er geen CMakePresets.json of CMakeUserPresets.json bestand bestaat of als CMakePresets.jsonCMakeUserPresets.json het ongeldig is, valt Visual Studio terug op de volgende standaardinstellingen configureren:

Windows-voorbeeld

{
  "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" ]
    }
  }
},

Linux-voorbeeld

{
  "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}"
   }
  }
}

Als u probeert een CMakePresets.json bestand te openen of te wijzigen dat niet bestaat, maakt Visual Studio automatisch een CMakePresets.json bestand met de standaardinstellingen configureren in de hoofdmap van uw project.

Configureren en bouwen

Op de Visual Studio-werkbalk bevinden zich vervolgkeuzelijsten voor de doelsystemen, vooraf ingestelde instellingen configureren en voorinstellingen bouwen wanneer CMakePresets.json integratie is ingeschakeld:

Schermopname van de vervolgkeuzelijsten voor het doelsysteem ingesteld op Lokale machine, configuratie ingesteld op Windows-arm64 en build-voorinstelling ingesteld op standaard.

Een doelsysteem selecteren

De vervolgkeuzelijst aan de linkerkant geeft het actieve doelsysteem aan. Het is het systeem waarop CMake wordt aangeroepen om het project te configureren en te bouwen. Deze vervolgkeuzelijst bevat uw lokale computer, alle SSH-verbindingen in Verbindingsbeheer op hostnaam en alle Windows-subsysteem voor Linux-installaties (WSL) die Visual Studio kan vinden:

Schermopname van de vervolgkeuzelijst Doelsysteem

De vervolgkeuzelijst bevat verschillende vermeldingen, waaronder Local Machine, een IP-adres 192.168.0.5, WSL: ubuntu2004, WSL: debian en Manage Connections.

In het voorgaande voorbeeld:

  • 192.168.0.5 is een extern Linux-systeem dat is toegevoegd aan Connection Manager.
  • ubuntu2004 en debian zijn WSL-installaties.

Selecteer Verbindingen beheren om Verbindingsbeheer te openen.

Een vooraf ingestelde configuratie selecteren

De vervolgkeuzelijst in het midden geeft de actieve vooraf ingestelde configuratie aan. Dit is de configurePreset waarde die wordt gebruikt wanneer CMake wordt aangeroepen om het projectbuildsysteem te genereren. Deze vervolgkeuzelijst bevat de samenvoeging van niet-verborgen voorinstellingen configureren die zijn gedefinieerd in CMakePresets.json en CMakeUserPresets.json.

Visual Studio gebruikt de waarde van hostOS de leveranciertoewijzing microsoft Visual Studio-instellingen om vooraf ingestelde instellingen te verbergen die niet van toepassing zijn op het actieve doelsysteem. Zie de vermelding in hostOS de tabel onder de leverancierskaart van Visual Studio Settings voor meer informatie.

Selecteer Configuraties beheren om het CMakePresets.json bestand in de hoofdmap van het project te openen. CMakePresets.json wordt gemaakt als deze nog niet bestaat.

Een vooraf ingestelde build selecteren

De vervolgkeuzelijst aan de rechterkant geeft de actieve build-voorinstelling aan. Dit is de buildPreset waarde die wordt gebruikt wanneer CMake wordt aangeroepen om het project te bouwen. Deze vervolgkeuzelijst bevat de samenvoeging van niet-verborgen build-voorinstellingen die zijn gedefinieerd in CMakePresets.json en CMakeUserPresets.json.

Alle build-voorinstellingen zijn vereist om een gekoppelde waarde op configurePreset te geven. Visual Studio verbergt build-voorinstellingen die niet van toepassing zijn op de actieve vooraf ingestelde configuratie. Zie de lijst met build-voorinstellingen voor meer informatie.

Als er geen build-voorinstellingen zijn gekoppeld aan de actieve vooraf ingestelde configuratie, wordt in Visual Studio de standaard build-voorinstelling vermeld. De standaardinstelling Build is gelijk aan het doorgeven cmake --build van geen andere argumenten vanaf de opdrachtregel.

Configureren

Visual Studio probeert het project automatisch te configureren wanneer wordt gedetecteerd dat de CMake-cache verouderd is. Als u de configuratie handmatig wilt aanroepen, selecteert u projectnaam><configureren > in het hoofdmenu. Dit is hetzelfde als het uitvoeren cmake --preset <configurePreset> vanaf de opdrachtregel, waarbij <configurePreset> de naam van de actieve vooraf ingestelde configuratie is.

Zie Automatische configuratie- en cachemeldingen om het automatisch genereren van caches uit te schakelen.

Bouwen

Als u het hele project wilt bouwen, selecteert u Build>All in het hoofdmenu. Het is hetzelfde als het uitvoeren cmake --build --preset <buildPreset> vanaf de opdrachtregel, waarbij <buildPreset> de naam van de actieve build-voorinstelling is.

Als u één doel wilt maken, schakelt u over naar de weergave CMake-doelen in Solution Explorer. Klik vervolgens met de rechtermuisknop op een doel en selecteer Build in het snelmenu.

Opmerking

Visual Studio 2019 biedt geen ondersteuning voor de buildPresets.targets optie om een subset van doelen te bouwen die zijn opgegeven in CMakePresets.json.

CTest uitvoeren

CMakePresets.json ondersteunt twee menuopties in Visual Studio 2019:

  • Test>Voer CTests uit voor <projectnaam> roept CTest aan en voert alle tests uit die zijn gekoppeld aan de actieve vooraf ingestelde configuratie en build-voorinstelling, zonder andere argumenten die zijn doorgegeven aan CTest.
  • Test>Testvoorinstelling uitvoeren voor <configurePreset> wordt uitgebreid om alle testvoorinstellingen weer te geven die zijn gekoppeld aan de actieve vooraf ingestelde configuratie. Het selecteren van één testvoorinstelling is hetzelfde als het uitvoeren ctest --preset <testPreset> vanaf de opdrachtregel, waarbij <testPreset> de naam van de geselecteerde testvoorinstelling is. Deze optie is niet beschikbaar als er geen testvoorinstellingen zijn gedefinieerd voor de actieve vooraf ingestelde configuratie.

In Visual Studio 2019 is Test Explorer niet geïntegreerd met CMakePresets.json.

Nieuwe voorinstellingen toevoegen

In Visual Studio 2019 worden alle opdrachten en vooraf ingestelde sjablonen gewijzigd CMakePresets.json. U kunt nieuwe voorinstellingen op gebruikersniveau toevoegen door rechtstreeks te bewerken CMakeUserPresets.json.

Gebruik een slash (/) voor paden in CMakePresets.json en CMakeUserPresets.json.

Nieuwe vooraf ingestelde instellingen voor configureren toevoegen

Als u een nieuwe vooraf ingestelde configuratie wilt toevoegen aan CMakePresets.json, klikt u in Solution Explorer met de rechtermuisknop CMakePresets.json in de mapweergave en selecteert u Configuratie toevoegen in het snelmenu. Het dialoogvenster voor het selecteren van een vooraf ingestelde sjabloon wordt weergegeven:

Schermopname van het dialoogvenster Configure Configure Preset toevoegen aan het dialoogvenster JSON-bestand. Het bevat vermeldingen zoals Linux-foutopsporing, macOS-foutopsporing, x64-foutopsporing, enzovoort.

Selecteer de Sjabloon voor foutopsporing van Windows x64 die u wilt configureren op Windows-systemen. Selecteer de Sjabloon voor foutopsporing in Linux die u wilt configureren op WSL- en externe Linux-systemen. Zie CMakePresets.json voor meer informatie over bewerken.

De geselecteerde sjabloon wordt toegevoegd als CMakePresets.json deze bestaat. Anders wordt de sjabloon gekopieerd naar een nieuw CMakePresets.json bestand.

Nieuwe build-voorinstellingen en testvoorinstellingen toevoegen

Visual Studio 2019 biedt geen sjablonen voor nieuwe build-voorinstellingen en testvoorinstellingen. U kunt build-voorinstellingen en testvoorinstellingen toevoegen door direct te bewerken CMakePresets.json. Zie de lijst met build-voorinstellingen, de lijst met testvoorinstellingen of een voorbeeldbestand CMakePresets.jsonvoor meer informatie.

Voorinstellingen bewerken

De officiële CMake-documentatie is de beste resource voor het bewerken van vooraf ingestelde configuraties, build-voorinstellingen en testvoorinstellingen. De volgende informatie is een subset van de CMake-documentatie die met name relevant is voor Visual Studio-ontwikkelaars.

Uw compilers selecteren

U kunt C- en C++-compilers instellen met behulp van environment.CC en environment.CXX in een vooraf ingestelde configuratie. Zie voor meer informatie CC/CXX.

Gebruik de volgende voorbeelden om te bouwen met cl.exe en clang-cl.exe vanuit Visual Studio. De C++ Clang-hulpprogramma's voor Windows-onderdelen moeten worden geïnstalleerd om mee clang-clte bouwen.

Bouwen met cl.exe:

"environment": {
  "CC": "cl",
  "CXX": "cl"
},
"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},

Bouwen met clang:

"environment": {
  "CC": "clang-cl",
  "CXX": "clang-cl"
},
"cacheVariables": {
  "CMAKE_BUILD_TYPE": "Debug",
  "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
},

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

Als u een van Visual Studio 16 2019 beide of Visual Studio 17 2022 als generator gebruikt, kunt u de toolset vooraf ingestelde configuratie gebruiken om de ClangCL toolset op te geven:

"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"
  }
}

Zie de CMake-documentatie voor meer informatie over generatoren die de toolset specificatie CMAKE_GENERATOR_TOOLSET ondersteunen.

Belangrijk

In Visual Studio 2019 moet u expliciet een Clang IntelliSense-modus opgeven wanneer u met clang of clang-cl.

Als u deze builds buiten Visual Studio wilt reproduceren, raadpleegt u CMake uitvoeren vanaf de opdrachtregel of een CI-pijplijn.

Als u wilt bouwen op Linux of zonder de Microsoft C++ (MSVC) Build Tools, geeft u de naam op van een compiler op uw PATH exemplaar of een omgevingsvariabele die het volledige pad van een compiler evalueert. Volledige paden worden afgeraden, zodat het bestand deelbaar kan blijven. Een voorinstelling die wordt gebouwd met GCC versie 8 kan er als volgt uitzien:

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

U kunt compilers ook instellen met een CMake-hulpprogrammaketenbestand. Hulpprogrammaketenbestanden kunnen worden ingesteld met cacheVariables.CMAKE_TOOLCHAIN_FILE, wat gelijk is aan het doorgeven -D CMAKE_TOOLCHAIN_FILE=<value> aan CMake vanaf de opdrachtregel. Een CMake-toolchainbestand wordt meestal gebruikt voor kruiscompilatie. Zie CMake-hulpprogrammaketenbestanden voor meer informatie over het ontwerpen van CMake-hulpprogrammaketens.

Selecteer uw generator

Met de vooraf ingestelde sjablonen voor Windows en Linux worden Ninja als standaardgenerator opgegeven. Andere veelgebruikte generatoren zijn de Visual Studio Generators in Windows en Unix Makefiles op Linux en macOS. U kunt een nieuwe generator opgeven met de generator optie in een vooraf ingestelde configuratie. Het komt overeen met het doorgeven -G aan CMake vanaf de opdrachtregel.

Instellen en architecture.strategytoolset.strategy instellen set wanneer u bouwt met een Visual Studio Generator. Zie CMake-generatoren voor meer informatie.

Selecteer uw configuratietype

U kunt het configuratietype (Debug of Release) voor enkelvoudige configuratiegeneratoren instellen met behulp van cacheVariables.CMAKE_BUILD_TYPE. Het komt overeen met het doorgeven -D CMAKE_BUILD_TYPE=<value> aan CMake vanaf de opdrachtregel. Zie CMAKE_BUILD_TYPE voor meer informatie.

Selecteer uw doel- en hostarchitectuur bij het bouwen met de Microsoft C++ Build Tools

U kunt de doelarchitectuur (x64, Win32, ARM64 of ARM) instellen met behulp van architecture.value. Het komt overeen met het doorgeven -A aan CMake vanaf de opdrachtregel. Zie Platformselectie voor meer informatie.

Opmerking

Momenteel verwachten Visual Studio Generators de Win32-syntaxis en opdrachtregelgeneratoren (zoals Ninja) de x86-syntaxis wanneer u bouwt voor x86.

U kunt de hostarchitectuur (x64 of x86) en toolset instellen met behulp van toolset.value. Het komt overeen met het doorgeven -T aan CMake vanaf de opdrachtregel. Zie Toolset Selection voor meer informatie.

De architecture.strategy waarden en toolset.strategy waarden vertellen CMake hoe de velden voor architectuur en toolset moeten worden verwerkt. set betekent dat CMake de respectieve waarde instelt en external dat CMake de respectieve waarde niet instelt.

U wordt aangeraden met IDE-generatoren, zoals de Visual Studio Generator, te gebruiken set . Gebruik external deze met opdrachtregelgeneratoren zoals Ninja. Met deze waarden kunnen leveranciers zoals Visual Studio de vereiste omgeving leveren voordat CMake wordt aangeroepen. Zie de lijst met vooraf ingestelde instellingen voor meer informatie over de velden architectuur en hulpmiddelensets.

Als u geen bron van een omgeving wilt maken, kunt u instellen architecture.strategyexternal op en architecture.value op unspecified. Het kan handig zijn om om een van deze redenen geen omgeving te maken:

  • U gebruikt een andere toolset dan MSVC.
  • U gebruikt een aangepaste hulpprogrammaketen, zoals in ingesloten scenario's.
  • U hebt geen specifieke omgeving nodig om te bouwen.

Zie voor een volledige lijst met IDE-generatoren die ondersteuning bieden voor het architectuurveld CMAKE_GENERATOR_PLATFORM. Zie voor een volledige lijst met IDE-generatoren die ondersteuning bieden voor het veld toolset CMAKE_GENERATOR_TOOLSET.

Gebruik de volgende voorbeelden om ARM64 te targeten met de Ninja-generator of om Win32 (x86) te targeten met de Visual Studio 16 2019-generator:

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

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

Omgevingsvariabelen instellen en ernaar verwijzen

U kunt omgevingsvariabelen instellen met behulp van de omgevingstoewijzing. Omgevingsvariabelen worden overgenomen via het inherits veld, maar u kunt ze desgewenst overschrijven.

Een vooraf ingestelde omgeving is de samenvoeging van zijn eigen omgeving en de omgeving van alle ouders. Als meerdere inherits voorinstellingen conflicterende waarden bieden voor dezelfde variabele, heeft de eerdere voorinstelling in de lijst de inherits voorkeur. U kunt het instellen van een variabele die is overgenomen van een andere voorinstelling ongedaan maken door deze in te stellen op null.

Omgevingsvariabelen die zijn ingesteld in een voorinstelling configureren, stromen ook automatisch door naar de bijbehorende build-voorinstellingen en testvoorinstellingen, tenzij inheritConfigureEnvironment ingesteld op false. Zie de lijst met vooraf ingestelde instellingen configureren voor meer informatie.

U kunt verwijzen naar omgevingsvariabelen met behulp van de $env{<variable-name>} en $penv{<variable-name>} syntaxis. Zie Macro-uitbreiding voor meer informatie.

IntelliSense configureren voor een cross-compiler

Visual Studio maakt standaard gebruik van de IntelliSense-modus die overeenkomt met uw opgegeven toolset en doelarchitectuur. Als u kruislings compileert, moet u mogelijk handmatig de juiste IntelliSense-modus opgeven met behulp van de intelliSenseMode optie in de leverancierkaart van Visual Studio-instellingen. Zie de vermelding in intelliSenseMode de tabel onder de leverancierskaart van Visual Studio Settings voor meer informatie.

Configureren en bouwen op een extern systeem of het Windows-subsysteem voor Linux

Met CMakePresets.json ondersteuning in Visual Studio kunt u eenvoudig uw project configureren en bouwen op Windows-, WSL- en externe systemen. De stappen voor het configureren en bouwen van uw project in Windows, een extern systeem of WSL zijn hetzelfde. Een aantal gedragingen zijn echter specifiek voor externe ontwikkeling.

${sourceDir} gedrag in scenario's voor extern kopiëren

In lokale scenario's (inclusief WSL1) ${sourceDir} wordt het pad geëvalueerd naar de projectbronmap die is geopend in Visual Studio. In scenario's ${sourceDir} voor externe kopieerbewerkingen wordt het pad naar de projectbronmap op het doelsysteem geëvalueerd en niet naar de projectbronmap op de lokale computer.

De waarde van de leverancierkaart van sourceDir Visual Studio Remote Settings bepaalt de projectbronmap op het doelsysteem (standaard ingesteld $env{HOME}/.vs/$ms{projectDirName}op). Zie de vermelding in sourceDir de tabel onder de leverancierskaart van Visual Studio Settings voor meer informatie.

Lokale map voor externe uitvoer

Scenario's voor extern kopiëren vereisen dat een lokale map een aantal externe bestanden, zoals CMake File API-antwoordbestanden, of buildbestanden kopieert als copyBuildOutput in de leverancierkaart van Visual Studio Remote Settings is ingesteld op true. Deze bestanden worden automatisch gekopieerd naar <local-source-directory>/out/<remote-connection-ID>/build/${presetName}.

Dezelfde vooraf ingestelde configuratie configureren in Windows en WSL1 aanroepen

Er wordt een fout weergegeven als u dezelfde vooraf ingestelde instellingen voor Windows en WSL1 probeert te gebruiken. Windows en WSL1 gebruiken allebei het Windows-bestandssysteem, dus CMake probeert dezelfde uitvoermap (binaryDir) te gebruiken voor zowel de Windows- als WSL1-buildstructuren.

Als u dezelfde vooraf ingestelde configuratie wilt gebruiken met zowel Windows als de WSL1-toolset, maakt u een tweede vooraf ingestelde instelling configureren die van de oorspronkelijke voorinstelling overkomt en een nieuwe binaryDir waarde opgeeft. In het volgende voorbeeld windows-preset kan worden gebruikt in Windows en base-preset kan worden gebruikt op WSL1:

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

Opmerking

In Visual Studio 2019 wordt alleen de WSL1-toolset ondersteund. U ziet dit gedrag telkens wanneer u aanroept configure op zowel Windows als WSL.

VCPKG-integratie inschakelen

Vcpkg helpt u bij het beheren van C- en C++-bibliotheken in Windows, Linux en macOS. Er moet een vcpkg-toolchainbestand (vcpkg.cmake) worden doorgegeven aan CMake om vcpkg-integratie in te schakelen. Zie de vcpkg-documentatie voor meer informatie.

Visual Studio geeft uw vcpkg-toolchainbestand niet meer automatisch door aan CMake wanneer CMakePresets.json integratie is ingeschakeld. Deze wijziging elimineert visual Studio-specifiek gedrag en zorgt ervoor dat u de build vanaf de opdrachtregel kunt reproduceren.

Stel in plaats daarvan het pad vcpkg.cmake in op met behulp van de VCPKG_ROOT omgevingsvariabele in CMakePresets.json:

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

VCPKG_ROOT moet worden ingesteld op de hoofdmap van uw vcpkg-installatie. Zie vcpkg-omgevingsvariabelen voor meer informatie.

Als u al een CMake-hulpprogrammaketenbestand gebruikt en vcpkg-integratie wilt inschakelen, raadpleegt u Meerdere hulpprogrammaketenbestanden gebruiken. Volg deze instructies voor het gebruik van een extern toolchainbestand met een project met behulp van vcpkg.

Variabele vervanging in launch.vs.json en tasks.vs.json

CMakePresets.json ondersteunt het vervangen van variabelen in launch.vs.json en tasks.vs.json. Hier volgen enkele overwegingen:

  • Omgevingsvariabelen die zijn ingesteld in de actieve vooraf ingestelde configuratie, stromen automatisch door naar launch.vs.json en tasks.vs.json configuraties. U kunt afzonderlijke omgevingsvariabelen in launch.vs.json - en tasks.vs.json instellen op null. In het volgende voorbeeld wordt de variabele DEBUG_LOGGING_LEVELnull ingesteld op launch.vs.json: . "env": { "DEBUG_LOGGING_LEVEL": null }

  • Sleutelwaarden die zijn ingesteld in de actieve vooraf ingestelde configuratie zijn beschikbaar voor verbruik in launch.vs.json en tasks.vs.json met de syntaxis ${cmake.<KEY-NAME>}. Gebruik bijvoorbeeld ${cmake.binaryDir} om te verwijzen naar de uitvoermap van de actieve vooraf ingestelde configuratie.

  • Afzonderlijke omgevingsvariabelen die zijn ingesteld in de omgevingskaart van de actieve vooraf ingestelde configuratie, zijn beschikbaar voor gebruik in launch.vs.json en tasks.vs.json via de syntaxis ${env.<VARIABLE-NAME>}.

Werk uw launch.vs.json en task.vs.json bestanden bij om te verwijzen naar CMakePresets.json syntaxis in plaats van CMakeSettings.json syntaxis. Macro's die verwijzen naar de oude CMakeSettings.json syntaxis wanneer CMakePresets.json het actieve configuratiebestand is, worden in een toekomstige release afgeschaft. Verwijs bijvoorbeeld naar de uitvoermap van de actieve vooraf ingestelde configuratie met ${cmake.binaryDir} in plaats van ${cmake.buildRoot}, omdat CMakePresets.json de binaryDir syntaxis wordt gebruikt.

Problemen oplossen

Als de dingen niet werken zoals verwacht, kunt u een paar stappen voor probleemoplossing proberen.

Als een van beide CMakePresets.json of CMakeUserPresets.json ongeldig is, valt Visual Studio terug op het standaardgedrag en worden alleen de standaardinstellingen voor configureren weergegeven. Visual Studio IntelliSense kan u helpen bij het ondervangen van veel van deze JSON-fouten, maar het weet niet of u verwijst naar een voorinstelling met inherits of configurePreset met de verkeerde naam.

Als u wilt controleren of uw vooraf ingestelde bestanden geldig zijn, voert u deze uit cmake --list-presets vanaf de opdrachtregel in de hoofdmap van uw projectmap. (CMake 3.20 of hoger is vereist.) Als een van beide bestanden ongeldig is, ziet u de volgende fout:

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

Andere stappen voor probleemoplossing zijn:

  • Verwijder de cache en configureer het project opnieuw (CMake: Cache verwijderen en projectnaam>configureren<>).
  • Sluit de map en open deze opnieuw in Visual Studio (map bestand>sluiten).
  • Verwijder de .vs map in de hoofdmap van uw project.

Als u een probleem hebt geïdentificeerd, kunt u het beste rapporteren door in de rechterbovenhoek van Visual Studio de knop Feedback verzenden te selecteren.

Logboekregistratie inschakelen voor externe verbindingen

U kunt logboekregistratie inschakelen voor externe verbindingen als u problemen ondervindt bij het verbinden of kopiëren van bestanden naar een extern systeem. Zie Logboekregistratie voor externe verbindingen voor meer informatie.

AddressSanitizer inschakelen voor Windows en Linux

Visual Studio ondersteunt AddressSanitizer (ASAN), een C- en C++ runtime-geheugenfoutdetector voor windows- en Linux-ontwikkeling. De addressSanitizerEnabled optie in CMakeSettings.json schakelt AddressSanitizer in. CMakePresets.json biedt geen ondersteuning voor dit gedrag.

Schakel in plaats daarvan AddressSanitizer in en uit door de vereiste compiler- en linkervlagken zelf in te stellen. Als u deze instelt, wordt het gedrag van Visual Studio verwijderd en wordt ervoor gezorgd dat hetzelfde CMakePresets.json bestand uw build vanaf de opdrachtregel kan reproduceren.

U kunt het volgende voorbeeld toevoegen om AddressSanitizer in of uit te CMakeLists.txt schakelen voor een doel:

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()

Het <additional-options> onderdeel bevat andere compilatievlagmen, zoals "-fno-omit-frame-pointer". Zie AddressSanitizer gebruiken voor Meer informatie over AddressSanitizer voor Linux. Zie AddressSanitizer gebruiken vanuit een opdrachtprompt voor ontwikkelaars voor meer informatie over het gebruik van AddressSanitizer met MSVC.

Runtimevlagmen doorgeven aan AddressSanitizer met behulp van het ASAN_OPTIONS veld in launch.vs.json. ASAN_OPTIONS is standaard ingesteld detect_leaks=0 op wanneer er geen andere runtime-opties worden opgegeven, omdat LeakSanitizer niet wordt ondersteund in Visual Studio.

CMake uitvoeren vanaf de opdrachtregel of een CI-pijplijn

U kunt dezelfde CMakePresets.json en CMakeUserPresets.json bestanden gebruiken om CMake aan te roepen in Visual Studio en vanaf de opdrachtregel. De CMake - en CTest-documentatie zijn de beste bronnen voor het aanroepen van CMake en CTest met --preset. CMake versie 3.20 of hoger is vereist.

De omgevingbronnen bij het bouwen met opdrachtregelgeneratoren in Windows

Het is aan de gebruiker om de omgeving te configureren voordat CMake wordt aangeroepen bij het bouwen met een opdrachtregelgenerator. Als u bouwt met Ninja en de Microsoft C++ Build Tools in Windows, stelt u de omgeving in voordat CMake wordt aangeroepen om het buildsysteem te genereren. U kunt dit doen door het vcvarsall.bat argument aan te roepenarchitecture. Het architecture argument geeft de host- en doelarchitectuur op die moet worden gebruikt. Zie vcvarsall de syntaxis voor meer informatie. Als u bouwt op Linux of in Windows met een Visual Studio Generator, hoeft u deze stap niet uit te voeren.

Het is dezelfde stap die Visual Studio voor u uitvoert wanneer de IDE CMake aanroept. Visual Studio parseert de actieve vooraf ingestelde configuratie voor de host- en doelarchitectuur die is opgegeven door toolset en architecture. Visual Studio gebruikt vervolgens de opgegeven omgeving vanuit vcvarsall.bat. Wanneer u bouwt vanaf de Windows-opdrachtregel met Ninja, moet u deze stap zelf uitvoeren.

vcvarsall.bat is geïnstalleerd met de buildhulpprogramma's voor Visual Studio. vcvarsall.bat Standaard is geïnstalleerd in C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Build. U kunt toevoegen vcvarsall.bat als PATH u de opdrachtregelwerkstroom vaak gebruikt.

Voorbeeld van opdrachtregelwerkstroom

U kunt de volgende opdrachten gebruiken om een CMake-project te configureren en te bouwen dat ninja gebruikt om arm64 te targeten met x64-buildhulpprogramma's. CMake versie 3.20 of hoger is vereist. Voer deze opdrachten uit vanuit de map waar het CMakePresets.json bestand zich bevindt:

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

Voorbeeldbestand CMakePresets.json

Het CMakePresets.json bestand in box2d-lite bevat voorbeelden van vooraf ingestelde instellingen configureren, build-voorinstellingen en testvoorinstellingen. Zie de presentatie Een inleiding tot CMakePresets.jsonvoor meer informatie over dit voorbeeld. U kunt nog een voorbeeld zien in het DirectXTK-project , waarin veel builddoelen in de sectie worden configurePresets weergegeven.

Volgende stappen

Meer informatie over het configureren en opsporen van fouten in CMake-projecten in Visual Studio: