Udostępnij za pośrednictwem


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 działania:

  • 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ć podsystemu Windows dla systemu Linux (WSL). Jednak do tego samouczka wymagane jest posiadanie środowiska graficznego. WSL nie jest tutaj zalecany, ponieważ jest przeznaczony głównie do operacji linii poleceń.

    • 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 repozytorium CMake autorstwa Microsoft na 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 użyto SDK Bullet Physics dostępnego na GitHubie. 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 pliku CMakeLists.txt w katalogu głównym repozytorium bullet3, które pobrałeś.

    Zrzut ekranu przedstawiający menu programu Visual Studio z wyświetlonym poleceniem Plik > Otwórz > CMake. Folder nie został jeszcze otwarty. To jest tylko menu otwarte do tej pory.

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

    Zrzut ekranu przedstawiający okno Eksplorator rozwiązań w trybie widoku folderu. Wyświetla on zawartość projektu (pliki i foldery), a CMakeLists.txt jest wyróżniona.

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

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

    Zrzut ekranu przedstawiający okno Eksplorator rozwiązań z wyróżnionym przyciskiem Pokaż wszystkie pliki. Ten przycisk znajduje się w górnej części okna Eksploratora rozwiązań i po prawej stronie.

Przełączyć do widoku celów

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 wyjściowym wybierz pozycję Pokaż dane wyjściowe z, a następnie wybierz CMake, aby monitorować proces generowania pamięci podręcznej. Po zakończeniu operacji pojawia się komunikat "Wyodrębnianie informacji docelowych zakończone".

    Zrzut ekranu przedstawiający okno wyjściowe. Lista rozwijana Pokaż dane wyjściowe dla: jest ustawiona na 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 Eksploratorze rozwiązań , aby przełączyć się do widoku obiektów docelowych narzędzia CMake.

    Zrzut ekranu przedstawiający przycisk Rozwiązania i foldery w Eksploratorze rozwiązań. Jest wybrany, pokazując listę rozwijaną z opcją c:\projects\bullet3 i drugą opcją widoku docelowych narzędzi CMake, która jest zaznaczona.

    Oto jak wygląda ten widok dla Bullet SDK:

    Zrzut ekranu przedstawiający widok obiektów docelowych w Eksploratorze rozwiązań CMake. Zawiera on wpis o nazwie BULLET_PHYSICS Project, pod którym znajdują się takie wpisy, jak App_BasicExample (wykonywalny), App_ExampleBrowser (wykonywalny) i inne.

    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, jaka platforma docelowa zostanie użyta dla narzędzia CMake. Domyślna konfiguracja nie jest reprezentowana na dysku. Po jawnym dodaniu konfiguracji program Visual Studio tworzy plik o nazwie CMakeSettings.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.

    Zrzut ekranu przedstawiający listę rozwijaną „Konfiguracja” na pasku narzędzi. Wybrano opcję „Zarządzaj konfiguracjami...”.

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

    Zrzut ekranu przedstawiający okno dialogowe Dodawanie konfiguracji do CMakeSettings. Zawiera wpisy, takie jak Linux-Debug, x86-Debug. Wybrano pozycję x64-Debug.

    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 x64-Debug, a następnie wybierz przycisk Wybierz. Program Visual Studio tworzy plik CMakeSettings.json z konfiguracją x64-Debug i zapisuje go na dysku. Możesz użyć dowolnych nazw konfiguracji, zmieniając parametr nazwy bezpośrednio w CMakeSettings.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 Eksploratorze rozwiązań wybierz pozycję AppBasicExampleGui i rozwiń ją.

  2. Otwórz plik BasicExample.cpp.

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

    1. Wybierz CommonRigidBodyBase, z którego pochodzi struktura BasicExample. 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.

      Zrzut ekranu przedstawiający listę rozwijaną paska narzędzi listy członkowskiej w oknie edytora. Zawiera ona funkcje, takie jak getRayTo(int x, int y). Zaznaczona metoda wywołania zwrotnego przycisku myszy.

  4. Umieść punkt przerwania w pierwszym wierszu tej funkcji. Gdy aplikacja jest uruchamiana w debugerze Visual Studio, zdarzenie zostanie wywołane po kliknięciu przycisku myszy w jej oknie.

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

    Zrzut ekranu przedstawiający listę rozwijaną uruchamiania z paska narzędzi w programie Visual Studio. AppBasicExampleGui.exe jest zaznaczona, ale inne opcje są widoczne, takie jak App_ExampleBrowser.exe, App_HelloWorld.exei inne.

  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:

    Zrzut ekranu przedstawiający uruchomioną aplikację. Jest to kolekcja kolorowych bloków na żółtej płaszczyźnie.

  7. Przenieś kursor myszy do okna aplikacji, a następnie kliknij przycisk, aby wyzwolić punkt przerwania. Punkt przerwania przywraca program Visual Studio na wierzch, a edytor pokazuje wiersz, gdzie wykonywanie jest zawieszone. 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 CMakeSettings.json w widoku Eksplorator rozwiązań i wybierz polecenie Dodaj konfigurację. Zobaczysz to samo okno dialogowe dodawania konfiguracji do CMakeSettings, jak wcześniej. Wybierz Linux-Debug tym razem, a następnie zapisz plik CMakeSettings.json (ctrl + s).

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

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

    Zrzut ekranu przedstawiający listę rozwijaną konfiguracji uruchamiania. Widoczne opcje to: x64-Debug, Linux-Debug i Zarządzaj konfiguracjami.

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

    Zrzut ekranu przedstawiający okno dialogowe Łączenie programu Visual Studio z systemem zdalnym.

    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 połączenie zdalne zostało już dodane, możesz otworzyć to okno, przechodząc do pozycji Narzędzia > Opcje > międzyplatformowe > Menedżer połączeń.

  4. Podaj informacje o połączeniu z maszyną z systemem Linux i wybierz pozycję Połącz. Program Visual Studio dodaje ten komputer do CMakeSettings.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 proces jest zakończony, gdy w oknie danych wyjściowych narzędzia CMake pojawi się komunikat "Zakończono wyodrębnianie danych 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 umieścić go w repozytorium i zapisać go oraz udostępnić zespołowi. 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 desktopowa, musisz podać dodatkowe informacje, aby uruchomić program i 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 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.

    Zrzut ekranu przedstawiający okno konsoli programu Visual Studio dla systemu Linux.

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

  5. Możesz interaktywnie przeglądać zmienne aplikacji, obiekty, wątki, pamięć oraz przechodzić przez swój kod za pomocą 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.

    Okno stosu wywołań programu Visual Studio z wyświetlonym stosem wywołań systemu Linux.

    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 sklonowałeś repozytorium kodu bezpośrednio z usługi GitHub. Zbudowałeś, uruchomiłeś i debugowałeś to 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: