คอมไพล์หลายไฟล์
สร้างโปรแกรมที่ประกอบด้วยหลายไฟล์
คอมไพล์หลายไฟล์ เป็นบทเรียน C Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
จากต้นฉบับสู่โปรแกรม
การเปลี่ยนต้นฉบับภาษา C หลายไฟล์ให้เป็นโปรแกรมที่เรียกใช้งานได้มีสองขั้นตอน ได้แก่ การคอมไพล์ และ การเชื่อมโยง
ไฟล์ .c แต่ละไฟล์จะถูกคอมไพล์แยกกันเป็นไฟล์ออบเจ็กต์ จากนั้นตัวเชื่อมโยงจะรวมไฟล์ออบเจ็กต์ทั้งหมด แก้การอ้างอิงระหว่างไฟล์ และสร้างเป็นโปรแกรมที่เรียกใช้งานได้หนึ่งโปรแกรม
การสร้างด้วยคำสั่งเดียว
วิธีที่ง่ายที่สุดคือส่งไฟล์ต้นฉบับทุกไฟล์ให้ gcc ในครั้งเดียว คอมไพเลอร์จะสร้างแต่ละไฟล์แล้วเชื่อมโยงให้โดยอัตโนมัติ
ตัวเลือก -o ใช้ตั้งชื่อโปรแกรมผลลัพธ์ ให้ระบุไฟล์ .c ทั้งหมด ส่วนส่วนหัวจะถูกนำเข้าผ่าน #include และไม่ต้องระบุไว้ที่นี่
gcc main.c math_utils.c -o appการคอมไพล์แยกกัน
สำหรับโครงการขนาดใหญ่ ให้คอมไพล์แต่ละไฟล์เป็นไฟล์ออบเจ็กต์ด้วย -c วิธีนี้จะสร้างไฟล์ .o และจะไม่ทำการเชื่อมโยง
การคอมไพล์แยกกันหมายความว่า เมื่อแก้ไขต้นฉบับเพียงไฟล์เดียว ก็จำเป็นต้องคอมไพล์ใหม่เฉพาะไฟล์นั้น จึงช่วยให้การสร้างโครงการขนาดใหญ่เร็วขึ้น
gcc -c main.c /* produces main.o */
gcc -c math_utils.c /* produces math_utils.o */ขั้นตอนการเชื่อมโยง
เมื่อมีไฟล์ออบเจ็กต์แล้ว ให้เชื่อมโยงไฟล์เหล่านั้นเป็นโปรแกรมที่เรียกใช้งานได้ ในขั้นตอนนี้ gcc จะทำหน้าที่เป็นตัวเชื่อมโยง รวมไฟล์ออบเจ็กต์และแก้สัญลักษณ์ระหว่างไฟล์
ครั้งนี้ไม่ใช้ -c เพราะเราต้องการโปรแกรมสุดท้าย ไม่ใช่ไฟล์ออบเจ็กต์อีกไฟล์หนึ่ง
gcc main.o math_utils.o -o appตัวเชื่อมโยงทำอะไร
ตัวเชื่อมโยงจะจับคู่ การใช้งาน สัญลักษณ์แต่ละครั้งกับ การกำหนด ของสัญลักษณ์นั้น
เมื่อ main.o เรียกใช้ add ตัวเชื่อมโยงจะค้นหา add ที่กำหนดไว้ใน math_utils.o แล้วเชื่อมทั้งสองเข้าด้วยกัน นอกจากนี้ยังนำโค้ดจากไลบรารีมาตรฐานที่โปรแกรมต้องใช้เข้ามาด้วย
ข้อผิดพลาดจากการอ้างอิงที่ไม่ถูกกำหนด
หากคุณลืมไฟล์ออบเจ็กต์ขณะเชื่อมโยง ตัวเชื่อมโยงจะไม่พบการกำหนดและจะแจ้ง การอ้างอิงที่ไม่ถูกกำหนด
นี่เป็นข้อผิดพลาดขณะเชื่อมโยง ไม่ใช่ข้อผิดพลาดขณะคอมไพล์ ไฟล์แต่ละไฟล์คอมไพล์ได้เรียบร้อย แต่การกำหนดที่จำเป็นหายไปจากคำสั่งสุดท้าย
gcc main.o -o app
/* undefined reference to `add' */
/* fix: include math_utils.o */ตัวเลือกคำเตือนที่มีประโยชน์
ให้คอมไพล์โดยเปิดใช้คำเตือนเสมอ -Wall และ -Wextra จะช่วยแสดงข้อผิดพลาดที่อาจเกิดขึ้นตั้งแต่เนิ่น ๆ
การเพิ่ม -std=c11 จะเลือกมาตรฐานภาษา ทำให้พฤติกรรมระหว่างคอมไพเลอร์ต่าง ๆ คาดเดาได้ ตัวเลือกเหล่านี้ใช้ได้ทั้งการคอมไพล์ในขั้นตอนเดียวและการคอมไพล์แยกกัน
gcc -Wall -Wextra -std=c11 -c main.c
gcc -Wall -Wextra -std=c11 -c math_utils.c
gcc main.o math_utils.o -o appเส้นทางส่วนหัว
เมื่อส่วนหัวอยู่ในไดเรกทอรีอื่น ให้บอกคอมไพเลอร์ว่าจะค้นหาที่ใดด้วย -I
ตัวอย่างเช่น -Iinclude จะเพิ่มโฟลเดอร์ include/ ลงในเส้นทางค้นหา ทำให้ #include "math_utils.h" ค้นพบไฟล์ได้แม้อยู่คนละโฟลเดอร์
gcc -Iinclude -c src/main.c -o build/main.oเหตุใดการคอมไพล์ใหม่จึงสำคัญ
การคอมไพล์แยกกันมีประโยชน์มากเมื่อมีการแก้ไขเพียงไฟล์เดียว คุณเพียงคอมไพล์ออบเจ็กต์ของไฟล์นั้นใหม่ แล้วเชื่อมโยงอีกครั้ง
แต่หากแก้ไข ส่วนหัว ต้นฉบับทุกไฟล์ที่รวมส่วนหัวนั้นจะต้องคอมไพล์ใหม่ เพราะข้อความในส่วนหัวเป็นส่วนหนึ่งของแต่ละไฟล์
/* edited math_utils.c only */
gcc -c math_utils.c
gcc main.o math_utils.o -o appทำงานอัตโนมัติด้วย make
การพิมพ์คำสั่งด้วยตนเองเริ่มน่าเบื่อ ไฟล์ Makefile จะบันทึกกฎและสร้างใหม่เฉพาะสิ่งที่เปลี่ยนแปลง
ตัวอย่างขนาดเล็กนี้เชื่อมโยงออบเจ็กต์สองไฟล์เป็น app โดย make จะติดตามเวลาที่ไฟล์ถูกแก้ไขเพื่อเลือกว่าจะคอมไพล์ไฟล์ใดใหม่
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.cทบทวนกระบวนการสร้างทั้งหมด
นี่คือกระบวนการทั้งหมดสำหรับโครงการขนาดเล็ก ตั้งแต่ไฟล์ออบเจ็กต์จนเป็นโปรแกรมที่เสร็จสมบูรณ์พร้อมเปิดใช้คำเตือน
คอมไพล์ต้นฉบับแต่ละไฟล์ แล้วเชื่อมโยงไฟล์ออบเจ็กต์ จากนั้นเรียกใช้ผลลัพธ์เพื่อยืนยันว่าทำงานได้ครบทุกขั้นตอน
gcc -Wall -c main.c
gcc -Wall -c math_utils.c
gcc main.o math_utils.o -o app
./appตรวจสอบความเข้าใจ
ตรวจสอบความเข้าใจของคุณเกี่ยวกับกระบวนการสร้างโปรแกรมหลายไฟล์
ทบทวน
คุณได้เรียนรู้การคอมไพล์ไฟล์ .c แต่ละไฟล์เป็นออบเจ็กต์ด้วย -c แล้วเชื่อมโยงออบเจ็กต์เหล่านั้นเป็นโปรแกรม ใช้ -Wall และ -I สำหรับคำเตือนและเส้นทางส่วนหัว
การอ้างอิงที่ไม่ถูกกำหนดหมายถึงมีไฟล์ออบเจ็กต์หายไปขณะเชื่อมโยง เครื่องมืออย่าง make ช่วยทำให้การสร้างใหม่เฉพาะส่วนที่เปลี่ยนแปลงเป็นแบบอัตโนมัติ
คำถามที่พบบ่อย
บทเรียน “คอมไพล์หลายไฟล์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คอมไพล์หลายไฟล์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คอมไพล์หลายไฟล์”
สร้างโปรแกรมที่ประกอบด้วยหลายไฟล์ คุณปฏิบัติ C Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “คอมไพล์หลายไฟล์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C Academy นี้ได้ไหม
ได้ บทเรียน C Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