Samouczek: tworzenie projektów międzyplatformowych w języku C++ w programie Visual Studio

Programowanie w programach Visual Studio C i C++ nie jest już przeznaczone dla systemu Windows. W tym samouczku pokazano, jak używać programu Visual Studio dla programowania międzyplatformowego w systemach Windows i Linux. Jest ona oparta na narzędziach CMake, więc nie trzeba tworzyć ani generować projektów programu Visual Studio. Po otwarciu folderu zawierającego plik CMakeLists.txt program Visual Studio automatycznie konfiguruje funkcję IntelliSense i ustawienia kompilacji. Możesz szybko rozpocząć edytowanie, kompilowanie i debugowanie kodu lokalnie w systemie Windows. Następnie przełącz konfigurację, aby wykonać to samo w systemie Linux— wszystko z poziomu programu Visual Studio.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • klonowanie projektu CMake typu open source z usługi GitHub
  • otwieranie projektu w programie Visual Studio
  • kompilowanie i debugowanie docelowego pliku wykonywalnego w systemie Windows
  • dodawanie połączenia z maszyną z systemem Linux
  • kompilowanie i debugowanie tego samego obiektu docelowego w systemie Linux

Wymagania wstępne

  • Konfigurowanie programu Visual Studio dla programowania międzyplatformowego języka C++

    • Najpierw zainstaluj program Visual Studio i wybierz programowanie aplikacji klasycznych przy użyciu języków C++ i Linux z obciążeniami języka C++. Ta minimalna instalacja wynosi tylko 3 GB. W zależności od szybkości pobierania instalacja nie powinna trwać dłużej niż 10 minut.
  • Konfigurowanie maszyny z systemem Linux na potrzeby programowania międzyplatformowego języka C++

    • Program Visual Studio nie wymaga żadnej określonej dystrybucji systemu Linux. System operacyjny może być uruchomiony na maszynie fizycznej, na maszynie wirtualnej lub w chmurze. Można również użyć Podsystem Windows dla systemu Linux (WSL). Jednak w tym samouczku wymagane jest środowisko graficzne. WSL nie jest tutaj zalecany, ponieważ jest przeznaczony głównie do operacji wiersza polecenia.

    • Program Visual Studio wymaga tych narzędzi na maszynie z systemem Linux: kompilatory języka C++, gdb, ssh, rsync, makei zip. W systemach opartych na debianie można użyć tego polecenia, aby zainstalować te zależności:

      sudo apt install -y openssh-server build-essential gdb rsync make zip
      
    • Program Visual Studio wymaga najnowszej wersji narzędzia CMake na maszynie z systemem Linux z włączonym trybem serwera (co najmniej 3.8). Firma Microsoft tworzy uniwersalną kompilację narzędzia CMake, którą można zainstalować w dowolnej dystrybucji systemu Linux. Zalecamy użycie tej kompilacji, aby upewnić się, że masz najnowsze funkcje. Pliki binarne narzędzia CMake można pobrać z rozwidlenia microsoft repozytorium CMake w usłudze GitHub. Przejdź do tej strony i pobierz wersję zgodną z architekturą systemową na maszynie z systemem Linux, a następnie oznacz ją jako plik wykonywalny:

      wget <path to binary>
      chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
      
    • Możesz zobaczyć opcje uruchamiania skryptu za pomocą polecenia --help. Zalecamy użycie -prefix opcji w celu określenia instalacji w ścieżce /usr, ponieważ /usr/bin jest domyślną lokalizacją, w której program Visual Studio szuka narzędzia CMake. W poniższym przykładzie przedstawiono skrypt systemu Linux-x86_64. Zmień ją zgodnie z potrzebami, jeśli używasz innej platformy docelowej.

      sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
      
  • Usługa Git dla systemu Windows zainstalowana na maszynie z systemem Windows.

  • Konto usługi GitHub.

Klonowanie projektu CMake typu open source z usługi GitHub

W tym samouczku jest używany zestaw SDK narzędzia Bullet Physics w usłudze GitHub. Zapewnia wykrywanie kolizji i symulacje fizyki dla wielu aplikacji. Zestaw SDK zawiera przykładowe programy wykonywalne, które kompilować i uruchamiać bez konieczności pisania innego kodu. Ten samouczek nie modyfikuje żadnego kodu źródłowego ani skryptów kompilacji. Aby rozpocząć, sklonuj repozytorium bullet3 z usługi GitHub na maszynie, na której zainstalowano program Visual Studio.

git clone https://github.com/bulletphysics/bullet3.git
  1. W menu głównym programu Visual Studio wybierz pozycję Plik > Otwórz > narzędzie CMake. Przejdź do CMakeLists.txt pliku w katalogu głównym pobranego repozytorium bullet3.

    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.

    Po otwarciu folderu struktura folderów stanie się widoczna w Eksplorator rozwiązań.

    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.

    Ten widok pokazuje dokładnie, co znajduje się na dysku, a nie w widoku logicznym lub filtrowany. Domyślnie nie wyświetla ukrytych plików.

  2. Wybierz przycisk Pokaż wszystkie pliki, aby wyświetlić wszystkie pliki w folderze.

    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.

Przełączanie do widoku elementów docelowych

Po otwarciu folderu korzystającego z narzędzia CMake program Visual Studio automatycznie generuje pamięć podręczną CMake. Ta operacja może potrwać kilka chwil, w zależności od rozmiaru projektu.

  1. W oknie Dane wyjściowe wybierz pozycję Pokaż dane wyjściowe, a następnie wybierz pozycję CMake, aby monitorować stan procesu generowania pamięci podręcznej. Po zakończeniu operacji jest wyświetlany komunikat "Gotowe wyodrębnianie informacji docelowych".

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

    Po zakończeniu tej operacji zostanie skonfigurowana funkcja IntelliSense. Możesz skompilować projekt i debugować aplikację. Program Visual Studio wyświetla teraz logiczny widok rozwiązania na podstawie elementów docelowych określonych w plikach CMakeLists.

  2. Użyj przycisku Rozwiązania i foldery w Eksplorator rozwiązań, aby przełączyć się do widoku obiektów docelowych narzędzia 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.

    Oto jak wygląda ten widok dla zestawu SDK punktora:

    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.

    Widok obiektów docelowych zapewnia bardziej intuicyjny widok tego, co znajduje się w tej bazie źródłowej. Niektóre obiekty docelowe to biblioteki, a inne — pliki wykonywalne.

  3. Rozwiń węzeł w widoku obiektów docelowych narzędzia CMake, aby wyświetlić jego pliki kodu źródłowego, gdziekolwiek te pliki mogą znajdować się na dysku.

Dodawanie jawnej konfiguracji systemu Windows x64-Debug

Program Visual Studio tworzy domyślną konfigurację x64-Debug dla systemu Windows. Konfiguracje to sposób, w jaki program Visual Studio rozumie, jaki element docelowy platformy będzie używany dla narzędzia CMake. Domyślna konfiguracja nie jest reprezentowana na dysku. Po jawnym dodaniu konfiguracji program Visual Studio tworzy plik o nazwie CMake Ustawienia.json. Zostanie on wypełniony ustawieniami dla wszystkich konfiguracji, które określisz.

  1. Dodaj nową konfigurację. Otwórz listę rozwijaną Konfiguracja na pasku narzędzi i wybierz pozycję Zarządzaj konfiguracjami.

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

    Zostanie otwarty edytor Ustawienia narzędzia CMake. Wybierz zielony znak plus po lewej stronie edytora, aby dodać nową konfigurację. Zostanie wyświetlone okno dialogowe Dodawanie konfiguracji do narzędzia CMake Ustawienia:

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

    W tym oknie dialogowym zostaną wyświetlone wszystkie konfiguracje dołączone do programu Visual Studio oraz wszystkie utworzone konfiguracje niestandardowe. Jeśli chcesz nadal używać konfiguracji x64-Debug, która powinna być pierwszą dodaną konfiguracją. Wybierz pozycję x64-Debug, a następnie wybierz przycisk Wybierz . Program Visual Studio tworzy plik CMake Ustawienia.json z konfiguracją x64-Debug i zapisuje go na dysku. Możesz użyć dowolnych nazw konfiguracji, zmieniając parametr nazwy bezpośrednio w pliku CMake Ustawienia.json.

Ustawianie punktu przerwania, kompilacji i uruchamiania w systemie Windows

W tym kroku debugujemy przykładowy program, który demonstruje bibliotekę Bullet Physics.

  1. W Eksplorator rozwiązań wybierz pozycję AppBasicExampleGui i rozwiń ją.

  2. Otwórz plik BasicExample.cpp.

  3. Ustaw punkt przerwania, który zostanie trafiony po kliknięciu uruchomionej aplikacji. Zdarzenie kliknięcia jest obsługiwane w metodzie w klasie pomocniczej. Aby szybko się tam dostać:

    1. Wybierz CommonRigidBodyBase , że struktura BasicExample jest pochodna. To około linii 30.

    2. Kliknij prawym przyciskiem myszy i wybierz polecenie Przejdź do definicji. Teraz znajdujesz się w nagłówku CommonRigidBodyBase.h.

    3. W widoku przeglądarki powyżej źródła powinna zostać wyświetlona CommonRigidBodyBasewartość . Po prawej stronie możesz wybrać członków do zbadania. Otwórz listę rozwijaną i wybierz, mouseButtonCallback aby przejść do definicji tej funkcji w nagłówku.

      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. Umieść punkt przerwania w pierwszym wierszu tej funkcji. Zostanie on trafiony po kliknięciu przycisku myszy w oknie aplikacji po uruchomieniu w debugerze programu Visual Studio.

  5. Aby uruchomić aplikację, wybierz listę rozwijaną uruchamiania na pasku narzędzi. Jest to ikona zielonego odtwarzania z napisem "Wybierz element startowy". Z listy rozwijanej wybierz pozycję AppBasicExampleGui.exe. Nazwa pliku wykonywalnego jest teraz wyświetlana na przycisku uruchamiania:

    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. Wybierz przycisk uruchamiania, aby skompilować aplikację i niezbędne zależności, a następnie uruchom go za pomocą dołączonego debugera programu Visual Studio. Po kilku chwilach zostanie wyświetlona uruchomiona aplikacja:

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

  7. Przenieś wskaźnik myszy do okna aplikacji, a następnie kliknij przycisk, aby wyzwolić punkt przerwania. Punkt przerwania przywraca program Visual Studio na pierwszym planie, a edytor pokazuje wiersz, w którym jest wstrzymane wykonywanie. Zmienne aplikacji, obiekty, wątki i pamięć można sprawdzić interaktywnie lub przejść przez kod. Wybierz pozycję Kontynuuj , aby umożliwić wznowienie aplikacji, a następnie zamknij ją normalnie. Możesz też zatrzymać wykonywanie w programie Visual Studio za pomocą przycisku Zatrzymaj.

Dodawanie konfiguracji systemu Linux i nawiązywanie połączenia z maszyną zdalną

  1. Dodaj konfigurację systemu Linux. Kliknij prawym przyciskiem myszy plik CMake Ustawienia.json w widoku Eksplorator rozwiązań i wybierz polecenie Dodaj konfigurację. Zostanie wyświetlone to samo okno dialogowe Dodawanie konfiguracji do narzędzia CMake Ustawienia jak poprzednio. Wybierz pozycję Linux-Debuguj tym razem, a następnie zapisz plik CMake Ustawienia.json (ctrl + s).

  2. Program Visual Studio 2019 w wersji 16.6 lub nowszej Przewiń w dół do dołu edytora Ustawienia narzędzia CMake i wybierz pozycję Pokaż ustawienia zaawansowane. Wybierz pozycję Unix Makefiles jako generator CMake, a następnie zapisz plik CMake Ustawienia.json (ctrl + s).

  3. Wybierz pozycję Linux-Debug na liście rozwijanej konfiguracji.

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

    Jeśli po raz pierwszy łączysz się z systemem Linux, zostanie wyświetlone okno dialogowe Połączenie z systemem zdalnym.

    Screenshot of the Visual Studio Connect to Remote System dialog.

    Okno dialogowe zawiera pola nazwy hosta, portu, nazwy użytkownika, typu uwierzytelniania i hasła. Wszystkie pola są puste, z wyjątkiem port jest ustawiony na 22, a typ uwierzytelniania jest ustawiony na Hasło.

    Jeśli dodano już połączenie zdalne, możesz otworzyć to okno, przechodząc do pozycji Narzędzia > Opcje > międzyplatformowe > Połączenie Ion Manager.

  4. Podaj informacje o połączeniu z maszyną z systemem Linux i wybierz pozycję Połączenie. Program Visual Studio dodaje ten komputer do pliku CMake Ustawienia.json jako domyślne połączenie dla systemu Linux-Debug. Pobiera również nagłówki z komputera zdalnego, dzięki czemu funkcja IntelliSense jest specyficzna dla tego połączenia zdalnego. Następnie program Visual Studio wysyła pliki do maszyny zdalnej i generuje pamięć podręczną CMake w systemie zdalnym. Te kroki mogą zająć trochę czasu, w zależności od szybkości sieci i zasilania maszyny zdalnej. Wiesz, że zostało ono ukończone, gdy w oknie danych wyjściowych narzędzia CMake pojawi się komunikat "Wyodrębnianie informacji docelowych".

Ustawianie punktu przerwania, kompilacji i uruchamiania w systemie Linux

Ponieważ jest to aplikacja klasyczna, musisz podać więcej informacji o konfiguracji do konfiguracji debugowania.

  1. W widoku Cele narzędzia CMake kliknij prawym przyciskiem myszy pozycję AppBasicExampleGui i wybierz polecenie Debuguj i uruchom Ustawienia, aby otworzyć plik launch.vs.json, który znajduje się w ukrytym podfolderze .vs. Ten plik jest lokalny dla środowiska deweloperskiego. Możesz przenieść go do katalogu głównego projektu, jeśli chcesz go zaewidencjonować i zapisać go w zespole. W tym pliku dodano konfigurację dla elementu AppBasicExampleGui. Te ustawienia domyślne działają w większości przypadków, ale nie tutaj. Ponieważ jest to aplikacja klasyczna, musisz podać dodatkowe informacje, aby uruchomić program, aby zobaczyć go na maszynie z systemem Linux.

  2. Aby znaleźć wartość zmiennej DISPLAY środowiskowej na maszynie z systemem Linux, uruchom następujące polecenie:

    echo $DISPLAY
    

    W konfiguracji elementu AppBasicExampleGui istnieje tablica parametrów "pipeArgs". Zawiera wiersz "${debuggerCommand}". Jest to polecenie uruchamiane gdb na maszynie zdalnej. Program Visual Studio musi wyeksportować ekran do tego kontekstu przed uruchomieniem tego polecenia. Jeśli na przykład wartość wyświetlania to :1, zmodyfikuj ten wiersz w następujący sposób:

    "export DISPLAY=:1;${debuggerCommand}",
    
  3. Uruchom i debuguj aplikację. Otwórz listę rozwijaną Wybierz element startowy na pasku narzędzi i wybierz pozycję AppBasicExampleGui. Następnie wybierz zieloną ikonę odtwarzania na pasku narzędzi lub naciśnij klawisz F5. Aplikacja i jej zależności są tworzone na zdalnej maszynie z systemem Linux, a następnie uruchamiane za pomocą dołączonego debugera programu Visual Studio. Na zdalnej maszynie z systemem Linux powinno zostać wyświetlone okno aplikacji.

  4. Przenieś mysz do okna aplikacji i kliknij przycisk. Punkt przerwania zostanie trafiony. Wykonywanie programu zostanie wstrzymane, program Visual Studio wróci na pierwszy plan i zobaczysz punkt przerwania. W programie Visual Studio powinien zostać również wyświetlone okno konsoli systemu Linux. Okno zawiera dane wyjściowe z zdalnej maszyny z systemem Linux i może również akceptować dane wejściowe dla programu stdin. Podobnie jak w przypadku każdego okna programu Visual Studio, możesz zadokować go, gdzie wolisz go zobaczyć. Jego pozycja jest utrwalana w przyszłych sesjach.

    Screenshot of the Visual Studio Linux Console Window.

    Dane wyjściowe w oknie wskazują, że funkcje C11 dynamicznie ładowane przy użyciu dlopen/dlsym jest OK. Kontekst GL 3.0 został utworzony, a kontekst renderowania Direct GLX uzyskany i uruchomiony jako bieżący. Okno zawiera różne informacje o wersji dla GL_VENDOR, GL_VERSION, GL_SHADING_LANGUAGE_VERSION itd.

  5. Zmienne, obiekty, wątki, pamięć i kod można sprawdzić interaktywnie przy użyciu programu Visual Studio. Ale tym razem robisz to wszystko na zdalnym komputerze z systemem Linux zamiast lokalnego środowiska systemu Windows. Możesz wybrać pozycję Kontynuuj , aby umożliwić aplikacji wznawianie i zamykanie normalnie. Możesz też wybrać przycisk Zatrzymaj, tak jak w przypadku wykonywania lokalnego.

  6. Zapoznaj się z oknem stosu wywołań i wyświetl wywołania, do x11OpenGLWindow których program Visual Studio uruchomił aplikację w systemie Linux.

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

    Stos wywołań pokazuje punkt przerwania w commonRigidBodyBase::mouseMoveCallback i wywołania, które poprzedzają go, takie jak OnMouseMove, X11OpenGLWindow::p umpMessage itd.

Podsumowanie

W tym samouczku sklonujesz bazę kodu bezpośrednio z usługi GitHub. Utworzono, uruchomiono i debugowane w systemie Windows bez modyfikacji. Następnie użyto tej samej bazy kodu z drobnymi zmianami konfiguracji do kompilowania, uruchamiania i debugowania na zdalnej maszynie z systemem Linux.

Następne kroki

Dowiedz się więcej na temat konfigurowania i debugowania projektów CMake w programie Visual Studio: