สัญลักษณ์% ใน Makefile หมายถึงอะไร


11

ฉันกำลังเล่นรอบกับ makefiles และฉันมาข้าม.o%หรือ.c% จากสิ่งที่ฉันเข้าใจมันระบุไฟล์cหรือoทั้งหมด แต่ทำไมงานนี้:

%.o: %.c
        $(CC) -c $^  -o $@  

และนี่ใช้ไม่ได้

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

นิพจน์ทั้งสองระบุไฟล์ทั้งหมด ดังนั้น% .o:สัญลักษณ์ในไฟล์ make จะทำอย่างไร

คำตอบ:


9

นิพจน์ทั้งสองระบุไฟล์ทั้งหมด

Nope, กฎข้อแรกบอกmakeว่าจะได้รับ.oไฟล์ที่กำหนดที่สอดคล้อง.cไฟล์ หมายเหตุเอกพจน์: ไฟล์เดียว

กฎข้อที่สอง (อ้างว่า) บอกmakeวิธีการที่จะได้รับพวงของ.oไฟล์ที่ได้รับพวงของการที่สอดคล้องกันอีก.cไฟล์ หมายเหตุพหูพจน์: .cไฟล์ทั้งหมดที่เกิดจากการ*.cโค้ง

ในบันทึกด้านข้าง%.o: %cเป็นส่วนขยายของ GNU

ในอีกด้านหนึ่งคุณจะไม่ได้เรียนรู้วิธีใช้งานmakeใน StackOverflow คุณควรลองอ่านหนังสือแทน


RTFM จริงเหรอ? ฉันคิดว่าจุดของการแลกเปลี่ยนคือการล้างความคิดนั้น
daknowles

12

โครงสร้าง:

%.o: %.c
        $(CC) -c $^  -o $@  

เป็นกฎรูปแบบซึ่งเป็นประเภทของกฎโดยปริยาย มันระบุเป้าหมายหนึ่งรายการและหนึ่งอ้างอิงและทำให้เกิดการร้องขอหนึ่งครั้ง$(CC)สำหรับแต่ละเป้าหมาย ในขณะนี้:

SOURCE := $(wildcard *.c)

$(SOURCE:.c=.o): SOURCE
        $(CC) -c $^  -o $@

เป็นกฎมาตรฐาน แต่ก็มี (อาจจะ) หลายเป้าหมายและหลายอ้างอิง แต่สำหรับทั้งหมดนั้นจะเรียกเพียง$(CC)ครั้งเดียว

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