Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Zie de officiële
CMakePresets.jsonvoor meer informatie over de indeling. - Zie en
CMakePresets.jsonMicrosoft-leverancierskaarten voor meer informatie over de microsoft-leverancierskaarten en macro-uitbreidingCMakeUserPresets.json. - Zie
CMakePresets.jsonvoor meer informatie over het gebruik in Visual Studio Code.
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:
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 :
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:
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:
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:
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.jsonentasks.vs.jsonconfiguraties. U kunt afzonderlijke omgevingsvariabelen inlaunch.vs.json- entasks.vs.jsoninstellen opnull. In het volgende voorbeeld wordt de variabeleDEBUG_LOGGING_LEVELnullingesteld oplaunch.vs.json: ."env": { "DEBUG_LOGGING_LEVEL": null }Sleutelwaarden die zijn ingesteld in de actieve vooraf ingestelde configuratie zijn beschikbaar voor verbruik in
launch.vs.jsonentasks.vs.jsonmet 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.jsonentasks.vs.jsonvia 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
.vsmap 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: