Руководство по созданию кроссплатформенных проектов C++ в Visual Studio

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

В этом руководстве описано следующее:

  • Клонировать проект CMake с открытым кодом с сайта GitHub.
  • Открывать проект в Visual Studio.
  • Собирать и отлаживать исполняемый целевой объект на Windows.
  • Добавлять подключение к компьютеру Linux.
  • Собирать и отлаживать тот же целевой объект в Linux.

Необходимые компоненты

  • Настройка Visual Studio для кроссплатформенной разработки на C++

    • Сначала установите Visual Studio и выберите Разработка классических приложений на C++ и Разработка для Linux на C++. Для минимальной установки требуется всего 3 ГБ свободного места на диске. В зависимости от скорости загрузки установка не должна занять более 10 минут.
  • Настройка компьютера Linux для кроссплатформенной разработки на C++

    • Visual Studio не требует конкретный дистрибутив Linux. Операционная система может работать на физическом компьютере, на виртуальной машине или в облаке. Также можно использовать подсистему Windows для Linux (WSL). Однако для этого руководства требуется графическая среда. WSL не рекомендуется использовать здесь, поскольку она предназначена в основном для операций командной строки.

    • Visual Studio требуется использовать эти средства на компьютере Linux: компиляторы C++, gdb, , sshи rsyncmake.zip В системах на основе Debian эти зависимости можно установить с помощью следующей команды:

      sudo apt install -y openssh-server build-essential gdb rsync make zip
      
    • Visual Studio требует наличия на компьютере Linux последней версии CMake с включенным режимом сервера (не ниже 3.8). Корпорация Майкрософт предлагает универсальную сборку CMake, которую можно установить на любой дистрибутив Linux. Мы рекомендуем использовать эту сборку, чтобы у вас были самые новые функции. Вы можете получить двоичные файлы CMake из вилки Майкрософт репозитория CMake на сайте GitHub. Перейдите на эту страницу и загрузите версию, соответствующую архитектуре вашей системы на компьютере Linux, а затем пометьте ее как исполняемый файл:

      wget <path to binary>
      chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
      
    • Вы увидите параметры для запуска скрипта с --help. Рекомендуется использовать параметр -prefix, чтобы указать установку по пути /usr, потому что это расположение по умолчанию Visual Studio выполняет поиск CMake в каталоге /usr/bin. В следующем примере показан скрипт Linux x86_64. Измените этот параметр на нужный, если вы используете другую целевую платформу.

      sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
      
  • Git для Windows, установленный на компьютере Windows.

  • Учетная запись GitHub.

Клонирование проекта CMake с открытым кодом с сайта GitHub

В этом руководстве используется пакет SDK Bullet Physics на сайте GitHub. Он обеспечивает обнаружение столкновений и физическое моделирование для многих приложений. Пакет SDK включает примеры исполняемых программ, которые компилируют и выполняются без необходимости писать другой код. В этом учебнике не изменяются исходный код или скрипты сборки. Для начала клонируйте репозиторий bullet3 из GitHub на компьютер, где установлена среда Visual Studio.

git clone https://github.com/bulletphysics/bullet3.git
  1. В главном меню Visual Studio выберите "Открыть > файл > CMake". Перейдите CMakeLists.txt к файлу в корневом каталоге репозитория маркер3, который вы скачали.

    Screenshot of Visual Studio menu showing File > Open > C Make. A folder has yet to be opened. This is just the menu opened to this point.

    Когда вы откроете эту папку, структура папок отобразится в обозревателе решений.

    Screenshot of the Solution Explorer window in Folder View mode. It displays the contents of the project (files and folders) and CMakeLists.txt is highlighted.

    В этом представлении показано, что фактически находится на диске. Это не логическое или отфильтрованное представление. По умолчанию оно не показывает скрытые файлы.

  2. Выберите Показать все файлы, чтобы просмотреть полный список файлов в папке.

    Screenshot of the Solution Explorer window with the Show All Files button highlighted. This button sits on top of the solution explorer window and to the right.

Переключение на представление целевых объектов

Когда вы откроете папку, которая использует CMake, Visual Studio автоматически создаст кэш CMake. Эта операция может занять некоторое время в зависимости от размера проекта.

  1. В окне вывода выберите Показать выходные данные из и выберите CMake для отслеживания состояния процесса создания кэша. Когда операция завершится, она говорит:"Целевое извлечение сведений выполнено".

    Screenshot of the Output window. The Show output from: dropdown is set to CMake.

    После завершения этой операции будет настроена технология IntelliSense. Можно выполнить сборку проекта и отладить приложение. В Visual Studio теперь отображается логическое представление решения, основанное на целевых объектах, заданных в файлах CMakeLists.

  2. Нажмите кнопку Решения и папки в обозревателе решений, чтобы переключиться на представление целевых объектов CMake.

    Screenshot of the Solutions and Folders button in the Solution Explorer. It is selected, showing a dropdown with a choice for c:\projects\bullet3 and another choice for CMake Targets View, which is selected.

    Вот как выглядит это представление для пакета SDK для маркеров:

    Screenshot of the Solution Explorer CMake targets view. It contains an entry called BULLET_PHYSICS Project, under which are entries like App_BasicExample (executable), App_ExampleBrowser (executable), and so on.

    Представление целевых объектов обеспечивает более интуитивное отображение содержимого исходной базы. Вы увидите, что некоторые целевые объекты являются библиотеками, а другие — исполняемыми файлами.

  3. Разверните узел в представлении целевых объектов CMake, чтобы просмотреть его файлы исходного кода, где бы эти файлы ни находились на диске.

Добавление явной конфигурации Windows x64-Debug

Visual Studio создает конфигурацию x64-Debug по умолчанию для Windows. Конфигурации указывают Visual Studio, какую платформу она будет использовать для CMake. Конфигурация по умолчанию не представлена на диске. При явном добавлении конфигурации Visual Studio создает файл с именем CMakeSettings.json. Он заполняется параметрами для всех указанных конфигураций.

  1. Добавьте новую конфигурацию. На панели инструментов откройте раскрывающийся список Конфигурация и выберите Управление конфигурациями.

    Screenshot of the Configuration drop-down in the toolbar. Manage Configurations... is selected.

    Откроется редактор параметров CMake. Щелкните зеленый значок плюса в левой части редактора, чтобы добавить новую конфигурацию. Откроется диалоговое окно "Добавить конфигурацию в CMake Параметры:

    Screenshot of the Add Configuration to CMakeSettings dialog. It has entries such as Linux-Debug, x86-Debug. x64-Debug is selected.

    В этом диалоговом окне представлены все конфигурации, которые входят в состав Visual Studio, а также все созданные вами настраиваемые конфигурации. Если вы хотите продолжить использовать конфигурацию x64-Debug , которая должна быть первой, которую вы добавляете. Выберите x64-Debug, а затем нажмите кнопку Выбрать. Visual Studio создает файл CMakeSettings.json с конфигурацией для x64-Debug и сохраняет ее на диске. Вы можете назвать конфигурацию как угодно, изменив параметр имени непосредственно в CMakeSettings.json.

Установка точки останова, сборка и запуск в Windows

На этом шаге мы отлаживать пример программы, демонстрирующей библиотеку Маркированных физики.

  1. В обозревателе решений выберите AppBasicExampleGui и разверните его.

  2. Откройте файл BasicExample.cpp.

  3. Задайте точку останова, которая будет выполняться при щелчке кнопки в работающем приложении. Событие щелчка обрабатывается в методе внутри вспомогательного класса. Для быстрого перехода:

    1. Выберите CommonRigidBodyBase, из которого происходит структура BasicExample, около строки 30.

    2. Щелкните правой кнопкой мыши и выберите Перейти к определению. Вы находитесь в заголовке CommonRigidBodyBase.h.

    3. В представлении браузера выше вы увидите, что находитесь в CommonRigidBodyBase. Справа можно выбрать элементы для проверки. Щелкните раскрывающийся список и выберите mouseButtonCallback, чтобы перейти к определению функции в заголовке.

      Screenshot of the Member list toolbar drop-down in the editor window. It list functions such as getRayTo(in x, int y). The mouse button callback method is highlighted.

  4. Поместите точку останова на первой строке в этой функции. Она будет выполняться при нажатии кнопки мыши в окне приложения при запуске в отладчике Visual Studio.

  5. Чтобы запустить приложение, выберите на панели инструментов раскрывающийся список запуска. Это один с зеленым значком воспроизведения, который говорит "Выбрать элемент запуска". В раскрывающемся списке выберите AppBasicExampleGui.exe. Имя исполняемого файла теперь отображается на кнопке запуска:

    Screenshot of the Visual Studio toolbar launch drop-down. AppBasicExampleGui.exe is selected, but other options are visible such as App_ExampleBrowser.exe, App_HelloWorld.exe, and others.

  6. Нажмите кнопку запуска, чтобы выполнить сборку приложения и необходимых зависимостей, а затем запустите его с подключенным отладчиком Visual Studio. Через некоторое время появится работающее приложение:

    Screenshot of the running application. It's a collection of colored blocks on a yellow plane.

  7. Переместите указатель мыши в окно приложения, а затем нажмите кнопку для вызова точки останова. Точка останова снова выведет Visual Studio на передний план, а в редакторе отобразится строка, где выполнение приостановлено. Можно проверить переменные, объекты, потоки и память приложения, а также пошагово выполнить код. Выберите Продолжить, чтобы позволить приложению возобновить работу, и закройте его в обычном режиме. Или остановите выполнение в Visual Studio с помощью кнопки "Остановить".

Добавление конфигурации Linux и подключение к удаленному компьютеру

  1. Добавьте конфигурацию Linux. Щелкните правой кнопкой мыши файл CMakeSettings.json в обозревателе решений и выберите Добавить конфигурацию. Вы увидите то же диалоговое окно "Добавление конфигурации в CMakeSettings", что и раньше. На этот раз выберите Linux-Debug, а затем сохраните файл CMakeSettings.json (CTRL+S).

  2. Visual Studio 2019 версии 16.6 или более поздней версии: прокрутите вниз в редакторе параметров CMake и выберите Показать дополнительные параметры. В качестве генератора CMake выберите Unix Makefiles, а затем сохраните файл CMakeSettings.json (CTRL+S).

  3. В раскрывающемся списке конфигураций выберите Linux-Debug.

    Screenshot of the launch configuration drop-down. The visible options are: x64-Debug, Linux-Debug, and Manage Configurations.

    Если это первое подключение к системе Linux, откроется диалоговое окно Подключение к удаленной системе.

    Screenshot of the Visual Studio Connect to Remote System dialog.

    В диалоговом окне есть поля для имени узла, порта, имени пользователя, типа проверки подлинности и пароля. Все поля пусты, кроме порта, имеют значение 22, а для типа проверки подлинности задан пароль.

    Если вы уже добавили удаленное подключение, вы можете открыть это окно, перейдя к параметру "Параметры > кроссплатформенных > инструментов>" диспетчер подключений.

  4. Укажите сведения о подключении к компьютеру Linux и нажмите Подключить. Visual Studio добавляет этот компьютер в CMakeSettings.json как подключение по умолчанию для Linux-Debug. Он также извлекает заголовки из удаленного компьютера, чтобы вы могли получить IntelliSense специально для этого удаленного подключения. Затем Visual Studio отправляет файлы на удаленный компьютер и создает кэш CMake в удаленной системе. Эти действия могут занять некоторое время в зависимости от скорости сети и мощности удаленного компьютера. Вы знаете, что оно завершено, когда в окне вывода CMake появится сообщение "Целевое извлечение сведений".

Установка точки останова, сборка и запуск в Linux

Так как это классическое приложение, необходимо предоставить дополнительные сведения о конфигурации отладки.

  1. В представлении целевых объектов CMake щелкните правой кнопкой мыши AppBasicExampleGui и выберите Параметры отладки и запуска, чтобы открыть файл launch.vs.json, который находится в скрытой вложенной папке .vs. Этот локальный файл для среды разработки. Вы можете переместить его в корень проекта, если хотите проверить его и сохранить для своей команды. В этот файл была добавлена конфигурация для AppBasicExampleGui. Эти параметры по умолчанию работают в большинстве случаев, но не здесь. Поскольку это классическое приложение, необходимо предоставить некоторые дополнительные сведения, чтобы запустить программу и увидеть ее на компьютере Linux.

  2. Чтобы найти значение переменной среды DISPLAY на компьютере Linux, выполните следующую команду:

    echo $DISPLAY
    

    В конфигурации для AppBasicExampleGui существует массив параметров "pipeArgs". В нем есть строка "${debuggerCommand}". Это команда, которая запускается gdb на удаленном компьютере. Visual Studio необходимо экспортировать соответствующие элементы в этот контекст перед выполнением этой команды. Например, если значение экрана — :1, измените эту строку следующим образом:

    "export DISPLAY=:1;${debuggerCommand}",
    
  3. Запустите приложение и выполните его отладку. На панели инструментов откройте раскрывающийся список Выбрать элемент запуска и выберите AppBasicExampleGui. Затем либо выберите зеленый значок воспроизведения на панели инструментов, либо нажмите клавишу F5. Приложение и его зависимости будут собраны на удаленном компьютере Linux. После чего приложение будет запущено с подключенным отладчиком Visual Studio. На удаленном компьютере Linux вы увидите окно приложения.

  4. Переместите указатель мыши в окно приложения, а затем нажмите кнопку. Сработает точка останова. Выполнение программы приостанавливается, Visual Studio возвращается на передний план, вы увидите точку останова. Кроме того, вы увидите окно консоли Linux в Visual Studio. В этом окне предоставлены выходные данные с удаленного компьютера Linux, а также оно может принимать входные данные для stdin. Как и любое окно Visual Studio, вы можете закрепить его в предпочтительном месте. Его расположение сохраняется в будущих сеансах.

    Screenshot of the Visual Studio Linux Console Window.

    Выходные данные в окне указывают на то, что функции C11 динамически загружаются с помощью dlopen/dlsym, создается контекст GL 3.0, а контекст отрисовки Direct GLX получен и сделан текущим. Окно содержит различные сведения о версии для GL_VENDOR, GL_VERSION, GL_SHADING_LANGUAGE_VERSION и т. д.

  5. Вы можете проверить переменные, объекты, потоки и память приложения и пошагово выполнить код с помощью Visual Studio. Но на этот раз вы выполняете все это на удаленном компьютере Linux вместо локальной среды Windows. Вы можете нажать кнопку "Продолжить ", чтобы разрешить приложению возобновить работу и выйти обычно или выбрать кнопку остановки, как и при локальном выполнении.

  6. Посмотрите на окно стека вызовов и увидите вызовы к x11OpenGLWindow, поскольку среда Visual Studio запустила приложение в Linux.

    The Visual Studio Call Stack window, showing Linux call stack.

    В вызове показана точка останова в CommonRigidBodyBase::mouseMoveCallback, а также вызовы, которые предшествуют ему, например OnMouseMove, X11OpenGLWindow::p umpMessage и т. д.

Полученные навыки

В этом руководстве вы клонировали базу кода непосредственно из GitHub. Вы создали, запустили и отладили его в Windows без изменений. Затем вы использовали эту же самую базу кода, с незначительными изменениями конфигурации, для сборки, запуска и отладки на удаленном компьютере Linux.

Следующие шаги

Дополнительные сведения о настройке и отладке проектов CMake в Visual Studio: