Bagikan melalui


Tutorial: Membuat proyek lintas platform C++ 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 belajar 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, , sshrsync, 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, mengkloning repositori bullet3 dari GitHub di komputer tempat Visual Studio terinstal.

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.

    Cuplikan layar menu Visual Studio memperlihatkan File > Buka > C Make. Folder belum dibuka. Ini hanya menu yang dibuka untuk titik ini.

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

    Cuplikan layar jendela Penjelajah Solusi dalam mode Tampilan Folder. Ini menampilkan konten proyek (file dan folder) dan CMakeLists.txt disorot.

    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.

    Cuplikan layar jendela Penjelajah Solusi dengan tombol Perlihatkan Semua File disorot. Tombol ini berada di atas jendela penjelajah solusi dan di sebelah kanan.

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."

    Cuplikan layar jendela keluaran. Daftar dropdown

    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.

    Tangkapan layar tombol Solusi dan Folder di Penjelajah Solusi. Tombol ini dipilih, memperlihatkan dropdown dengan pilihan c:\projects\bullet3 dan pilihan lain Tampilan Target CMake, yang terpilih.

    Berikut tampilan tersebut untuk Bullet SDK:

    Cuplikan layar tampilan target Solution Explorer CMake. Ini berisi entri yang disebut BULLET_PHYSICS Project, di mana entri seperti App_BasicExample (dapat dieksekusi), App_ExampleBrowser (dapat dieksekusi), dan sebagainya.

    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 eksplisit Windows x64-Debug

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 CMakeSettings.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.

    Cuplikan layar menu drop-down Konfigurasi di toolbar. Kelola Konfigurasi... dipilih.

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

    Cuplikan layar dialog Tambahkan Konfigurasi ke CMakeSettings. Ini memiliki entri seperti Linux-Debug, x86-Debug. x64-Debug dipilih.

    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 CMakeSettings.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 CMakeSettings.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. Tetapkan titik henti yang aktif saat Anda mengklik aplikasi yang berjalan. Peristiwa klik ditangani oleh metode dalam kelas pembantu. Untuk cepat sampai ke sana:

    1. Pilih CommonRigidBodyBase dari mana 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.

      Cuplikan layar menu drop-down toolbar daftar anggota di jendela editor. Ini mencantumkan fungsi seperti getRayTo(int x, int y). Metode callback tombol mouse disorot.

  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:

    Cuplikan layar menu drop-down peluncuran toolbar Visual Studio. AppBasicExampleGui.exe dipilih, tetapi opsi lain terlihat seperti App_ExampleBrowser.exe, App_HelloWorld.exe, dan lainnya.

  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:

    Cuplikan layar aplikasi yang sedang berjalan. Ini adalah kumpulan blok berwarna pada bidang kuning.

  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 CMakeSettings.json di tampilan Penjelajah Solusi dan pilih Tambahkan Konfigurasi. Anda melihat dialog Tambahkan Konfigurasi ke CMakeSettings yang sama seperti sebelumnya. Pilih Linux-Debug kali ini, lalu simpan file CMakeSettings.json (ctrl + s).

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

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

    Cuplikan layar drop-down konfigurasi peluncuran. Opsi yang terlihat adalah: x64-Debug, Linux-Debug, dan Kelola Konfigurasi.

    Jika ini pertama kalinya Anda menyambungkan ke sistem Linux, dialog Sambungkan ke Sistem Jarak Jauh akan muncul.

    Cuplikan layar dialog Visual Studio Connect ke Sistem Jarak Jauh.

    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 menavigasi ke Opsi > Alat > Pengelola Koneksi Lintas Platform>.

  4. Berikan informasi koneksi ke komputer Linux Anda dan pilih Sambungkan. Visual Studio menambahkan komputer tersebut untuk CMakeSettings.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.

    Cuplikan layar Jendela Konsol Linux Visual Studio.

    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.

    Jendela Tumpukan Panggilan Visual Studio, memperlihatkan tumpukan panggilan Linux.

    Callstack menunjukkan titik henti pada CommonRigidBodyBase::mouseMoveCallback, dan panggilan yang mendahuluinya seperti OnMouseMove, X11OpenGLWindow::pumpMessage, 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 selanjutnya

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