Настройка и сборка с помощью предустановок CMake в Visual Studio
CMake поддерживает два файла — CMakePresets.json
и CMakeUserPresets.json
, — которые позволяют пользователям указывать общие параметры настройки, сборки и тестирования, а также делиться ими с другими пользователями. Эти файлы можно использовать для управления CMake в Visual Studio, в Visual Studio Code, в конвейере непрерывной интеграции (CI) и из командной строки.
CMakePresets.json
предназначен для сохранения сборок на уровне проекта. CMakeUserPresets.json
предназначен для разработчиков, позволяя им сохранять собственные локальные сборки. Оба файла поддерживаются в Visual Studio 2019 версии 16.10 или более поздней.
В этой статье представлены сведения об интеграции CMakePresets.json
в Visual Studio. Ниже приведены полезные ссылки.
- Дополнительные сведения о формате
CMakePresets.json
см. в официальной документации по CMake. - Дополнительные сведения о картах поставщиков Майкрософт и расширении макросов см. в разделе Карты поставщиков Майкрософт
CMakePresets.json
иCMakeUserPresets.json
. - Дополнительные сведения об использовании
CMakePresets.json
в Visual Studio Code см. в статье Настройка и сборка с помощью предварительных установок CMake.
CMakePresets.json
это рекомендуемая альтернатива CMakeSettings.json
. Visual Studio никогда не считывает оба CMakePresets.json
и CMakeSettings.json
одновременно. Сведения о включении или отключении интеграции CMakePresets.json
в Visual Studio см в разделе Включение интеграции CMakePresets.json
в Visual Studio 2019.
Поддерживаемые версии CMake и CMakePresets.json
Поддерживаемые CMakePresets.json
версии и CMakeUserPresets.json
версии схемы зависят от версии Visual Studio:
- Visual Studio 2019 версии 16.10 и более поздних версий поддерживают схемы 2 и 3.
- Visual Studio 2022 версии 17.4( предварительная версия 1) добавляет поддержку схемы версии 4.
- Visual Studio 2022 версии 17.5( предварительная версия 1) добавляет поддержку схемы версии 5.
Вы можете обновить версию, изменив "version"
поле в корневом объекте. Пример и дополнительные сведения см. в разделе Формат CMakePresets.json
.
CMake версии 3.20 или более поздней требуется при вызове CMake из CMakePresets.json
командной строки. Однако Visual Studio считывает и вычисляет CMakePresets.json
и CMakeUserPresets.json
, и не вызывает CMake напрямую с помощью параметра --preset
. Таким образом, CMake версии 3.20 или выше не является обязательным при сборке с использованием CMakePresets.json
в Visual Studio.
Рекомендуется использовать по крайней мере CMake версии 3.14 или более поздней.
Включение CMakePresets.json
интеграции в Visual Studio
CMakePresets.json
Интеграция не включена по умолчанию в Visual Studio. Его можно включить в разделе "Параметры>CMake>":>
Этот экран доступен в меню Visual Studio 2022: сервис > параметры > CMake > Общие. Параметр находится в разделе конфигурации файла CMake.
Внимание
Чтобы активировать интеграцию, закройте и снова откройте папку в Visual Studio.
В некоторых более старых версиях Visual Studio> параметры CMake Для параметров>CMake>есть только один вариант для включения CMakePresets.json
интеграции:
В следующей таблице указывается, когда CMakePresets.json
вместо CMakeSettings.json
использования для диска конфигурации CMake и сборки в Visual Studio 2022 и Visual Studio 2019 версии 16.10 и более поздних версий. Если файл конфигурации отсутствует, используются стандартные предустановки настройки.
В таблице "Сервис>Параметры включены" означает выбор параметра Использование CMakeePresets.json для настройки, создания и тестирования CMake в меню Сервис>Параметры>CMake>Общие.
Файлы конфигурации | Параметры инструментов > отключены | Параметры инструментов > , включенные |
---|---|---|
Файл конфигурации отсутствует | CMakeSettings.json |
CMakePresets.json |
CMakeSettings.json присутствует |
CMakeSettings.json |
CMakePresets.json |
CMakePresets.json присутствует |
CMakePresets.json |
CMakePresets.json |
Имеются оба файла конфигурации | CMakePresets.json |
CMakePresets.json |
Изменение автоматической настройки и уведомлений кэша
По умолчанию Visual Studio автоматически вызывает configure
при каждом изменении активной целевой системы или предустановок настройки. Это поведение можно изменить, выбрав Никогда не запускать шаг настройки автоматически в меню Сервис>Параметры>CMake>Общие. Можно также отключить все уведомления кэша CMake (полоски золотистого цвета), сняв флажок Показать уведомления кэша CMake.
Настройка предустановок настройки по умолчанию
Если файл отсутствует или файл не CMakePresets.json
существует, или CMakePresets.json
если это CMakeUserPresets.json
недопустимо, Visual Studio возвращается на следующие предустановки по умолчанию:CMakeUserPresets.json
Пример для Windows
{
"name": "windows-default",
"displayName": "Windows x64 Debug",
"description": "Sets Ninja generator, compilers, x64 architecture, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Windows" ]
}
}
},
Пример Linux
{
"name": "linux-default",
"displayName": "Linux Debug",
"description": "Sets Ninja generator, compilers, build and install directory, debug build type",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [ "Linux" ]
},
"microsoft.com/VisualStudioRemoteSettings/CMake/1.0": {
"sourceDir": "$env{HOME}/.vs/$ms{projectDirName}"
}
}
}
При попытке открыть или изменить файл CMakePresets.json
, который не существует, Visual Studio автоматически создаст файл CMakePresets.json
с предустановками настройки по умолчанию в корне проекта.
Настройка и сборка
На панели инструментов Visual Studio есть раскрывающийся список для целевых систем, настройка предустановок и предустановок сборки при CMakePresets.json
включении интеграции:
Выбор целевой системы
В раскрывающемся списке слева указывается активная целевая система. Это система, в которой CMake будет вызываться для настройки и сборки проекта. В этом раскрывающемся списке отображается локальный компьютер, все SSH-подключения в диспетчере подключений по имени узла, а также все установки подсистемы Windows для Linux (WSL), которые может найти Visual Studio:
Раскрывающийся список содержит несколько записей, включая локальный компьютер, IP-адрес 192.168.0.5, WSL: ubuntu2004, WSL: debian и управление подключениями.
В предыдущем примере:
- 192.168.0.5 — это удаленная система Linux, добавленная в диспетчер подключений.
- ubuntu2004 и debian — это установки WSL.
Выберите элемент Управление подключениями, чтобы открыть диспетчер подключений.
Выбор предустановки настройки
В раскрывающемся списке посередине можно выбрать активную предустановку настройки. Это значение configurePreset
, которое будет использоваться при вызове CMake для создания системы сборки проекта. В этом раскрывающемся списке приведены нескрытые предустановки настройки, определенные в файлах CMakePresets.json
и CMakeUserPresets.json
.
Visual Studio использует значение hostOS
в карте поставщика параметров Microsoft Visual Studio для скрытия предустановок настройки, которые не применяются к активной целевой системе. Дополнительные сведения см. в записи hostOS
в таблице в разделе Карта поставщика параметров Visual Studio.
Выберите элемент Управление конфигурациями, чтобы открыть файл CMakePresets.json
, расположенный в корне проекта. Если CMakePresets.json
не существует, он будет создан.
Выбор предустановки сборки
В раскрывающемся списке справа указывается активная предустановка сборки. Это значение buildPreset
, которое будет использоваться при вызове CMake для сборки проекта. В этом раскрывающемся списке приведены нескрытые предустановки сборки, определенные в файлах CMakePresets.json
и CMakeUserPresets.json
.
Все предустановки сборки должны указывать связанное значение configurePreset
. Visual Studio скрывает предустановки сборки, которые не применяются к активной предустановке настройки. Дополнительные сведения см. в списке предустановок сборки.
Если с активным предустановкой настройки нет предустановок сборки, Visual Studio перечисляет предустановку сборки по умолчанию. Предустановка сборки по умолчанию эквивалентна передаче cmake --build
без других аргументов из командной строки.
Настройка
Visual Studio автоматически пытается настроить проект, когда обнаружит, что кэш CMake устарел. Чтобы вручную вызвать конфигурацию, выберите "Настройка>< проекта"> в главном меню. Это эквивалентно выполнению cmake --preset <configurePreset>
в командной строке, где <configurePreset>
— имя активной предустановки конфигурации.
Сведения об отключении автоматического создания кэша см. в разделе Автоматическая настройка и уведомления кэша.
Сборка
Чтобы выполнить сборку всего проекта, выберите в главном меню пункт Сборка>Собрать все. Это эквивалентно выполнению cmake --build --preset <buildPreset>
в командной строке, где <buildPreset>
— имя активной предустановки сборки.
Чтобы создать один целевой объект, переключитесь на представление целевых объектов CMake в Обозревателе решений. Затем щелкните правой кнопкой мыши любой целевой объект и выберите в контекстном меню пункт Сборка.
Примечание.
Visual Studio 2019 не поддерживает параметр buildPresets.targets
для создания подмножества целевых объектов, указанных в CMakePresets.json
.
Запуск CTest
CMakePresets.json
поддерживает два параметра меню в Visual Studio 2019:
- Тестовый>запуск CTests для <имени> проекта вызывает CTest и выполняет все тесты, связанные с активным набором настройки и предустановкой сборки, без других аргументов, передаваемых в CTest.
- Предварительная>настройка тестового запуска для <настройкиPreset> расширяется, чтобы отобразить все предустановки теста, связанные с активным набором настройки. Выбор одной предустановки теста аналогичен запуску
ctest --preset <testPreset>
из командной строки, где<testPreset>
— имя выбранной предустановки теста. Этот параметр будет недоступен, если для активной предустановки конфигурации не определены предустановки тестов.
В Visual Studio 2019 обозреватель тестов не интегрирован с CMakePresets.json
.
Добавление новых предустановок
В Visual Studio 2019 все команды и предустановленные шаблоны изменяют CMakePresets.json
. Можно добавлять новые предустановки уровня пользователя путем непосредственного редактирования файла CMakeUserPresets.json
.
Используйте косую черту (/
) для путей в CMakePresets.json
и CMakeUserPresets.json
.
Добавление новых предустановок настройки
Чтобы добавить новую предустановку настройки в файл CMakePresets.json
, в Обозревателе решений щелкните правой кнопкой мыши CMakePresets.json
в представлении папок и в контекстном меню выберите Добавить конфигурацию. Откроется диалоговое окно для выбора шаблона предустановки настройки:
Выберите шаблон Отладка Windows x64 для настройки в системах Windows. Выберите шаблон Отладка Linux для настройки в WSL и удаленных системах Linux. Дополнительные сведения о редактировании CMakePresets.json
см. в разделе Редактирование предустановок.
Выбранный шаблон будет добавлен в файл CMakePresets.json
, если он существует. Если нет, шаблон будет скопирован в новый файл CMakePresets.json
.
Добавление новых предустановок сборки и предустановок тестов
В Visual Studio 2019 нет шаблонов для новых предустановок сборки и предустановок тестов. Вы можете добавлять предустановки сборок и тестов путем непосредственного редактирования CMakePresets.json
. Дополнительные сведения см. в разделе со списком предустановок сборки, списком предустановок тестов или с примером файла CMakePresets.json
.
Редактирование предустановок
Официальная документация по CMake является лучшим ресурсом для редактирования предустановок настройки, предустановок сборки и предустановок тестов. Ниже приведены сведения о различной документации по CMake, которая особенно важна для разработчиков Visual Studio.
Выбор компиляторов
Компиляторы C и C++ можно задавать с помощью cacheVariables.CMAKE_C_COMPILER
и cacheVariables.CMAKE_CXX_COMPILER
в предустановке настройки. Это эквивалентно передаче -D CMAKE_C_COMPILER=<value>
и -D CMAKE_CXX_COMPILER=<value>
в CMake из командной строки. Дополнительные сведения см. в разделе CMAKE_<LANG>_COMPILER
.
Используйте следующие примеры для сборки с помощью cl.exe
и clang-cl.exe
из Visual Studio. Для сборки с помощью clang-cl
должны быть установлены средства C++ Clang для компонентов Windows.
Сборка с помощью cl.exe
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "cl",
"CMAKE_CXX_COMPILER": "cl"
},
Сборка с помощью clang
:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "clang-cl",
"CMAKE_CXX_COMPILER": "clang-cl"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"intelliSenseMode": "windows-clang-x64"
}
}
Если вы используете либо Visual Studio 16 2019
Visual Studio 17 2022
в качестве генератора, можно использовать toolset
предустановку настройки, чтобы указать ClangCL
набор инструментов:
"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"
}
}
Дополнительные сведения о генераторах, поддерживающих спецификацию toolset
, см CMAKE_GENERATOR_TOOLSET
. в документации по CMake.
Внимание
В Visual Studio 2019 необходимо явно указать режим IntelliSense Clang во время сборки с помощью clang
или clang-cl
.
Сведения о воспроизведении этих сборок вне Visual Studio см. в разделе Запуск CMake из командной строки или конвейера непрерывной интеграции (CI).
Чтобы выполнить сборку в Linux или без набора инструментов Visual C++, укажите имя компилятора в экземпляре PATH
или переменную среды, результатом которой является полный путь компилятора. Не рекомендуется использовать полные пути, чтобы файл мог оставаться общим. Предустановка, которая выполняет сборку с помощью GCC версии 8, может выглядеть следующим образом:
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}",
"CMAKE_C_COMPILER": "gcc-8",
"CMAKE_CXX_COMPILER": "g++-8"
},
Можно также задать компиляторы с помощью файла цепочки инструментов CMake. Файлы цепочки инструментов можно задать с помощью cacheVariables.CMAKE_TOOLCHAIN_FILE
, что эквивалентно передаче -D CMAKE_TOOLCHAIN_FILE=<value>
в CMake из командной строки. Файл цепочки инструментов CMake чаще всего используется для перекрестной компиляции. Дополнительные сведения о разработке файлов цепочки инструментов CMake см. в разделе, посвященном cmake-toolchains.
Выбор генератора
В шаблонах конфигурации Windows и Linux в качестве генератора по умолчанию указывается Ninja. Другими распространенными генераторами являются генераторы Visual Studio в Windows и Unix Makefiles в Linux и macOS. Можно указать новый генератор с параметром generator
в предустановке настройки. Это эквивалентно передаче -G
в CMake из командной строки.
Задайте для architecture.strategy
и toolset.strategy
значение set
при сборке с помощью генератора Visual Studio. Дополнительные сведения см. в разделе, посвященном cmake-generators.
Выбор типа конфигурации
Задать тип конфигурации (Debug
или Release
) для генераторов отдельной конфигурации можно с помощью cacheVariables.CMAKE_BUILD_TYPE
. Это эквивалентно передаче -D CMAKE_BUILD_TYPE=<value>
в CMake из командной строки. Дополнительные сведения см. в разделе CMAKE_BUILD_TYPE
.
Выберите целевую архитектуру и архитектуру узла при построении с помощью набора инструментов Visual C++.
Целевую архитектуру (x64, Win32, ARM64 или ARM) можно задать с помощью architecture.value
. Это эквивалентно передаче -A
в CMake из командной строки. Дополнительные сведения см. в разделе, посвященном выбору платформы.
Примечание.
В настоящее время генераторам Visual Studio необходим синтаксис Win32, а генераторам командной строки (например, Ninja) при сборке для x86 требуется синтаксис x86.
Архитектуру узла (x64 или x86) и набор инструментов можно задать с помощью toolset.value
. Это эквивалентно передаче -T
в CMake из командной строки. Дополнительные сведения см. в разделе, посвященном выбору набора инструментов.
Значения architecture.strategy
и toolset.strategy
указывают CMake, как обрабатывать поля архитектуры и набора инструментов. set
означает, что CMake задает соответствующее значение и external
означает, что CMake не будет задавать соответствующее значение.
Рекомендуется использовать set
генераторы интегрированной среды разработки, такие как генератор Visual Studio. Используйте external
с генераторами командной строки, такими как Ninja. Эти значения позволяют таким поставщикам, как Visual Studio, создавать исходные требуемые среды перед вызовом CMake. Дополнительные сведения о полях архитектуры и набора инструментов см. в разделе, посвященном предустановкам настройки.
Если вы не хотите определять среду таким образом, вы можете задать для architecture.strategy
значение external
, а для architecture.value
— unspecified
. Определение среды может не требоваться по следующим причинам:
- Используется другой набор инструментов вместо MSVC.
- Используется особая цепочка инструментов, например в сценариях со встроенными решениями.
- Конкретная среда для сборки не требуется.
Полный список генераторов IDE, поддерживающих поле архитектуры, см. в разделе CMAKE_GENERATOR_PLATFORM
. Полный список генераторов IDE, поддерживающих поле набора инструментов, см. в разделе CMAKE_GENERATOR_TOOLSET
.
Используйте приведенные ниже примеры для работы в ARM64 с помощью генератора Ninja или Win32 (x86) с помощью генератора Visual Studio 2019 версии 16.
"generator": "Ninja",
"architecture": {
"strategy": "external",
"value": "arm64"
},
"generator": "Visual Studio 16 2019",
"architecture": {
"strategy": "set",
"value": "Win32"
},
Задание переменных среды и ссылка на них
Переменные среды можно задать с помощью схемы среды. Переменные среды наследуются по полю inherits
, но при необходимости их можно переопределить.
В качестве среды предустановки будет использоваться объединение собственной среды и среды из всех ее родительских элементов. Если несколько предустановок inherits
предоставляют конфликтующие значения для одной и той же переменной, лучше использовать более раннюю предустановку в списке inherits
. Переменную, унаследованную от другой предустановки, можно отменить, задав для нее значение null
.
Переменные среды, заданные в предустановке настройки, также автоматически передаются в соответствующие предустановки сборки и тестов, только если для параметра inheritConfigureEnvironment
не задано значение false
. Дополнительные сведения см. в списке предустановок настройки.
Ссылаться на переменные среды можно с помощью синтаксиса $env{<variable-name>}
и $penv{<variable-name>}
. Дополнительные сведения см. в разделе, посвященном расширению макросов.
Настройка IntelliSense для перекрестной компиляции
По умолчанию Visual Studio использует режим IntelliSense, соответствующий указанным набору инструментов и целевой архитектуре. При перекрестной компиляции может потребоваться вручную указать правильный режим IntelliSense с помощью параметра intelliSenseMode
в карте поставщика параметров Visual Studio. Дополнительные сведения см. в записи intelliSenseMode
в таблице в разделе Карта поставщика параметров Visual Studio.
Настройка и сборка в удаленной системе или подсистеме Windows для Linux
Благодаря поддержке CMakePresets.json
в Visual Studio можно легко настраивать проекты и выполнять их сборку в Windows, WSL и удаленных системах. Действия по настройке и сборке проекта в Windows, удаленной системе или WSL одинаковые. Однако несколько вариантов поведения характерны именно для удаленной разработки.
Поведение ${sourceDir}
в сценариях удаленной копии
В локальных сценариях (включая WSL1) ${sourceDir}
оценивает путь к исходному каталогу проекта, открытому в Visual Studio. В сценариях удаленной копии ${sourceDir}
оценивает путь к исходному каталогу проекта в целевой системе, а не к исходному каталогу проекта на локальном компьютере.
Исходный каталог проекта в целевой системе определяется значением sourceDir
в карте поставщика удаленных параметров Visual Studio (по умолчанию — $env{HOME}/.vs/$ms{projectDirName}
). Дополнительные сведения см. в записи sourceDir
в таблице в разделе Карта поставщика параметров Visual Studio.
Локальная папка для удаленного вывода
В сценариях удаленной копии требуется локальный каталог для копирования некоторых удаленных файлов, таких как файлы ответов API файлов CMake, или файлы сборки, если параметру copyBuildOutput
в карте поставщика удаленных параметров Visual Studio присвоено значение true
. Эти файлы автоматически копируются в <local-source-directory>/out/<remote-connection-ID>/build/${presetName}
.
Вызов одной и той же предустановки настройки для Windows и WSL1
Если вы попытаетесь использовать одну и ту же предустановку в Windows и WSL1, появится сообщение об ошибке. Windows и WSL1 применяют файловую систему Windows, поэтому CMake попытается использовать один и тот же выходной каталог (binaryDir
) для деревьев сборки Windows и WSL1.
Если вы хотите использовать одну и ту же предустановку с Windows и набором инструментов WSL1, создайте вторую предустановку настройки, которая наследует исходную предустановку и задает новое значение binaryDir
. В следующем примере windows-preset
можно использовать в Windows, а base-preset
можно использовать в WSL1:
{
"name": "windows-preset",
"inherits": "base-preset",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": "Windows"
}
}
}
Примечание.
В Visual Studio 2019 поддерживается только набор инструментов WSL1. Это поведение будет наблюдаться при каждом вызове configure
в Windows и WSL.
Включение интеграции vcpkg
Vcpkg помогает управлять библиотеками C и C++ в Windows, Linux и macOS. Чтобы включить интеграцию vcpkg, в CMake следует передать файл цепочки инструментов vcpkg (vcpkg.cmake
). Дополнительные сведения см. в документации по vcpkg.
Visual Studio больше не передает файл цепочки инструментов vcpkg в CMake автоматически при включенной интеграции CMakePresets.json
. Это изменение позволяет отключить поведение, соответствующее Visual Studio, и убедиться, что вы можете воспроизвести сборку из командной строки.
Вместо этого задайте путь к vcpkg.cmake
с помощью переменной среды VCPKG_ROOT
в CMakePresets.json
:
"cacheVariables": {
"CMAKE_TOOLCHAIN_FILE": {
"value": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"type": "FILEPATH"
}
},
Для VCPKG_ROOT
следует задать корневой каталог установки vcpkg. Дополнительные сведения см. в статье, посвященной переменным среды vcpkg.
Если вы уже используете файл CMake цепочки инструментов и хотите включить интеграцию vcpkg, см. раздел, посвященный использованию нескольких файлов цепочки инструментов. Следуйте этим инструкциям, чтобы применить внешний файл цепочки инструментов с проектом, использующим vcpkg.
Подстановка переменных в launch.vs.json
и tasks.vs.json
CMakePresets.json
поддерживает подстановку переменных в launch.vs.json
и tasks.vs.json
. Ниже приведены некоторые рекомендации.
Переменные среды, заданные в активной предустановке настройки, автоматически передаются в конфигурации
launch.vs.json
иtasks.vs.json
. Можно удалить отдельные переменные среды вlaunch.vs.json
иtasks.vs.json
, задав для них значениеnull
. В следующем примере для переменнойDEBUG_LOGGING_LEVEL
задается значениеnull
вlaunch.vs.json
:"env": { "DEBUG_LOGGING_LEVEL": null }
.Значения ключа, заданные в активной предустановке настройки, доступны для использования в файлах
launch.vs.json
иtasks.vs.json
с синтаксисом${cmake.<KEY-NAME>}
. Например, используйте${cmake.binaryDir}
для ссылки на выходной каталог активной предустановки настройки.Отдельные переменные среды, заданные в схеме среды активной предустановки настройки, доступны для использования в файлах
launch.vs.json
иtasks.vs.json
с помощью синтаксиса${env.<VARIABLE-NAME>}
.
Обновите файлы launch.vs.json
и task.vs.json
, чтобы они ссылались на синтаксис CMakePresets.json
вместо синтаксиса CMakeSettings.json
. Макросы, которые ссылаются на старый синтаксис CMakeSettings.json
, если CMakePresets.json
является активным файлом конфигурации, планируется считать устаревшими в будущих выпусках. Например, укажите ссылку на выходной каталог активной предустановки настройки с параметром ${cmake.binaryDir}
вместо ${cmake.buildRoot}
, поскольку CMakePresets.json
использует синтаксис binaryDir
.
Устранение неполадок
Если все работает не так, как ожидалось, можно выполнить несколько действий по устранению неполадок.
Если файл CMakePresets.json
или CMakeUserPresets.json
недопустим, Visual Studio вернется к поведению по умолчанию и отобразит только предустановки по умолчанию. Технология IntelliSense в Visual Studio помогает перехватывать многие из этих ошибок JSON, но вы не будете знать, что ссылаетесь на предустановку с inherits
или configurePreset
с помощью неправильного имени.
Чтобы проверить, являются ли предустановленные файлы допустимыми, выполните команду cmake --list-presets
из командной строки в корне каталога проекта. (Требуется CMake 3.20 или более поздней версии). Если любой из файлов является недопустимым, вы увидите следующую ошибку:
CMake Error: Could not read presets from
C:/Users/<user>/source/repos/<project-name>: JSON parse error
Ниже приведены другие действия по устранению неполадок.
- Удалите кэш и перенастроите проект (CMake: Delete Cache and Project>Configure <project name).>
- Закрытие и повторное открытие папки в Visual Studio (Файл>Закрыть папку).
- Удаление папки
.vs
из корня проекта.
Если вы определили проблему, лучшим способом сообщить о ней является нажатие кнопки Отправить отзыв в правом верхнем углу Visual Studio.
Включение ведения журнала для удаленных подключений
Вы можете включить ведение журнала для удаленных подключений, если возникают проблемы с подключением или копированием файлов в удаленную систему. Дополнительные сведения см. в разделе Ведение журнала для удаленных подключений.
Включение AddressSanitizer для Windows и Linux
Visual Studio поддерживает Средство Распознавания адресов (ASAN), детектор ошибок памяти среды выполнения C и C++ для разработки Windows и Linux. Параметр addressSanitizerEnabled
включает CMakeSettings.json
AddressSanitizer. CMakePresets.json
не поддерживает это поведение.
Вместо этого включите и отключите AddressSanitizer, установив обязательные флаги компилятора и компоновщика самостоятельно. Это позволяет отключить определенное поведение Visual Studio и убедиться, что файл CMakePresets.json
может воспроизвести сборку из командной строки.
Следующий пример можно добавить в файл CMakeLists.txt
, чтобы включить или отключить AddressSanitizer для целевого объекта.
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()
В части <additional-options>
указаны другие флаги компиляции, например "-fno-omit-frame-pointer"
. Дополнительные сведения об AddressSanitizer для Linux см. в разделе, посвященном использованию AddressSanitizer. Дополнительные сведения об использовании AddressSanitizer с MSVC см . в командной строке разработчика с помощью AddressSanitizer.
Передайте флаги среды выполнения в AddressSanitizer с помощью поля ASAN_OPTIONS
в launch.vs.json
. ASAN_OPTIONS
по умолчанию принимает значение detect_leaks=0
, если не указаны другие параметры среды выполнения, поскольку LeakSanitizer не поддерживается в Visual Studio.
Запуск CMake из командной строки или конвейера непрерывной интеграции
Вы можете использовать те же файлы CMakePresets.json
и CMakeUserPresets.json
для вызова CMake в Visual Studio и из командной строки. Документация по CMake и CTest — это наилучшие ресурсы для вызова CMake и CTest с --preset
. Требуется CMake версии 3.20 или более поздней.
Выбор исходной среды при сборке с помощью генераторов командной строки в Windows
Пользователю следует настроить среду перед вызовом CMake при сборке с помощью генератора командной строки. Во время сборки с помощью Ninja и набора инструментов Visual C++ в Windows настройте среду перед вызовом CMake для создания системы сборки. Это можно сделать, вызвав vcvarsall.bat
с аргументом architecture
. Аргумент architecture
указывает узел и целевую архитектуру для использования. Дополнительные сведения см. в разделе синтаксис vcvarsall
. Если вы выполняете сборку в Linux или Windows с помощью генератора Visual Studio, этот шаг выполнять не нужно.
Это тот же шаг, который Visual Studio выполняет при вызове CMake в интегрированной среде разработки. Visual Studio анализирует активную предустановку настройки для архитектуры узла и целевой архитектуры, заданных параметрами toolset
и architecture
. Затем Visual Studio использует указанную среду в качестве исходной в vcvarsall.bat
. При выполнении сборки из командной строки Windows с помощью Ninja необходимо выполнить этот шаг самостоятельно.
vcvarsall.bat
устанавливается вместе с инструментами сборки для Visual Studio. По умолчанию vcvarsall.bat
устанавливается в каталог C:\Program Files (x86)\Microsoft Visual Studio\2019\<edition>\VC\Auxiliary\Build
. Вы можете добавить vcvarsall.bat
в PATH
, если вы часто используете командную строку.
Пример рабочего процесса с использованием командной строки
Следующие команды можно использовать для настройки и сборки проекта CMake, который применяет Ninja для нацеливания на ARM64 с помощью средств сборки x64. Требуется CMake версии 3.20 или более поздней. Выполните следующие команды из каталога, в котором находится файл CMakePresets.json
:
/path/to/vcvarsall.bat x64_arm64
cmake --list-presets=all .
cmake --preset <configurePreset-name>
cmake --build --preset <buildPreset-name>
Пример файла CMakePresets.json
В файле CMakePresets.json
в box2d-lite содержатся примеры предустановок настройки, сборки и тестов. Дополнительные сведения об этом примере см. в статье "Введение в CMakePresets.json". В проекте DirectXTK можно увидеть еще один пример, в котором показаны многие целевые объекты сборки в своем configurePresets
разделе.
Следующие шаги
Дополнительные сведения о настройке и отладке проектов CMake в Visual Studio: