Delen via


CMakePresets.json en CMakeUserPresets.json Kaarten van Microsoft-leveranciers

CMake ondersteunt twee bestanden en CMakePresets.jsonCMakeUserPresets.json, waarmee gebruikers algemene configuratie-, build- en testopties kunnen opgeven en deze met anderen kunnen delen.

CMakePresets.json en CMakeUserPresets.json kunnen worden gebruikt om CMake te gebruiken in Visual Studio, in Visual Studio Code, in een Continuous Integration (CI)-pijplijn en vanaf de commandoregel.

CMakePresets.json is bedoeld om projectbrede builds op te slaan en CMakeUserPresets.json is bedoeld voor ontwikkelaars om hun eigen lokale builds op te slaan. Het schema voor beide bestanden is identiek.

CMakePresets.json en CMakeUserPresets.json ondersteunen leverancierskaarten om leverancierspecifieke informatie op te slaan. Microsoft onderhoudt twee leverancierskaarten met opties die specifiek zijn voor Visual Studio en Visual Studio Code. Hier documenteert u twee microsoft-leverancierskaarten en leveranciersmacro's. Zie de officiële CMake-documentatie voor meer informatie over de rest van het schema. Het bevat informatie over het configureren van voorinstellingen, build voorinstellingen en testvoorinstellingen.

Zie CMakePresets.json voor meer informatie over het gebruik in Visual Studio

Zie CMakePresets.json voor meer informatie over het gebruik in Visual Studio Code

Kaart van de leverancier van Visual Studio-instellingen

Eén leverancierkaart met de URI microsoft.com/VisualStudioSettings/CMake/<version> van de leverancier is toegestaan per vooraf ingestelde configuratie en bevat opties die specifiek zijn voor CMake-integratie in Visual Studio en Visual Studio Code. Alle opties in de leverancierskaart zijn van toepassing op Visual Studio. Opties die van toepassing zijn op Visual Studio en Visual Studio Code, zijn expliciet gemarkeerd.

Alle instellingen in de Visual Studio-instellingenverkoperkaart zijn optioneel en worden overgenomen van voorgeconfigureerde instellingen zoals gespecificeerd door de inherits sleutel. Alleen opties die zijn gewijzigd, worden naar het bestand geschreven. De leverancierskaart van Visual Studio-instellingen wordt ondersteund door zowel CMakePresets.json als CMakeUserPresets.json.

De opties in de instellingen van de Visual Studio-leverancier zijn niet van invloed op de opbouw van de CMake- of CTest-commandoregel. Het is dus hetzelfde CMakePresets.json bestand dat kan worden gebruikt om CMake te besturen met Visual Studio, Visual Studio Code en vanaf de opdrachtregel. De uitzonderingen zijn de cacheRoot en cmakeGenerateCommand opties. Deze opties zijn specifiek voor het scenario Bestaande cache openen in Visual Studio en kunnen niet worden gereproduceerd vanaf de opdrachtregel.

Configuratie Beschrijving
hostOS Een matrix van ondersteunde besturingssystemen (OS). Geaccepteerde waarden zijn Windows, Linuxen macOS.

De waarde van hostOS wordt gebruikt door Visual Studio en Visual Studio Code om vooraf ingestelde instellingen te verbergen die niet van toepassing zijn op het besturingssysteem van het doelsysteem en om een betere gebruikerservaring te bieden.

Als hostOS niet wordt gespecificeerd, worden in Visual Studio en Visual Studio Code altijd alle voorkeursinstellingen voor selectie weergegeven. Dit veld kan ook een tekenreeks zijn, die gelijk is aan een matrix die één tekenreeks bevat

Deze optie wordt ondersteund door Visual Studio en Visual Studio Code.
intelliSenseMode Hiermee geeft u de modus op die wordt gebruikt voor het berekenen van IntelliSense-gegevens in Visual Studio met de indeling <target>-<toolset>-<arch>.

Geaccepteerde waarden:

android-clang-arm
android-clang-arm64
android-clang-x6
android-clang-x86
ios-clang-ar
ios-clang-arm64
ios-clang-x6
ios-clang-x86
linux-gcc-arm
linux-gcc-x64
linux-gcc-x86
windows-clang-arm
windows-clang-arm64
windows-clang-x64
windows-clang-x86
windows-msvc-arm
windows-msvc-arm64
windows-msvc-x64
windows-msvc-x86

