Настройка проекта Linux CMake в Visual Studio

Поддержка Linux реализована в Visual Studio версии 2017 и выше. Чтобы увидеть документацию для этих версий, установите в расположенном над содержанием раскрывающемся списке Версия пункт Visual Studio 2017 или Visual Studio 2019.

В этой статье описывается добавление конфигурации Linux в проекте CMake, предназначенном как для удаленной системы Linux, так и для подсистемы Windows для Linux (WSL). Это продолжение серии, которая началась со статьи Создание и настройка проекта Linux CMake. Если используется MSBuild, ознакомьтесь со статьей Настройка проекта Linux на основе MSBuild в Visual Studio.

Добавление конфигурации Linux

Конфигурацию можно использовать для различных платформ (Windows, WSL, удаленных систем) с одним и тем же исходным кодом. Конфигурация также используется для установки компиляторов, передачи переменных среды и настройки способа вызова CMake. В файле CMakeSettings.json задаются некоторые или все свойства, перечисленные в статье Настройка параметров сборки CMake, а также другие свойства, определяющие параметры сборки на удаленном компьютере Linux.

Чтобы изменить параметры CMake по умолчанию в Visual Studio 2017, в главном меню последовательно выберите CMake>Изменить параметры CMake>CMakeLists.txt. Или же щелкните правой кнопкой мыши файл CMakeLists.txt в Обозревателе решений и выберите пункт Изменить параметры CMake. Затем Visual Studio создает новый файл CMakeSettings.json в корневой папке проекта. Чтобы внести изменения, откройте файл и измените его напрямую. Дополнительные сведения см. в статье Настраиваемые параметры CMake.

Конфигурация по умолчанию для Linux-Debug в Visual Studio 2017 (а также для Visual Studio 2019 версии 16.0) выглядит следующим образом:

{
  "configurations": [
    {
      "name": "Linux-Debug",
      "generator": "Unix Makefiles",
      "remoteMachineName": "${defaultRemoteMachineName}",
      "configurationType": "Debug",
      "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
      "cmakeExecutable": "/usr/local/bin/cmake",
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
      "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
      "remoteCopySources": true,
      "remoteCopySourcesOutputVerbosity": "Normal",
      "remoteCopySourcesConcurrentCopies": "10",
      "remoteCopySourcesMethod": "rsync",
      "remoteCopySourcesExclusionList": [
        ".vs",
        ".git"
      ],
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [
        "linux_x64"
      ]
    }
  ]
}

Чтобы изменить параметры CMake по умолчанию в Visual Studio 2019 и более поздней версии, в главной панели инструментов откройте раскрывающийся список Конфигурация и выберите Управление конфигурациями.

Снимок экрана: управление конфигурациями CMake, выделенными в раскрывающемся меню

Откроется Редактор параметров CMake, в котором можно изменить файл CMakeSettings.json в корневой папке проекта. Вы также можете открыть файл c помощью редактора JSON, нажав кнопку Изменить JSON в правом верхнем углу диалогового окна Параметры CMake. Дополнительные сведения см. в статье Настраиваемые параметры CMake.

Конфигурация Linux-Debug по умолчанию в Visual Studio 2019 версии 16.1 и более поздних версиях представлена ниже:

{
  "configurations": [
    {
      "name": "Linux-GCC-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "cmakeExecutable": "cmake",
      "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [ "linux_x64" ],
      "remoteMachineName": "${defaultRemoteMachineName}",
      "remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
      "remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
      "remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",
      "remoteCopySources": true,
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "remoteCopySourcesMethod": "rsync",
      "variables": []
    }
  ]
}

В Visual Studio 2019 версии 16.6 или выше Ninja является генератором по умолчанию для конфигураций, предназначенных для удаленных систем или WSL, в отличие от файлов makefile в Unix. Дополнительные сведения см. в публикации блога команды разработчиков C++.

Дополнительные сведения об этих параметрах см. в разделе документации по CMakeSettings.json.

При выполнении сборки:

  • Если целевая система предназначена для удаленной системы, Visual Studio по умолчанию выбирает первую удаленную систему в списке в разделе Инструменты>Параметры>Кроссплатформенные>Диспетчер подключений для целевых объектов.
  • Если ни одно удаленное подключение не будет найдено, вам будет предложено создать его. В этом разделе предполагается, что вы прочитали статью Подключение к удаленному компьютеру Linux.

Выбор целевого объекта Linux

При открытии папки проекта CMake Visual Studio анализирует файл CMakeLists.txt и задает x86-Debug в качестве целевого объекта Windows. Чтобы использовать удаленную систему Linux, измените параметры проекта в соответствии с используемым компилятором Linux. Например, если вы используете GCC в Linux и выполняете компиляцию с отладочной информацией, выберите следующее: Linux-GCC-Debug или Linux-GCC-Release.

После выбора целевого удаленного объекта Linux ваш источник будет скопирован в удаленную систему.

Когда вы выберете целевой объект, CMake автоматически выполнится в системе Linux, чтобы создать кэш CMake для проекта:

Снимок экрана Visual Studio, на котором показаны выходные данные при создании кэша CMake в Linux.

Использование подсистемы Windows для Linux

Если вы намерены использовать подсистему Windows для Linux (WSL), вам не нужно добавлять удаленное подключение.

Чтобы настроить использование подсистемы WSL, выберите Управление конфигурациями в раскрывающемся меню конфигураций на главной панели инструментов:

Снимок экрана: раскрывающийся список конфигураций CMake с выбранным параметром

Откроется окно CMakeSettings.json.

Снимок экрана: диалоговое окно параметров CMake с выделенной кнопкой

Щелкните Добавить конфигурацию (зеленая кнопка "+") и выберите Linux-GCC-Debug или Linux-GCC-Release, если вы используете GCC. Если используется набор инструментов Clang/LLVM, выберите один из вариантов Clang. Нажмите Выбрать и нажмите клавиши CTRL+S, чтобы сохранить конфигурацию.

Visual Studio 2019 версии 16.1. Если вы планируете использовать WSL, Visual Studio не требуется копировать исходные файлы и поддерживать две синхронные копии вашего дерева сборки, так как компилятор в Linux имеет прямой доступ к исходным файлам в подключенной файловой системе Windows.

IntelliSense

Для правильной работы C++ IntelliSense требуется доступ к заголовкам C++, на которые ссылаются исходные файлы C++. Visual Studio автоматически использует заголовки, на которые ссылается проект CMake из Linux в Windows, чтобы обеспечить полную функциональность технологии IntelliSense. Подробнее см. в разделе IntelliSense для удаленных заголовков.

Настройка языкового стандарта

Языковые параметры Visual Studio не распространяются на целевые объекты Linux, так как Visual Studio не управляет установленными пакетами и не настраивает их. Сообщения, отображаемые в окне Вывод, например ошибки сборки, отображаются с использованием языка и языкового стандарта целевого объекта Linux. Вам потребуется настроить целевые объекты Linux для требуемого языкового стандарта.

Дополнительные параметры

Используйте следующие параметры, чтобы выполнять команды в системе Linux до и после сборки, а также до создания CMake. Они могут быть любой командой, допустимой на удаленной системе. Выходные данные передаются обратно в Visual Studio.

{
      "remotePrebuildCommand": "",
      "remotePreGenerateCommand": "",
      "remotePostbuildCommand": "",
}

Дальнейшие действия

Настройка сеансов отладки CMake

Дополнительно

Настройка компилятора и свойств сборки
Настройка параметров CMake
Справочник по предопределенной конфигурации CMake