เมื่อฉันรวบรวมไฟล์ต้นฉบับที่เรียบง่ายด้วย gcc ฉันไม่ต้องระบุพา ธ ไปยังไฟล์รวมมาตรฐานเช่น stdio หรือ stdlib
GCC รู้วิธีค้นหาไฟล์เหล่านี้ได้อย่างไร
มี/usr/include
เส้นทางเดินสายอยู่ภายในหรือไม่หรือจะได้รับเส้นทางจากส่วนประกอบระบบปฏิบัติการอื่น ๆ
เมื่อฉันรวบรวมไฟล์ต้นฉบับที่เรียบง่ายด้วย gcc ฉันไม่ต้องระบุพา ธ ไปยังไฟล์รวมมาตรฐานเช่น stdio หรือ stdlib
GCC รู้วิธีค้นหาไฟล์เหล่านี้ได้อย่างไร
มี/usr/include
เส้นทางเดินสายอยู่ภายในหรือไม่หรือจะได้รับเส้นทางจากส่วนประกอบระบบปฏิบัติการอื่น ๆ
คำตอบ:
ในการค้นหาเส้นทางเริ่มต้นที่ใช้โดยgcc
/ g++
รวมทั้งลำดับความสำคัญคุณต้องตรวจสอบผลลัพธ์ของคำสั่งต่อไปนี้:
gcc -xc -E -v -
gcc -xc++ -E -v -
เครดิตไปที่ทีม Qt Creator
มีคำสั่งที่มีเอาต์พุตที่สั้นกว่าซึ่งอนุญาตให้ตัดการรวมแพทออกจากบรรทัดโดยอัตโนมัติโดยเริ่มจากช่องว่างเดียว:
$ 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.
แม้ว่าฉันจะเห็นด้วยกับคำตอบของ 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
ไฟล์.
บรรทัดด้านล่าง: พิจารณาตัวเลือกมาโครและคอมไพเลอร์ทั้งหมดเสมอเมื่อพิมพ์ไดเร็กทอรีรวม
เพียงเรียกใช้สิ่งต่อไปนี้เพื่อแสดงรายการเส้นทางการค้นหาเริ่มต้น:
$(gcc -print-prog-name=cc1) -v
cc1
โดยปกติจะไม่สามารถเรียกได้โดยตรงเนื่องจากเป็นคำสั่งภายในซึ่งไม่ได้อยู่ใน PATH บางทีคุณอาจต้องการแก้ไขคำตอบเพื่ออธิบายตำแหน่งที่จะค้นหาไฟล์
cpp -v /dev/null -o /dev/null