Mặc định GCC bao gồm các thư mục là gì?


131

Khi tôi biên dịch một tệp nguồn rất đơn giản với gcc, tôi không phải chỉ định đường dẫn đến các tệp bao gồm tiêu chuẩn như stdio hoặc stdlib.

Làm thế nào để GCC biết cách tìm các tệp này?

Liệu nó có /usr/includeđường dẫn cứng bên trong, hoặc nó sẽ nhận được các đường dẫn từ các thành phần HĐH khác?

Câu trả lời:


188

Để tìm ra các đường dẫn mặc định được sử dụng bởi gcc/ g++, cũng như các ưu tiên của chúng, bạn cần kiểm tra đầu ra của các lệnh sau:

  1. Đối với C :
    gcc -xc -E -v -
  1. Đối với C ++ :
    gcc -xc++ -E -v -

Khoản tín dụng dành cho nhóm Qt Creator .


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

36

Có một lệnh với đầu ra ngắn hơn, cho phép tự động cắt các đường dẫn bao gồm từ các dòng, bắt đầu bằng một khoảng trắng:

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

Tín dụng đi vào libc ++ trên trang nhất .


1

Mặc dù tôi đồng ý với câu trả lời của Ihor Kaharlichenko khi xem xét C ++ và với câu trả lời của abyss.7 về sự gọn nhẹ của đầu ra, nhưng chúng vẫn chưa hoàn chỉnh cho các phiên bản gcc đa vòm vì việc xử lý đầu vào phụ thuộc vào các tham số và macro của dòng lệnh.

Thí dụ:

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 sản lượng


/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                                                                                  

trong khi echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-onlynăng suất


/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                                                                                  

Lệnh gọi trước sử dụng newlib(xem dòng 1 và 3 của đầu ra), lệnh sau đi với tiêu chuẩn bao gồm. Các tệp phổ biến ở cuối danh sách là một ví dụ cho việc sử dụng include_next.

Dòng dưới cùng: Luôn xem xét tất cả các tùy chọn macrotrình biên dịch khi in các thư mục bao gồm.


1

Chỉ cần chạy như sau để liệt kê các đường dẫn tìm kiếm mặc định:

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

Điều này không liệt kê các đường dẫn bao gồm. Chỉ đường dẫn chương trình và đường dẫn thư viện
kayahr

cc1thường không thể được gọi trực tiếp vì đó là một lệnh nội bộ không có trên PATH. Có lẽ bạn muốn chỉnh sửa câu trả lời của mình để mô tả nơi tìm tệp.
kayahr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.