Bagikan melalui


Tutorial: Membuat proyek C++ lintas platform di Visual Studio

Pengembangan Visual Studio C dan C++ tidak hanya untuk Windows lagi. Tutorial ini menunjukkan cara menggunakan Visual Studio untuk pengembangan lintas platform C++ di Windows dan Linux. Ini didasarkan pada CMake, jadi Anda tidak perlu membuat atau menghasilkan proyek Visual Studio. Saat Anda membuka folder yang berisi file CMakeLists.txt, Visual Studio mengonfigurasi pengaturan IntelliSense dan build secara otomatis. Anda dapat dengan cepat mulai mengedit, membangun, dan men-debug kode Anda secara lokal di Windows. Kemudian, alihkan konfigurasi Anda untuk melakukan hal yang sama di Linux, semuanya dari dalam Visual Studio.

Dalam tutorial ini, Anda akan mempelajari cara:

  • mengkloning proyek CMake sumber terbuka dari GitHub
  • buka proyek di Visual Studio
  • membangun dan men-debug target yang dapat dieksekusi di Windows
  • menambahkan koneksi ke komputer Linux
  • membangun dan men-debug target yang sama di Linux

Prasyarat

  • Menyiapkan Visual Studio untuk Pengembangan C++ Lintas Platform

    • Pertama, instal Visual Studio dan pilih pengembangan Desktop dengan pengembangan C++ dan Linux dengan beban kerja C++. Penginstalan minimal ini hanya 3 GB. Tergantung pada kecepatan pengunduhan Anda, penginstalan tidak boleh memakan waktu lebih dari 10 menit.
  • Menyiapkan komputer Linux untuk Pengembangan C++ Lintas Platform

    • Visual Studio tidak memerlukan distribusi Linux tertentu. OS dapat berjalan pada komputer fisik, di VM, atau di cloud. Anda juga dapat menggunakan Subsistem Windows untuk Linux (WSL). Namun, untuk tutorial ini, lingkungan grafis diperlukan. WSL tidak disarankan di sini, karena ditujukan terutama untuk operasi baris perintah.

    • Visual Studio memerlukan alat-alat ini pada komputer Linux: pengkompilasi C++, gdb, , rsyncssh, make, dan zip. Pada sistem berbasis Debian, Anda dapat menggunakan perintah ini untuk menginstal dependensi ini:

      sudo apt install -y openssh-server build-essential gdb rsync make zip
      
    • Visual Studio memerlukan versi terbaru CMake pada komputer Linux yang mengaktifkan mode server (setidaknya 3,8). Microsoft menghasilkan build universal CMake yang dapat Anda instal di distro Linux apa pun. Kami sarankan Anda menggunakan build ini untuk memastikan bahwa Anda memiliki fitur terbaru. Anda bisa mendapatkan biner CMake dari fork Microsoft dari repositori CMake di GitHub. Buka halaman tersebut dan unduh versi yang cocok dengan arsitektur sistem di komputer Linux Anda, lalu tandai sebagai executable:

      wget <path to binary>
      chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
      
    • Anda dapat melihat opsi untuk menjalankan skrip dengan --help. Kami menyarankan agar Anda menggunakan -prefix opsi untuk menentukan penginstalan di jalur /usr, karena /usr/bin adalah lokasi default tempat Visual Studio mencari CMake. Contoh berikut menunjukkan skrip Linux-x86_64. Ubah sesuai kebutuhan jika Anda menggunakan platform target yang berbeda.

      sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh --skip-license --prefix=/usr
      
  • Git untuk windows terinstal pada komputer Windows Anda.

  • Akun GitHub.

Mengkloning proyek CMake sumber terbuka dari GitHub

Tutorial ini menggunakan Bullet Physics SDK di GitHub. Ini menyediakan deteksi tabrakan dan simulasi fisika untuk banyak aplikasi. SDK mencakup sampel program yang dapat dieksekusi yang mengkompilasi dan menjalankan tanpa harus menulis kode lain. Tutorial ini tidak mengubah kode sumber atau skrip build apa pun. Untuk memulai, kloning repositori bullet3 dari GitHub pada komputer tempat Anda menginstal Visual Studio.

git clone https://github.com/bulletphysics/bullet3.git
  1. Pada menu utama Visual Studio, pilih File > Buka > CMake. Navigasi ke CMakeLists.txt file di akar repositori bullet3 yang Anda unduh.

    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.

    Segera setelah Anda membuka folder, struktur folder Anda akan terlihat di Penjelajah Solusi.

    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.

    Tampilan ini menunjukkan dengan tepat apa yang ada di disk, bukan tampilan logis atau terfilter. Secara default, file tersebut tidak menampilkan file tersembunyi.

  2. Pilih tombol Perlihatkan semua file untuk melihat semua file dalam folder.

    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.

Beralih ke tampilan target

Saat Anda membuka folder yang menggunakan CMake, Visual Studio secara otomatis menghasilkan cache CMake. Operasi ini mungkin memakan waktu beberapa saat, tergantung pada ukuran proyek Anda.

  1. Di Jendela Output, pilih Tampilkan output dari lalu pilih CMake untuk memantau status proses pembuatan cache. Ketika operasi selesai, tertulis "Ekstraksi info target selesai."

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

    Setelah operasi ini selesai, IntelliSense dikonfigurasi. Anda dapat membangun proyek, dan men-debug aplikasi. Visual Studio sekarang menampilkan tampilan logis solusi, berdasarkan target yang ditentukan dalam file CMakeLists.

  2. Gunakan tombol Solusi dan Folder di Penjelajah Solusi untuk beralih ke Tampilan Target 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.

    Berikut tampilan tersebut untuk Bullet 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.

    Tampilan target memberikan tampilan yang lebih intuitif tentang apa yang ada di basis sumber ini. Anda dapat melihat beberapa target adalah pustaka dan yang lain dapat dieksekusi.

  3. Perluas simpul dalam Tampilan Target CMake untuk melihat file kode sumbernya, di mana pun file tersebut mungkin berada di disk.

Menambahkan konfigurasi Windows x64-Debug eksplisit

Visual Studio membuat konfigurasi x64-Debug default untuk Windows. Konfigurasi adalah bagaimana Visual Studio memahami target platform apa yang akan digunakan untuk CMake. Konfigurasi default tidak diwakili pada disk. Saat Anda secara eksplisit menambahkan konfigurasi, Visual Studio membuat file yang disebut CMake Pengaturan.json. Ini diisi dengan pengaturan untuk semua konfigurasi yang Anda tentukan.

  1. Tambahkan konfigurasi baru. Buka menu drop-down Konfigurasi di toolbar dan pilih Kelola Konfigurasi.

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

    CMake Pengaturan Editor terbuka. Pilih tanda plus hijau di sisi kiri editor untuk menambahkan konfigurasi baru. Dialog Tambahkan Konfigurasi ke CMake Pengaturan muncul:

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

    Dialog ini memperlihatkan semua konfigurasi yang disertakan dengan Visual Studio, ditambah konfigurasi kustom apa pun yang Anda buat. Jika Anda ingin terus menggunakan konfigurasi x64-Debug yang seharusnya menjadi konfigurasi pertama yang Anda tambahkan. Pilih x64-Debug, lalu pilih tombol Pilih . Visual Studio membuat file CMake Pengaturan.json dengan konfigurasi untuk x64-Debug, dan menyimpannya ke disk. Anda dapat menggunakan nama apa pun yang Anda suka untuk konfigurasi Anda dengan mengubah parameter nama langsung di CMake Pengaturan.json.

Mengatur titik henti, membangun, dan menjalankan di Windows

Dalam langkah ini, kami men-debug contoh program yang menunjukkan pustaka Bullet Physics.

  1. Di Penjelajah Solusi, pilih AppBasicExampleGui dan perluas.

  2. Buka file BasicExample.cpp.

  3. Atur titik henti yang terkena saat Anda mengklik aplikasi yang sedang berjalan. Peristiwa klik ditangani dalam metode dalam kelas pembantu. Untuk cepat sampai ke sana:

    1. Pilih CommonRigidBodyBase bahwa struct BasicExample berasal. Sekitar jalur 30.

    2. Klik kanan dan pilih Buka Definisi. Sekarang Anda berada di header CommonRigidBodyBase.h.

    3. Dalam tampilan browser di atas sumber Anda, Anda akan melihat bahwa Anda berada di CommonRigidBodyBase. Di sebelah kanan, Anda dapat memilih anggota untuk diperiksa. Buka menu drop-down dan pilih mouseButtonCallback untuk masuk ke definisi fungsi tersebut di header.

      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. Tempatkan titik henti pada baris pertama dalam fungsi ini. Ini akan terpukul ketika Anda mengklik tombol mouse di dalam jendela aplikasi, saat dijalankan di bawah debugger Visual Studio.

  5. Untuk meluncurkan aplikasi, pilih drop-down peluncuran di toolbar. Ini adalah salah satu dengan ikon putar hijau yang bertuliskan "Pilih Item Startup." Di menu drop-down, pilih AppBasicExampleGui.exe. Nama yang dapat dieksekusi sekarang ditampilkan pada tombol luncurkan:

    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. Pilih tombol luncurkan untuk membangun aplikasi dan dependensi yang diperlukan, lalu luncurkan dengan debugger Visual Studio yang terpasang. Setelah beberapa saat, aplikasi yang sedang berjalan muncul:

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

  7. Pindahkan mouse Anda ke jendela aplikasi, lalu klik tombol untuk memicu titik henti. Titik henti membawa Visual Studio kembali ke latar depan, dan editor menunjukkan garis tempat eksekusi dijeda. Anda dapat memeriksa variabel aplikasi, objek, utas, dan memori, atau menelusuri kode Anda secara interaktif. Pilih Lanjutkan untuk membiarkan aplikasi dilanjutkan, lalu keluar secara normal. Atau, hentikan eksekusi dalam Visual Studio dengan menggunakan tombol berhenti.

Menambahkan konfigurasi Linux dan menyambungkan ke komputer jarak jauh

  1. Tambahkan konfigurasi Linux. Klik kanan file CMake Pengaturan.json di tampilan Penjelajah Solusi dan pilih Tambahkan Konfigurasi. Anda melihat dialog Tambahkan Konfigurasi ke CMake Pengaturan yang sama seperti sebelumnya. Pilih Linux-Debug kali ini, lalu simpan file CMake Pengaturan.json (ctrl + s).

  2. Visual Studio 2019 versi 16.6 atau yang lebih baru Gulir ke bawah ke bagian bawah CMake Pengaturan Editor dan pilih Tampilkan pengaturan tingkat lanjut. Pilih Unix Makefiles sebagai generator CMake, lalu simpan file CMake Pengaturan.json (ctrl + s).

  3. Pilih Linux-Debug di menu drop-down konfigurasi.

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

    Jika ini pertama kalinya Anda terhubung ke sistem Linux, dialog Koneksi ke Sistem Jarak Jauh muncul.

    Screenshot of the Visual Studio Connect to Remote System dialog.

    Dialog memiliki bidang untuk nama host, port, nama pengguna, jenis autentikasi, dan kata sandi. Semua bidang kosong kecuali Port diatur ke 22 dan Jenis autentikasi diatur ke Kata Sandi.

    Jika Anda telah menambahkan koneksi jarak jauh, Anda dapat membuka jendela ini dengan membuka Opsi > Alat > Lintas Platform > Pengelola Sambungan.

  4. Berikan informasi koneksi ke komputer Linux Anda dan pilih Koneksi. Visual Studio menambahkan komputer tersebut ke CMake Pengaturan.json sebagai koneksi default Anda untuk Linux-Debug. Ini juga menarik header dari komputer jarak jauh Anda, sehingga Anda mendapatkan IntelliSense khusus untuk koneksi jarak jauh tersebut. Selanjutnya, Visual Studio mengirimkan file Anda ke komputer jarak jauh dan menghasilkan cache CMake pada sistem jarak jauh. Langkah-langkah ini mungkin memakan waktu, tergantung pada kecepatan jaringan dan daya komputer jarak jauh Anda. Anda tahu itu selesai ketika pesan "Ekstraksi info target selesai" muncul di jendela output CMake.

Mengatur titik henti, membangun, dan menjalankan di Linux

Karena ini adalah aplikasi desktop, Anda perlu memberikan beberapa informasi konfigurasi lainnya ke konfigurasi debug.

  1. Dalam tampilan Target CMake, klik kanan AppBasicExampleGui dan pilih Debug dan Luncurkan Pengaturan untuk membuka file launch.vs.json yang ada di subfolder .vs tersembunyi. File ini bersifat lokal untuk lingkungan pengembangan Anda. Anda dapat memindahkannya ke akar proyek Anda jika Anda ingin memeriksanya dan menyimpannya dengan tim Anda. Dalam file ini, konfigurasi telah ditambahkan untuk AppBasicExampleGui. Pengaturan default ini berfungsi dalam banyak kasus, tetapi tidak di sini. Karena ini adalah aplikasi desktop, Anda perlu memberikan beberapa informasi tambahan untuk meluncurkan program sehingga Anda dapat melihatnya di komputer Linux Anda.

  2. Untuk menemukan nilai variabel DISPLAY lingkungan di komputer Linux Anda, jalankan perintah ini:

    echo $DISPLAY
    

    Dalam konfigurasi untuk AppBasicExampleGui, ada array parameter, "pipeArgs". Ini berisi baris: "${debuggerCommand}". Ini adalah perintah yang diluncurkan gdb pada komputer jarak jauh. Visual Studio harus mengekspor tampilan ke dalam konteks ini sebelum perintah tersebut berjalan. Misalnya, jika nilai tampilan Anda adalah :1, ubah baris tersebut sebagai berikut:

    "export DISPLAY=:1;${debuggerCommand}",
    
  3. Luncurkan dan debug aplikasi Anda. Buka menu drop-down Pilih Item Startup di toolbar dan pilih AppBasicExampleGui. Selanjutnya, pilih ikon putar hijau di toolbar, atau tekan F5. Aplikasi dan dependensinya dibangun pada komputer Linux jarak jauh, lalu diluncurkan dengan debugger Visual Studio yang terpasang. Di komputer Linux jarak jauh, Anda akan melihat jendela aplikasi muncul.

  4. Pindahkan mouse Anda ke jendela aplikasi, dan klik tombol. Titik hentinya tertembak. Jeda eksekusi program, Visual Studio kembali ke latar depan, dan Anda melihat titik henti Anda. Anda juga akan melihat Jendela Konsol Linux muncul di Visual Studio. Jendela menyediakan output dari komputer Linux jarak jauh, dan juga dapat menerima input untuk stdin. Seperti jendela Visual Studio apa pun, Anda dapat menambungkannya di mana Anda lebih suka melihatnya. Posisinya dipertahankan dalam sesi mendatang.

    Screenshot of the Visual Studio Linux Console Window.

    Output di jendela menunjukkan bahwa fungsi C11 dimuat secara dinamis menggunakan dlopen/dlsym OK, konteks GL 3.0 telah dibuat dan konteks penyajian GLX Langsung yang diperoleh dan dibuat saat ini. Jendela memiliki berbagai informasi versi untuk GL_VENDOR, GL_VERSION, GL_SHADING_LANGUAGE_VERSION, dan sebagainya.

  5. Anda dapat memeriksa variabel aplikasi, objek, utas, memori, dan menelusuri kode Anda secara interaktif menggunakan Visual Studio. Tetapi kali ini, Anda melakukan semuanya pada komputer Linux jarak jauh alih-alih lingkungan Windows lokal Anda. Anda dapat memilih Lanjutkan untuk membiarkan aplikasi dilanjutkan dan keluar secara normal, atau Anda dapat memilih tombol berhenti, seperti halnya eksekusi lokal.

  6. Lihat jendela Call Stack dan lihat Panggilan ke x11OpenGLWindow karena Visual Studio meluncurkan aplikasi di Linux.

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

    Callstack menunjukkan titik henti pada CommonRigidBodyBase::mouseMoveCallback, dan panggilan yang mendahuluinya seperti OnMouseMove, X11OpenGLWindow::p umpMessage, dan sebagainya.

Apa yang Anda pelajari

Dalam tutorial ini, Anda mengkloning basis kode langsung dari GitHub. Anda membangun, menjalankan, dan men-debugnya di Windows tanpa modifikasi. Kemudian Anda menggunakan basis kode yang sama, dengan perubahan konfigurasi kecil, untuk membangun, menjalankan, dan men-debug pada komputer Linux jarak jauh.

Langkah berikutnya

Pelajari selengkapnya tentang mengonfigurasi dan men-debug proyek CMake di Visual Studio: