Apa yang dimaksud dengan direktori GCC default termasuk?


131

Ketika saya mengkompilasi file sumber yang sangat sederhana dengan gcc saya tidak perlu menentukan path ke file include standar seperti stdio atau stdlib.

Bagaimana GCC tahu cara menemukan file-file ini?

Apakah ada /usr/includepath bawaan di dalam, atau akan mendapatkan path dari komponen OS lainnya?

Jawaban:


188

Untuk mengetahui jalur default yang digunakan oleh gcc/ g++, dan juga prioritasnya, Anda perlu memeriksa output dari perintah berikut:

  1. Untuk C :
    gcc -xc -E -v -
  1. Untuk C ++ :
    gcc -xc++ -E -v -

Kredit jatuh ke tim Qt Creator .


5
cpp -v /dev/null -o /dev/null
Nehal J Wani

36

Ada perintah dengan output yang lebih pendek, yang memungkinkan untuk secara otomatis memotong jalur include dari garis, dimulai dengan satu spasi:

$ echo | gcc -Wp,-v -x c++ - -fsyntax-only
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/x86_64-redhat-linux
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/backward
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/include
 /usr/local/include
 /usr/include
End of search list.

Kredit jatuh ke halaman depan libc ++ .


1

Meskipun saya setuju dengan jawaban Ihor Kaharlichenko untuk mempertimbangkan C ++ dan dengan jawaban luar biasa.7 untuk kekompakan outputnya, mereka masih tidak lengkap untuk versi multi-lengkungan gcc karena pemrosesan input tergantung pada parameter baris perintah dan makro.

Contoh:

echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\ - -fsyntax-only hasil panen


/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../arm-none-eabi/include/newlib-nano                                                                                                              
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1                                                                        
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/arm-none-eabi/thumb/v7e-m/nofp                                         
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/backward                                                               
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            
 /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  

sedangkan echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-onlyhasil


/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1                                                                        
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/arm-none-eabi                                                          
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/backward                                                               
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  

Mantan doa memanfaatkan newlib(lihat baris 1 dan 3 dari output), yang terakhir pergi dengan standar termasuk. File umum di akhir daftar adalah contoh untuk penggunaan include_next.

Intinya: Selalu pertimbangkan semua opsi makro dan kompiler saat mencetak direktori include.


1

Jalankan saja yang berikut untuk mendaftar jalur pencarian default:

$(gcc -print-prog-name=cc1) -v

Ini tidak mencantumkan jalur sertakan. Hanya jalur program dan jalur perpustakaan
kayahr

cc1biasanya tidak dapat dipanggil secara langsung karena ini adalah perintah internal yang tidak ada di PATH. Mungkin Anda ingin mengedit jawaban Anda untuk menjelaskan di mana menemukan file.
kayahr
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.