Настройка и сборка с помощью предустановок 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 это рекомендуемая альтернатива 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>":>

Screenshot showing 'Always use CMakePresets.json' selected.

Этот экран доступен в меню Visual Studio 2022: сервис > параметры > CMake > Общие. Параметр находится в разделе конфигурации файла CMake.

Важно!

Чтобы активировать интеграцию, закройте и снова откройте папку в Visual Studio.

В некоторых более старых версиях Visual Studio> параметры CMake Для параметров>CMake>есть только один вариант для включения CMakePresets.json интеграции:

Screenshot of an older version of Visual Studio. There is a checkbox labeled 'Use C Make Presets .json to drive CMake configure, build, and test.'

В следующей таблице указывается, когда 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 включении интеграции:

Screenshot showing the dropdowns for target system set to Local Machine, configuration set to windows-arm64, and build preset set to default.

Выбор целевой системы

В раскрывающемся списке слева указывается активная целевая система. Это система, в которой CMake будет вызываться для настройки и сборки проекта. В этом раскрывающемся списке отображается локальный компьютер, все SSH-подключения в диспетчере подключений по имени узла, а также все установки подсистемы Windows для Linux (WSL), которые может найти Visual Studio:

Screenshot of the Target System dropdown list

Раскрывающийся список содержит несколько записей, включая локальный компьютер, IP-адрес 192.168.0.5, WSL: ubuntu2004, WSL: debian и управление Подключение ions.

В предыдущем примере:

  • 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 в представлении папок и в контекстном меню выберите Добавить конфигурацию. Откроется диалоговое окно для выбора шаблона предустановки настройки:

Screenshot of the Add Configure Preset to the JSON file dialog. It contains entries such as Linux Debug, macOS Debug, x64 Debug, and so on.

Выберите шаблон Отладка 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 2019Visual 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: