GCC เริ่มต้นรวมไดเร็กทอรีอะไรบ้าง


131

เมื่อฉันรวบรวมไฟล์ต้นฉบับที่เรียบง่ายด้วย gcc ฉันไม่ต้องระบุพา ธ ไปยังไฟล์รวมมาตรฐานเช่น stdio หรือ stdlib

GCC รู้วิธีค้นหาไฟล์เหล่านี้ได้อย่างไร

มี/usr/includeเส้นทางเดินสายอยู่ภายในหรือไม่หรือจะได้รับเส้นทางจากส่วนประกอบระบบปฏิบัติการอื่น ๆ

คำตอบ:


188

ในการค้นหาเส้นทางเริ่มต้นที่ใช้โดยgcc/ g++รวมทั้งลำดับความสำคัญคุณต้องตรวจสอบผลลัพธ์ของคำสั่งต่อไปนี้:

  1. สำหรับC :
    gcc -xc -E -v -
  1. สำหรับC ++ :
    gcc -xc++ -E -v -

เครดิตไปที่ทีม Qt Creator


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

36

มีคำสั่งที่มีเอาต์พุตที่สั้นกว่าซึ่งอนุญาตให้ตัดการรวมแพทออกจากบรรทัดโดยอัตโนมัติโดยเริ่มจากช่องว่างเดียว:

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

เครดิตไปที่ libc ++ หน้าหนึ่ง


1

แม้ว่าฉันจะเห็นด้วยกับคำตอบของ Ihor Kaharlichenko สำหรับการพิจารณา C ++ และด้วยคำตอบของ abyss.7 สำหรับความกะทัดรัดของเอาต์พุต แต่ก็ยังไม่สมบูรณ์สำหรับ gcc เวอร์ชัน multi-arch เนื่องจากการประมวลผลอินพุตขึ้นอยู่กับพารามิเตอร์บรรทัดคำสั่งและมาโคร

ตัวอย่าง:

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 อัตราผลตอบแทน


/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                                                                                  

ในขณะที่echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-onlyผลตอบแทน


/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                                                                                  

การเรียกใช้ในอดีตใช้newlib(ดูบรรทัดที่ 1 และ 3 ของเอาต์พุต) ส่วนหลังจะรวมถึงมาตรฐาน ไฟล์ทั่วไปที่ท้ายรายการเป็นตัวอย่างสำหรับการใช้งานinclude_nextไฟล์.

บรรทัดด้านล่าง: พิจารณาตัวเลือกมาโครและคอมไพเลอร์ทั้งหมดเสมอเมื่อพิมพ์ไดเร็กทอรีรวม


1

เพียงเรียกใช้สิ่งต่อไปนี้เพื่อแสดงรายการเส้นทางการค้นหาเริ่มต้น:

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

นี่ไม่ได้แสดงรายการเส้นทางรวม เฉพาะเส้นทางโปรแกรมและเส้นทางไลบรารี
kayahr

cc1โดยปกติจะไม่สามารถเรียกได้โดยตรงเนื่องจากเป็นคำสั่งภายในซึ่งไม่ได้อยู่ใน PATH บางทีคุณอาจต้องการแก้ไขคำตอบเพื่ออธิบายตำแหน่งที่จะค้นหาไฟล์
kayahr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.