Карты поставщиков Майкрософт CMakePresets.json
и CMakeUserPresets.json
CMake поддерживает два файла: CMakePresets.json
и CMakeUserPresets.json
, которые позволяют пользователям указывать общие параметры настройки, сборки и тестирования, а также делиться ими с другими пользователями.
CMakePresets.json
и CMakeUserPresets.json
могут использоваться для управления CMake в Visual Studio, в Visual Studio Code, в конвейере непрерывной интеграции (CI) и из командной строки.
CMakePresets.json
предназначен для сохранения сборок на уровне проекта, а CMakeUserPresets.json
предназначен для разработчиков, позволяя им сохранять собственные локальные сборки. Схема для обоих файлов идентична.
CMakePresets.json
и CMakeUserPresets.json
поддерживают хранение сведений, относящихся к поставщику, в самих картах поставщиков. Корпорация Майкрософт поддерживает две карты поставщиков с параметрами, специфичными для Visual Studio и Visual Studio Code. Здесь мы рассмотрим две карты поставщиков Майкрософт и макросы поставщиков. Дополнительные сведения об оставшейся части схемы см. в официальной документации по CMake. Содержит сведения о настройках предустановках, предустановках сборки и тестовых предустановках.
Дополнительные сведения об использовании CMakePresets.json
в Visual Studio см. в статье Настройка и сборка с помощью предустановок CMake
Дополнительные сведения об использовании CMakePresets.json
в Visual Studio Code см. в статье Настройка и сборка с помощью предустановок CMake в VS Code
Карта поставщика параметров Visual Studio
Для каждой предопределенной конфигурации допускается одна карта поставщика с URI поставщика microsoft.com/VisualStudioSettings/CMake/<version>
, которая также содержит параметры, относящиеся к интеграции CMake в Visual Studio и Visual Studio Code. Все параметры в карте поставщика применяются к Visual Studio. Параметры, применяемые к Visual Studio и Visual Studio Code, помечены явным образом.
Все параметры в карте поставщика параметров Visual Studio являются необязательными и наследуются от предустановок настройки, заданных ключом inherits
. В файл записываются только измененные параметры. Карта поставщика параметров Visual Studio поддерживается как в CMakePresets.json
, так и в CMakeUserPresets.json
.
Параметры в карте поставщика параметров Visual Studio не влияют на конструкцию CMake или командной строки CTest. То есть один и тот же файл CMakePresets.json
можно использовать для управления CMake с помощью Visual Studio, Visual Studio Code и из командной строки. Исключениями являются параметры cacheRoot
и cmakeGenerateCommand
. Эти параметры относятся к сценарию открытия существующего кэша в Visual Studio. Их невозможно воспроизвести из командной строки.
Параметр | Description |
---|---|
hostOS |
Массив поддерживаемых операционных систем (ОС). Допустимые значения: Windows , Linux и macOS .Значение hostOS используется Visual Studio и Visual Studio Code для скрытия предустановок настройки, которые не применяются к ОС целевой системы и обеспечивают большее удобство использования.Если параметр hostOS не указан, Visual Studio и Visual Studio Code будут всегда показывать все предустановки настройки для выбора. Это поле также может быть строкой, которая эквивалентна массиву, содержащему одну строку.Этот параметр поддерживается как в Visual Studio, так и в Visual Studio Code. |
intelliSenseMode |
Задает режим, используемый для вычисления сведений IntelliSense в Visual Studio в формате <target>-<toolset>-<arch> . Допустимые значения: 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 Если параметр intelliSenseMode не указан, Visual Studio будет использовать режим IntelliSense, соответствующий указанным компиляторам и целевой архитектуре. intelliSenseMode часто используется, чтобы обеспечить улучшенную технологию IntelliSense для перекрестной компиляции.В Visual Studio 2019 необходимо явно указать режим IntelliSense Clang во время сборки с помощью clang или clang-cl. |
intelliSenseOptions |
Карта дополнительных параметров конфигурации IntelliSense.useCompilerDefaults : указывает bool , следует ли использовать компилятор по умолчанию определяет и включает пути для IntelliSense. Значение false следует задавать только в том случае, если используемые компиляторы не поддерживают аргументы в стиле gcc. По умолчанию — true .additionalCompilerArgs : массив дополнительных параметров для управления IntelliSense в Visual Studio. Этот параметр поддерживает расширение макросов. |
enableMicrosoftCodeAnalysis |
bool , который включает анализ кода Майкрософт в Visual Studio при сборке с использованием cl или clang-cl . По умолчанию — false . |
codeAnalysisRuleset |
Указывает набор правил для использования при выполнении анализа кода Майкрософт в Visual Studio. Можно использовать путь к файлу набора правил или имя файла набора правил, установленного с помощью Visual Studio. Этот параметр поддерживает расширение макросов. |
disableExternalAnalysis |
Значение типа bool , указывающее, должен ли анализ кода запускаться для внешних заголовков в Visual Studio. |
codeAnalysisExternalRuleset |
Указывает набор правил для использования при выполнении анализа кода Майкрософт во внешнем заголовке в Visual Studio. Можно использовать путь к файлу набора правил или имя файла набора правил, установленного с помощью Visual Studio. Этот параметр поддерживает расширение макросов. |
enableClangTidyCodeAnalysis |
Логическое значение, которое включает анализ кода clang-tidy в Visual Studio при сборке с использованием clang-cl . По умолчанию — false . |
clangTidyChecks |
Разделенный запятыми список предупреждений, передаваемых в clang-tidy при выполнении анализа кода clang-tidy в Visual Studio. Допускаются подстановочные знаки, а префикс - удаляет проверки. |
cacheRoot |
Задает путь к кэшу CMake. Этот каталог должен содержать существующий файл CMakeCache.txt . Этот ключ поддерживается только в сценарии открытия существующего кэша в Visual Studio. Этот параметр поддерживает расширение макросов. |
cmakeGenerateCommand |
Средство командной строки (указанное в качестве программы командной строки + аргументы, например gencache.bat debug ) для создания кэша CMake. Эта команда выполняется в оболочке, использующей указанную среду предустановки при вызове настроек CMake. Этот ключ поддерживается только в сценарии открытия существующего кэша в Visual Studio. Этот параметр поддерживает расширение макросов. |
Карта поставщика удаленных параметров Visual Studio
Для каждой предопределенной конфигурации допускается одна схема поставщика с URI поставщика microsoft.com/VisualStudioRemoteSettings/CMake/<version>
, которая также содержит параметры, относящиеся к удаленной разработке в Visual Studio. Удаленная разработка означает, что вы вызываете CMake через удаленное SSH-подключение или WSL. Ни один из параметров в карте поставщика удаленных параметров Visual Studio не применяется к Visual Studio Code.
Все параметры в карте поставщика удаленных параметров Visual Studio являются необязательными и наследуются от предустановок настройки, заданных ключом inherits
. В файл записываются только измененные параметры. Карта поставщика удаленных параметров Visual Studio поддерживается как в CMakePresets.json
, так и в CMakeUserPresets.json
.
Параметры в карте поставщика параметров Visual Studio не влияют на конструкцию CMake или командной строки CTest. То есть один и тот же файл CMakePresets.json
можно использовать для управления CMake с помощью Visual Studio, Visual Studio Code и из командной строки.
Многие параметры в карте поставщика удаленных параметров Visual Studio игнорируются, когда целевой платформой является WSL1. Это связано с тем, что набор инструментов WSL1 выполняет все команды локально и использует диски Windows, подключенные к папке /mnt
, для доступа к локальным исходным файлам из WSL1. Копировать исходный файл не требуется. Параметры, которые игнорируются, когда целевой платформой является WSL1, помечены явным образом.
Параметр | Description |
---|---|
sourceDir |
Путь к каталогу в удаленной системе, куда будет скопирован проект. По умолчанию — $env{HOME}/.vs/$ms{projectDirName} . Этот параметр поддерживает расширение макросов.В сценариях удаленного копирования макрос ${sourceDir} оценивает исходный каталог проекта в удаленной системе, а не исходный каталог проекта на компьютере Windows. Сценарии удаленного копирования включают в себя назначение удаленного SSH-подключения. В таких случаях исходный каталог проекта в удаленной системе определяется значением sourceDir в карте поставщика удаленных параметров Visual Studio. Этот параметр игнорируется, когда целевой платформой является WSL1. |
copySources |
Если true , Visual Studio скопирует источники из Windows на удаленную систему. Установите значение false , если вы управляете синхронизацией файлов самостоятельно. По умолчанию — true . Этот параметр игнорируется, когда целевой платформой является WSL1. |
copySourcesOptions |
Объект параметров, относящийся к копированию исходных файлов из Windows в удаленную систему. Этот объект игнорируется, когда целевой платформой является WSL1.copySourcesOptions.exclusionList : список путей, исключаемых при копировании исходных файлов в удаленную систему. Путь может представлять собой имя файла или каталога или относительный путь от корня копии. По умолчанию — [ ".vs", ".git", "out" ] . Этот параметр поддерживает расширение макросов.copySourcesOptions.method : метод, используемый для копирования исходных файлов в удаленную систему. Допустимые значения: rsync и sftp . По умолчанию — rsync .copySourcesOptions.concurrentCopies : количество одновременных копий, используемых при синхронизации источников с удаленной системой. По умолчанию — 5 .copySourcesOptions.outputVerbosity : уровень детализации исходных операций копирования в удаленную систему. Допустимые уровни: Normal , Verbose и Diagnostic . По умолчанию — Normal . |
rsyncCommandArgs |
Список аргументов командной строки, передаваемых в rsync . По умолчанию — [ "-t", "--delete", "--delete-excluded" ] . Этот параметр поддерживает расширение макросов и игнорируется, когда целевой платформой является WSL1. |
copyBuildOutput |
Указывает, следует ли копировать выходные данные сборки из удаленной системы обратно в Windows. По умолчанию — false . Этот параметр игнорируется, когда целевой платформой является WSL1. |
copyOptimizations |
Объект параметров, относящийся к оптимизации копирования исходных файлов. Эти параметры игнорируются, когда целевой платформой является WSL1.copyOptimizations.maxSmallChange : максимальное количество файлов для копирования с помощью sftp вместо rsync. Значение по умолчанию равно 10.copyOptimizations.useOptimizations : указывает используемые оптимизации копирования. Допустимые значения: копирование без оптимизации (None ), только оптимизация rsync (RsyncOnly ) или оптимизация rsync и sftp (RsyncAndSftp ). По умолчанию — RsyncAndSftp .copyOptimizations.rsyncSingleDirectoryCommandArgs : список аргументов командной строки, передаваемых в rsync при копировании содержимого одного каталога в удаленную систему. По умолчанию — [ "-t", "-d" ] . Этот параметр поддерживает расширение макросов. |
copyAdditionalIncludeDirectoriesList |
Список путей к удаленным каталогам заголовков, которые будут скопированы локально для IntelliSense. Этот параметр поддерживает расширение макросов. |
copyExcludeDirectoriesList |
Список путей к удаленным каталогам заголовков, которые не будут скопированы локально для IntelliSense. Этот параметр поддерживает расширение макросов. |
forceWSL1Toolset |
Если true , Visual Studio всегда будет использовать набор инструментов WSL1 при нацеливании на WSL из Visual Studio. Набор инструментов WSL1 выполняет все команды локально и использует диски Windows, подключенные к папке /mnt , для доступа к локальным исходным файлам из WSL. Эти параметры могут работать медленнее с WSL2. По умолчанию — false .В Visual Studio 2019 версии 16.10 всегда будет использоваться набор инструментов WSL1. Этот параметр будет важен после того, как будет доступна собственная поддержка WSL2. |
Удаленные события перед сборкой и после сборки
Параметры для remotePrebuildEvent
и remotePostbuildEvent
больше не рекомендуются при внедрении CMakePresets.json
.
Используйте кодирование событий перед сборкой, перед компоновкой и после сборки в CMakeLists.txt
с помощью add_custom_command
. Это обеспечит такое же поведение при построении с помощью Visual Studio и из командной строки.
Если требуется поведение, характерное для Visual Studio, можно добавить пользовательскую удаленную задачу в tasks.vs.json
. Чтобы начать работу, щелкните правой кнопкой мыши корень CMakeLists.txt
в обозревателе решений из представления папки и выберите пункт Настроить задачи. Затем можно добавить новую удаленную задачу в файл tasks.vs.json
.
Следующая удаленная задача создает каталог с именем test в удаленной системе Linux:
{
"taskLabel": "mkdir",
"appliesTo": "CMakeLists.txt",
"type": "remote",
"command": "mkdir test",
"remoteMachineName": "localhost"
}
Щелкните любой элемент CMakeLists.txt
правой кнопкой мыши и выберите параметр mkdir, чтобы выполнить эту задачу.
Значение remoteMachineName
должно соответствовать имени узла соединения в диспетчере подключений.
Макросы поставщиков Майкрософт
Две карты поставщиков Майкрософт, Visual Studio Settings
и Visual Studio Remote Settings
, поддерживают все макросы, определенные с помощью CMake. Наши карты поставщиков поддерживают все макросы, определенные с помощью CMake. Дополнительные сведения см. в разделе Расширение макросов предустановок CMake. Все макросы и переменные среды расширяются до их передачи в CMake.
Visual Studio поддерживает макросы поставщика с префиксом ms
. Макросы поставщиков Майкрософт можно использовать только в картах поставщиков Майкрософт. CMake не может использовать предустановки, имеющие макросы поставщика за пределами карты поставщика.
Макрос | Description |
---|---|
$ms{projectDirName} |
Возвращает имя открытой папки в Visual Studio. Этот макрос используется для задания значения по умолчанию для sourceDir в сценариях удаленного копирования. Этот макрос не поддерживается Visual Studio Code. Вместо этого используйте ${sourceDirName} . |
Переменные среды
Макрос | Description |
---|---|
$env{<variable-name>} $penv{<variable-name>} |
Ссылочные переменные среды, использующие этот синтаксис, поддерживаются CMake. Дополнительные сведения см. в разделе Расширение макросов предустановок CMake. |
Устаревшие макросы
Некоторые макросы, поддерживаемые CMakeSettings.json
, не рекомендуется использовать при внедрении CMakePresets.json
.
Используйте макросы, поддерживаемые CMake, для создания путей к файлам. Использование этих макросов позволяет гарантировать, что один и тот же файл CMakePresets.json
будет работать и в Visual Studio, и из командной строки.
Устаревший макрос | Рекомендация |
---|---|
${projectFile} |
${sourceDir}/CMakeLists.txt |
${thisFile} |
${sourceDir}/CMakePresets.json |
Допустимый синтаксис оболочки
Используйте синтаксис $env{HOME}
, чтобы сослаться на $HOME
при создании путей Linux в картах поставщиков Майкрософт.