Als intelliSenseMode niet is opgegeven, gebruikt Visual Studio de IntelliSense-modus die overeenkomt met de opgegeven compilers en doelarchitectuur. intelliSenseMode wordt vaak gebruikt om verbeterde IntelliSense te bieden voor kruiscompilatie.

In Visual Studio 2019 moet u expliciet een clang IntelliSense-modus opgeven bij het bouwen met clang of clang-cl.
intelliSenseOptions Een kaart met extra IntelliSense-configuratieopties.

useCompilerDefaults: Een bool die aangeeft of de standaard definities en include-paden van de compiler voor IntelliSense worden gebruikt. Dit moet alleen zijn false als de compilers die in gebruik zijn geen ondersteuning bieden voor gCC-argumenten. Standaardwaarde is true.

additionalCompilerArgs: Een matrix met extra opties voor het beheren van IntelliSense in Visual Studio. Deze optie ondersteunt macro-uitbreiding.
enableMicrosoftCodeAnalysis Een bool waarmee Microsoft-codeanalyse in Visual Studio wordt ingeschakeld bij het bouwen met cl of clang-cl. Standaardwaarde is false.
codeAnalysisRuleset Hiermee geeft u de regelset op die moet worden gebruikt bij het uitvoeren van Microsoft-codeanalyse in Visual Studio. U kunt een pad naar een regelsetbestand of de naam van een regelsetbestand gebruiken dat is geïnstalleerd met Visual Studio. Deze optie ondersteunt macro-uitbreiding.
disableExternalAnalysis Een bool die aangeeft of codeanalyse moet worden uitgevoerd op externe headers in Visual Studio.
codeAnalysisExternalRuleset Hiermee geeft u de regelset op die moet worden gebruikt bij het uitvoeren van Microsoft-codeanalyse op externe headers in Visual Studio. U kunt een pad naar een regelsetbestand of de naam van een regelsetbestand gebruiken dat is geïnstalleerd met Visual Studio. Deze optie ondersteunt macro-uitbreiding.
enableClangTidyCodeAnalysis Een bool die clang-tidy-codeanalyse in Visual Studio mogelijk maakt bij het bouwen met clang-cl. Standaardwaarde is false.
clangTidyChecks Een door komma's gescheiden lijst met waarschuwingen die worden doorgegeven aan clang-tidy bij het uitvoeren van clang-tidy-codeanalyse in Visual Studio. Jokertekens zijn toegestaan en het - voorvoegsel verwijdert controles.
cacheRoot Hiermee wordt het pad naar een CMake-cache opgegeven. Deze map moet een bestaand CMakeCache.txt bestand bevatten. Deze sleutel wordt alleen ondersteund door het scenario Bestaande cache openen in Visual Studio. Deze optie ondersteunt macro-uitbreiding.
cmakeGenerateCommand Een opdrachtregelprogramma (gespecificeerd als een opdrachtregelprogramma en argumenten, bijvoorbeeld gencache.bat debug) om de CMake-cache te genereren. Deze opdracht wordt uitgevoerd in de shell met behulp van de opgegeven omgeving van de voorinstelling wanneer CMake-configuratie wordt aangeroepen. Deze sleutel wordt alleen ondersteund door het scenario Bestaande cache openen in Visual Studio. Deze optie ondersteunt macro-uitbreiding.

Kaart van leveranciers voor Externe instellingen van Visual Studio

Eén leverancierkaart met de URI microsoft.com/VisualStudioRemoteSettings/CMake/<version> van de leverancier is toegestaan per vooraf ingestelde configuratie en bevat opties die specifiek zijn voor externe ontwikkeling in Visual Studio. Externe ontwikkeling betekent dat u CMake aanroept op een externe SSH-verbinding of WSL. Geen van de opties in de leverancierkaart van Visual Studio Remote Settings is van toepassing op Visual Studio Code.

Alle instellingen in de leveranciertoewijzing van externe instellingen van Visual Studio zijn optioneel en overgenomen van de Configureer Presets gespecificeerd door het inherits trefwoord. Alleen opties die zijn gewijzigd, worden naar het bestand geschreven. De leverancierskaart voor Externe instellingen van Visual Studio wordt ondersteund door zowel CMakePresets.json als CMakeUserPresets.json.

De opties in de instellingen van de Visual Studio-leverancier zijn niet van invloed op de opbouw van de CMake- of CTest-commandoregel. Het is dus hetzelfde CMakePresets.json bestand dat kan worden gebruikt om CMake te besturen met Visual Studio, Visual Studio Code en vanaf de opdrachtregel.

Veel van de opties in de leverancierskaart van Visual Studio Remote Settings worden genegeerd bij het richten op WSL1. Dit komt doordat de WSL1-toolset alle opdrachten lokaal uitvoert en afhankelijk is van Windows-stations die zijn gekoppeld onder de /mnt map om toegang te krijgen tot lokale bronbestanden van WSL1. Er is geen bronbestandskopie vereist. Opties die worden genegeerd wanneer WSL1 als doel wordt gebruikt, zijn expliciet gemarkeerd.

Configuratie Beschrijving
sourceDir Pad naar de map op het externe systeem waar het project wordt gekopieerd. Standaardwaarde is $env{HOME}/.vs/$ms{projectDirName}. Deze optie ondersteunt macro-uitbreiding.

In scenario's voor externe kopieën evalueert de macro ${sourceDir} naar de projectbronmap op het externe systeem en niet naar de projectbronmap op de Windows-computer. Scenario's voor externe kopieerbewerkingen zijn onder andere gericht op een externe SSH-verbinding. In deze gevallen wordt de bronmap van het project op het externe systeem bepaald door de waarde van sourceDir in de Visual Studio Remote Settings map. Deze optie wordt genegeerd wanneer u zich richt op WSL1.
copySources Als trueVisual Studio bronnen van Windows naar het externe systeem kopieert. Stel deze false optie in als u bestandssynchronisatie zelf beheert. Standaardwaarde is true. Deze optie wordt genegeerd wanneer u zich richt op WSL1.
copySourcesOptions Een object met opties met betrekking tot de bronkopie van Windows naar het externe systeem. Dit object wordt genegeerd bij gebruik met WSL1.

copySourcesOptions.exclusionList: Een lijst met paden die moeten worden uitgesloten bij het kopiëren van bronbestanden naar het externe systeem. Een pad kan de naam zijn van een bestand of map, of een relatief pad uit de hoofdmap van de kopie. Standaardwaarde is [ ".vs", ".git", "out" ]. Deze optie ondersteunt macro-uitbreiding.

copySourcesOptions.method: De methode die wordt gebruikt om bronbestanden naar het externe systeem te kopiëren. Geaccepteerde waarden zijn rsync en sftp. Standaardwaarde is rsync.

copySourcesOptions.concurrentCopies: Het aantal gelijktijdige kopieën dat wordt gebruikt tijdens de synchronisatie van bronnen met het externe systeem. Standaardwaarde is 5.

copySourcesOptions.outputVerbosity: Het uitgebreidheidsniveau van bronkopiebewerkingen naar het externe systeem. Geaccepteerde niveaus zijn Normal, Verboseen Diagnostic. Standaardwaarde is Normal.
rsyncCommandArgs Een lijst met opdrachtregelargumenten die worden doorgegeven aan rsync. Standaardwaarde is [ "-t", "--delete", "--delete-excluded" ]. Deze optie ondersteunt macro-uitbreiding en wordt genegeerd bij gebruik van WSL1.
copyBuildOutput Hiermee geeft u op of build-uitvoer van het externe systeem terug naar Windows moet worden gekopieerd. Standaardwaarde is false. Deze optie wordt genegeerd wanneer u zich richt op WSL1.
copyOptimizations Een object met opties met betrekking tot optimalisaties van bronkopie. Deze opties worden genegeerd wanneer ze gericht zijn op WSL1.

copyOptimizations.maxSmallChange: Het maximum aantal bestanden dat moet worden gekopieerd met sftp in plaats van rsync. De standaardwaarde is 10.

copyOptimizations.useOptimizations: Specificeert de kopieeroptimalisaties die in gebruik zijn. Geaccepteerde waarden zijn geen kopieeroptimalisaties (None), rsync-optimalisaties (RsyncOnly) of rsync- en sftp-optimalisaties (RsyncAndSftp). Standaardwaarde is RsyncAndSftp.

copyOptimizations.rsyncSingleDirectoryCommandArgs: Een lijst met opdrachtregelargumenten die worden doorgegeven aan rsync bij het kopiëren van de inhoud van één map naar het externe systeem. Standaardwaarde is [ "-t", "-d" ]. Deze optie ondersteunt macro-uitbreiding.
copyAdditionalIncludeDirectoriesList Een lijst met paden naar externe headermappen die lokaal moeten worden gekopieerd voor IntelliSense. Deze optie ondersteunt macro-uitbreiding.
copyExcludeDirectoriesList Een lijst met paden naar externe headermappen die niet lokaal moeten worden gekopieerd voor IntelliSense. Deze optie ondersteunt macro-uitbreiding.
forceWSL1Toolset Als trueVisual Studio altijd de WSL1-toolset gebruikt bij het richten van WSL vanuit Visual Studio. De WSL1-toolset voert alle opdrachten lokaal uit en is afhankelijk van Windows-stations die zijn gekoppeld onder de /mnt map voor toegang tot lokale bronbestanden vanuit WSL. Deze opties kunnen langzamer zijn met WSL2. Standaardwaarde is false.

De WSL1-toolset wordt altijd gebruikt in Visual Studio 2019 versie 16.10. Deze optie is relevant zodra systeemeigen ondersteuning voor WSL2 beschikbaar is.

Externe vooraf gemaakte en post-buildgebeurtenissen

Opties voor een remotePrebuildEvent en remotePostbuildEvent zijn afgeschaft met de ingebruikname van CMakePresets.json.

Codeer pre-build-, pre-link- en post-buildgebeurtenissen in uw CMakeLists.txt door gebruik te maken van add_custom_command. Het zorgt voor hetzelfde gedrag bij het bouwen met Visual Studio en met de opdrachtprompt.

Als u gedrag nodig hebt dat specifiek is voor Visual Studio, kunt u een aangepaste externe taak toevoegen in tasks.vs.json. Als u wilt beginnen, klikt u met de rechtermuisknop op de root CMakeLists.txt in de Solution Explorer vanuit de mapweergave en selecteert u Taken configureren. Vervolgens kunt u een nieuwe externe taak toevoegen aan uw tasks.vs.json bestand.

Met de volgende externe taak maakt u een map met de naam Test op het externe Linux-systeem:

{
      "taskLabel": "mkdir",
      "appliesTo": "CMakeLists.txt",
      "type": "remote",
      "command": "mkdir test",
      "remoteMachineName": "localhost"
  }

Klik met de rechtermuisknop op een CMakeLists.txt willekeurige optie en selecteer de mkdir-optie om deze taak uit te voeren.

De waarde van remoteMachineName moet overeenkomen met de hostnaam van een verbinding in Verbindingsbeheer.

Macro's van Microsoft-leveranciers

De twee Microsoft-leverancierskaarten Visual Studio Settings en Visual Studio Remote Settingsondersteunen alle macro's die zijn gedefinieerd door CMake. Onze leverancierskaarten ondersteunen alle macro's die zijn gedefinieerd door CMake. Zie macro-uitbreidingen met cmake-voorinstellingen voor meer informatie. Alle macro's en omgevingsvariabelen worden uitgevouwen voordat ze worden doorgegeven aan CMake.

Visual Studio ondersteunt leveranciersmacro's met het voorvoegsel ms. Microsoft-leveranciersmacro's kunnen alleen worden gebruikt in Microsoft-leveranciersoverzichten. CMake kan geen voorinstellingen gebruiken die leveranciersmacro's bevatten buiten een leverancierskaart.

Macroniveau Beschrijving
$ms{projectDirName} Evalueert de naam van de geopende map in Visual Studio. Deze macro wordt gebruikt voor het instellen van de standaardwaarde in sourceDir scenario's voor externe kopieën. Deze macro wordt niet ondersteund door Visual Studio Code. Gebruik in plaats daarvan ${sourceDirName}.

Omgevingsvariabelen

Macroniveau Beschrijving
$env{<variable-name>}
$penv{<variable-name>}
Verwijzen naar omgevingsvariabelen met behulp van deze syntaxis die door CMake wordt ondersteund. Zie macro-uitbreidingen met cmake-voorinstellingen voor meer informatie.

Verouderde macro's

Een paar macro's die worden ondersteund door CMakeSettings.json , zijn afgeschaft met de ingebruikname van CMakePresets.json.

Gebruik de macro's die door CMake worden ondersteund om bestandspaden samen te stellen. Wanneer u de macro's gebruikt, zorgt dit ervoor dat hetzelfde CMakePresets.json bestand werkt in Visual Studio en vanaf de opdrachtregel.

Verouderde macro Aanbeveling
${projectFile} ${sourceDir}/CMakeLists.txt
${thisFile} ${sourceDir}/CMakePresets.json

Geaccepteerde shellsyntaxis

Gebruik de $env{HOME}-syntaxis om te verwijzen naar $HOME bij het maken van Linux-paden in de Microsoft-leveranciertoewijzingen.