visual c ++: #include file dari project lain dalam solusi yang sama


113

Saya sedang mengerjakan game menggunakan Visual C ++. Saya memiliki beberapa komponen dalam proyek terpisah, dan telah mengatur ketergantungan proyek. Bagaimana cara #memasukkan berkas tajuk dari proyek lain? Saya tidak tahu bagaimana menggunakan kelas dari satu proyek ke proyek lain.

Jawaban:


199

Pengaturan untuk compiler

Dalam proyek di mana Anda ingin #include file header dari proyek lain , Anda perlu menambahkan jalur dari file header ke dalam bagian Sertakan Direktori Tambahan dalam konfigurasi proyek.

Untuk mengakses konfigurasi proyek:

  1. Klik kanan pada proyek tersebut, dan pilih Properties.
  2. Pilih Properti Konfigurasi-> C / C ++ -> Umum.
  3. Atur jalur di bawah Direktori Sertakan Tambahan.

Bagaimana cara memasukkan

Untuk menyertakan file header , cukup tulis yang berikut di kode Anda:

#include "filename.h"

Perhatikan bahwa Anda tidak perlu menentukan jalur di sini, karena Anda sudah menyertakan direktori di Direktori Sertakan Tambahan, sehingga Visual Studio akan tahu di mana mencarinya.

Jika Anda tidak ingin menambahkan setiap lokasi file header dalam pengaturan proyek, Anda bisa memasukkan direktori sampai titik tertentu, lalu #include relatif ke titik tersebut:

// In project settings
Additional Include Directories    ..\..\libroot

// In code
#include "lib1/lib1.h"    // path is relative to libroot
#include "lib2/lib2.h"    // path is relative to libroot

Pengaturan untuk linker

Jika menggunakan pustaka statis (mis. File .lib), Anda juga perlu menambahkan pustaka ke input linker, sehingga pada saat penautan simbol dapat ditautkan (jika tidak, Anda akan mendapatkan simbol yang belum terselesaikan):

  1. Klik kanan pada proyek tersebut, dan pilih Properties.
  2. Pilih Properti Konfigurasi-> Linker-> Input
  3. Masuk ke perpustakaan di bawah Dependensi Tambahan.

6
Bolehkah saya mengatakan bahwa setelah pagi membaca jawaban tentang subjek ini di SO, jawaban Anda adalah yang paling jelas dan komprehensif yang pernah saya temukan. Selamat dan terima kasih!
David Hall

9
Ada saran dari pengguna anonim seperti, "Saat Anda menyertakan Path untuk perpustakaan, pastikan Anda memasukkannya dalam tanda kutip jika jalur memiliki spasi". Menambahkannya sebagai komentar, jika itu membantu siapa pun.
iDev

2
Satu cara tambahan untuk menyertakan pustaka statis adalah, di dalam "ketergantungan proyek" solusi, untuk mengonfigurasi proyek menjadi ketergantungan pustaka statis yang akan ditautkan. Butuh waktu lama bagi saya untuk mencari tahu mengapa salah satu proyek saya ditautkan dengan benar dan yang lainnya tidak - inilah alasannya.
Stuart Wood

3
Saya ingin menunjukkan bahwa menggunakan "Direktori Sertakan Tambahan" dengan direktori file sumber proyek lain bisa menjadi ide yang buruk. Proyek lain mungkin memiliki file dengan nama yang sama (sangat mungkin jika Anda menggunakan header yang telah dikompilasi sebelumnya untuk masing-masing file). Secara pribadi, saya lebih suka menambahkan folder induk dari file sumber proyek, jadi Anda setidaknya dapat menentukan sendiri, misalnya #include "proj2\include.h". Memiliki banyak proyek per solusi tampaknya sangat diarahkan ke bahasa NET, karena mereka digunakan dengan sangat berbeda. Belum menemukan cara terbaik untuk mengatasi ini untuk proyek C ++.
Deji

18
Ini agak jelek. VS dapat melakukan banyak hal secara otomatis. Sulit dipercaya tidak ada solusi yang lebih baik dibandingkan dengan hard coding jalur - pengaturan ketergantungan proyek atau sejenisnya mungkin bagus.
Cookie

4

#includetidak ada hubungannya dengan proyek - ini hanya memberi tahu preprocessor "letakkan konten file header di sini". Jika Anda memberikan jalur yang menunjuk ke lokasi yang benar (bisa berupa jalur relatif, seperti ../file_Anda.h) itu akan dimasukkan dengan benar.

Anda akan, bagaimanapun, harus belajar tentang perpustakaan (perpustakaan statis / dinamis) untuk membuat proyek tersebut terhubung dengan benar - tapi itu pertanyaan lain.


3

Karena kedua proyek berada dalam solusi yang sama, ada cara yang lebih sederhana untuk menyertakan file dan linker seperti yang dijelaskan di https://docs.microsoft.com/en-us/cpp/build/adding-references-in-visual-cpp- proyek? view = vs-2019 :

  1. Sertakan dapat ditulis dalam jalur relatif (Misalnya #include "../libProject/libHeader.h").
  2. Untuk linker, klik kanan pada "Referensi", Klik Tambah Referensi, dan pilih proyek lain.

Bagus dan sederhana, tapi sayang sekali jalur relatif diperlukan di mana pun Anda menyertakan tajuk.
yoyo

2

Anda perlu menyetel jalur ke header di properti proyek sehingga compiler mencarinya saat mencoba mencari file header. Saya tidak dapat mengingat lokasi tepatnya, tetapi lihatlah properti Proyek dan Anda akan melihatnya.


Lokasi bisa di Properties> C / C ++> General> Additional Include Directories.
Mustafa Kemal

0

Cobalah untuk menghindari referensi jalur lengkap dalam perintah #include, baik absolut maupun relatif. Sebagai gantinya, tambahkan lokasi folder include proyek lain di pengaturan proyek Anda. Gunakan hanya subfolder di referensi jalur bila perlu. Dengan begitu, lebih mudah untuk memindahkan berbagai hal tanpa harus memperbarui kode Anda.


0

Memperluas jawaban @ Benav, pendekatan yang saya sukai adalah:

  1. Tambahkan direktori solusi ke jalur penyertaan Anda:
    • klik kanan pada proyek Anda di Solution Explorer
    • pilih Properties
    • pilih Semua Konfigurasi dan Semua Platform dari menu drop-down
    • pilih C / C ++> General
    • tambahkan $(SolutionDir)ke Direktori Sertakan Tambahan
  2. Tambahkan referensi ke setiap proyek yang ingin Anda gunakan:
    • klik kanan pada Referensi proyek Anda di Solution Explorer
    • pilih Tambahkan Referensi ...
    • pilih proyek yang ingin Anda rujuk

Sekarang Anda dapat menyertakan header dari proyek referensi Anda seperti:

#include "OtherProject/Header.h"

Catatan:

  • Ini mengasumsikan bahwa file solusi Anda disimpan satu folder dari setiap proyek Anda, yang merupakan organisasi default saat membuat proyek dengan Visual Studio.
  • Anda sekarang dapat menyertakan file apa pun dari jalur yang terkait dengan folder solusi, yang mungkin tidak diinginkan tetapi untuk kesederhanaan pendekatan, saya setuju dengan ini.
  • Langkah 2 tidak diperlukan untuk #includes, tetapi ini menetapkan dependensi build yang benar, yang mungkin Anda inginkan.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.