Pada sistem Unix, di mana gcc mencari file header?
Saya menghabiskan sedikit waktu pagi ini untuk mencari beberapa file header sistem, jadi saya pikir ini akan menjadi informasi yang baik untuk dimiliki di sini.
`gcc -print-prog-name=cc1plus` -v
Perintah ini menanyakan gcc preprocessor C ++ mana yang digunakannya, dan kemudian menanyakan preprocessor yang dicari termasuk.
Anda akan mendapatkan jawaban yang andal untuk pengaturan spesifik Anda.
Demikian juga untuk preprosesor C :
`gcc -print-prog-name=cpp` -v
cpp
bukancc1
? Pada debian jessie saya$(gcc -print-prog-name=cpp) -v
(dengan benar) memberikan satu jalan lagi, yaitu/usr/include/x86_64-linux-gnu
/dev/null
, jadi`gcc -print-prog-name=cc1` -v < /dev/null
.Ctrl
+D
, yang mengirim "end of file" di Unix-talk.Selain itu, gcc akan mencari di direktori yang ditentukan setelah
-I
opsi.sumber
Anda dapat membuat file yang mencoba memasukkan header sistem palsu. Jika Anda menjalankan gcc dalam mode verbose pada sumber seperti itu, ia akan mendaftar semua sistem termasuk lokasi saat mencari header palsu.
sumber
echo "#include <bogus.h>" | gcc -v -x c -
gcc -v -E - < /dev/null
ataucpp -v < /dev/null
cukup. Anda hanya perlu mendapatkan preprocessor untuk menjalankan , tidak peduli apa masukan yang dilihatnya. (Jalur pencarian dicetak selama startup, bahkan sebelum melihat inputnya.)Bagian CPP dari Manual GCC menunjukkan bahwa file header dapat ditemukan di direktori berikut:
sumber
Untuk mendapatkan GCC untuk mencetak set lengkap direktori di mana ia akan mencari header sistem, jalankan seperti ini:
yang akan menghasilkan output formulir
Jika Anda memiliki
-I
opsi -family pada baris perintah, mereka akan memengaruhi apa yang dicetak.(The
sed
perintah untuk menyingkirkan semua lainnya sampah doa ini cetakan, danLC_ALL=C
adalah untuk memastikan bahwased
perintah bekerja - yang "dimulai di sini" dan "End of daftar pencarian" frase yang diterjemahkan IIRC.)sumber
sumber
Himpunan jalur tempat kompiler mencari file header dapat diperiksa dengan perintah: -
cpp -v
Jika Anda mendeklarasikan #include "" , kompiler pertama-tama mencari di direktori file sumber saat ini dan jika tidak ditemukan, terus mencari di direktori yang diambil di atas.
Jika Anda mendeklarasikan #sertakan <> , kompiler akan mencari langsung di direktori yang diperoleh dari perintah di atas.
Sumber: - http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026
sumber
Orang dapat melihat path (tambahan) termasuk untuk program C dari bash dengan memeriksa yang berikut:
Jika ini kosong, ini dapat dimodifikasi untuk menambahkan default termasuk lokasi, dengan:
sumber
Ini adalah direktori yang gcc mencari secara default untuk file header yang ditentukan (mengingat bahwa file header termasuk dalam chevron <>); 1. / usr / local / include / --digunakan untuk file header pihak ke-3. 2. / usr / include / - digunakan untuk file header sistem.
Jika Anda memutuskan untuk meletakkan file header khusus Anda di tempat selain dari direktori yang disebutkan di atas, Anda dapat memasukkannya sebagai berikut: 1. menggunakan tanda kutip ("./custom_header_files/foo.h") dengan path file, alih-alih chevron dalam pernyataan sertakan. 2. menggunakan -I switch ketika mengkompilasi kode. gcc -I / home / user / custom_headers / -c foo.c -p foo.o Pada dasarnya -I switch memberitahu kompiler untuk pertama kali melihat dalam direktori yang ditentukan dengan -I switch (sebelum memeriksa direktori standar) .Ketika menggunakan -Saya beralih file header dapat dimasukkan menggunakan chevron.
sumber