เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบžเบฒเบชเบฒเบเบฃเบฑเปˆเบ‡เปเบญเบชเบ›เบฒเป‚เบเบ™

Ad


OnWorks favicon

makepp_rules - เบญเบญเบ™เบฅเบฒเบเปƒเบ™เบ„เบฅเบฒเบง

เป€เบ›เบตเบ”เปƒเบŠเป‰ makepp_rules เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเบœเปˆเบฒเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ makepp_rules เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเป‚เบ”เบเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเป†เบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบ™เป„เบฅเบ™เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบฑเปˆเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เป‚เบ„เบ‡เบเบฒเบ™:

NAME


makepp_rules -- เบงเบดเบ—เบตเบšเบญเบ makepp เบชเป‰เบฒเบ‡เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”


?: &,
-,
@, B: :build_cache,
:build_check, D: :เบชเบปเปˆเบ‡, E: :env, I: "ignore_error",
: เบฅเบงเบกโ€‹เบ—เบฑเบ‡โ€‹, L: :เป‚เบญโ€‹เบเบฒเบ”โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบ, M: เบœเบนเป‰เบœเบฐเบฅเบดเบ”, N: "เป‚เบ™เป‚เบเป‰", P: :parser,
"perl", S: :เบฅเบฒเบเป€เบŠเบฑเบ™

เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบšเบญเบ makepp เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบซเบผเบทเบ›เบฐเป€เบžเบ”เป„เบŸเบฅเปŒ. Makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™
syntax เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡ make, เบšเบงเบเบเบฑเบšเบšเบฒเบ‡เบชเปˆเบงเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเบกเบตเบฎเบนเบšเปเบšเบšเบ—เบปเปˆเบงเป„เบ›

target_expression : dependency_expression [ : arguments เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹]
เบซเบธเป‰เบ™

เบฅเบฒเบเบŠเบทเปˆเป€เบ›เบปเป‰เบฒเปเบฒเบเบญเบฒเบ”เบšเปเปˆเบกเบตเบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” (เบเบปเบเป€เบงเบฑเป‰เบ™ "$(foreach)"). เป„เบ”เป‰
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบญเบฒเบ”เบˆเบฐเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เปƒเบชเปˆเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ (เป€เบŠเบฑเปˆเบ™,
"$(output)", "$(outputs)", เบซเบผเบทเบ„เปเบฒเบชเบฑเบšเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™). เบ„เบณเบชเบฑเปˆเบ‡เบญเบฒเบ”เบกเบตเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ”เป†
เบ•เบปเบงเปเบ›

เบ–เป‰เบฒ makepp เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เปเบ•เปˆเบฅเบฐเป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”
เบ•เบฒเบกเบฅเปเบฒเบ”เบฑเบš, เปเบฅเบฐเบ–เป‰เบฒเบญเบฑเบ™เปƒเบ”เบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบนเบ™, เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบฅเบทเบญเบˆเบฐเบšเปเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ” (เปเบฅเบฐ.
makepp เป€เบญเบปเบฒเบฅเบนเบเบญเบญเบเบ”เป‰เบงเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฅเบฐเบšเบธเบ—เบฒเบ‡เป€เบฅเบทเบญเบ "-k" เปƒเบ™เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡.)
เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบเบฐ เบ—เบณ เบ„เบงเบ™เป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบ–เป‰เบฒเบเบฒเบ™เบเบฐ เบ—เบณ เบเบฒเบงเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เป„เบ”เป‰เบ‡เปˆเบฒเบเปƒเบ™ a
เป€เบชเบฑเป‰เบ™เบ”เบฝเบง, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เปเบฅเบฐเปƒเบชเปˆ backslash เป€เบžเบทเปˆเบญเบŠเบตเป‰เบšเบญเบเบงเปˆเบฒ
เบซเบผเบฒเบเบชเบฒเบเบ„เบงเบ™เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป€เบ›เบฑเบ™เบญเบฑเบ™เบ”เบฝเบง.

เป€เบžเบทเปˆเบญเปเบเบเปเบเบฐเบเบฒเบ™เบเบฐ เบ—เบณ เบˆเบฒเบเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบ™เบˆเบฐเบ–เบทเบเบซเบเปเป‰ เปœเป‰เบฒ เบซเบผเบฒเบเบ‚เบถเป‰เบ™
เบโ€‹เปˆโ€‹เบงเบฒโ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป€เบžเบดเปˆเบ‡โ€‹เบžเบฒโ€‹เบญเบฒโ€‹เป„เบชโ€‹. เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡
make, makepp เบšเปเปˆเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบซเบเปเป‰เบซเบ™เป‰เบฒเบกเบฑเบ™เบซเบผเบทเบงเปˆเบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปเบ–เบš
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡. เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก, เบเบปเบ”เบฅเบฐเบšเบฝเบš
makepp เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบเบฐ เบ—เบณ เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เปเบฅเบฐเบเบปเบ”เบ•เปเปˆเป„เบ›เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡:

ยท เป€เบชเบฑเป‰เบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบณเบญเบดเบ”เบ•เป‰เบญเบ‡เบ–เบทเบเบซเบเปเป‰เปœเป‰เบฒเบซเบผเบฒเบเบเบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบกเบตเป€เบ›เบปเป‰เบฒเปเบฒเบ.

ยท เบ–เป‰เบฒเปเบ–เบงเบ–เบทเบเบซเบเปเป‰เปœเป‰เบฒเบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปเบ–เบšเปœเบถเปˆเบ‡ เบซเบผเบท 8 เบเบฐเบซเบงเปˆเบฒเบ‡ เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ
เป€เบชเบฑเป‰เบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

ยท เปเบ–เบงเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ เบซเบผเบท เปเบ–เบงเบ„เบณเป€เบซเบฑเบ™เบ—เบตเปˆเบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "#" เบขเบนเปˆเบ‚เบญเบšเบ‚เบงเบฒเบˆเบฐเบชเบดเป‰เบ™เบชเบธเบ”
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบš, เป€เบงเบฑเป‰เบ™โ€‹เป€เบชเบโ€‹เปเบ•เปˆโ€‹เปเบ–เบงโ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เป€เบ›เบปเปˆเบฒโ€‹เบซเบงเปˆเบฒเบ‡ indented เบซเบผเบฒเบโ€‹เบโ€‹เปˆโ€‹เบงเบฒ 8 เบŠเปˆเบญเบ‡ (เบซเบผเบทโ€‹เบซเบผเบฒเบโ€‹เบเบงเปˆเบฒโ€‹เบซเบ™เบถเปˆเบ‡โ€‹
เปเบ–เบš).

ยท เบ–เป‰เบฒเป€เบชเบฑเป‰เบ™เบ–เบทเบเบซเบเปเป‰เปœเป‰เบฒเบซเบผเบฒเบ เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบณเบญเบดเบ”, เบกเบฑเบ™เบเปเปˆเปเบกเปˆเบ™
เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เบกเบตเบšเบฒเบ‡เบฅเบฒเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบžเบดเป€เบชเบ”:

& เบชเบฑเบ™โ€‹เบเบฒโ€‹เบฅเบฑเบโ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ•เบฒเบกโ€‹เบ”เป‰เบงเบโ€‹เบŠเบทเปˆโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹เปเบฅเบฐโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹. เปเบเบฐ
syntax เปเบกเปˆเบ™เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเป€เบงเบปเป‰เบฒเบ”เบฝเบงเปเบฅเบฐเบ„เบนเปˆเปเบฅเบฐ backslashed
เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบฒเบเปƒเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš makepp. เบŠเบทเปˆเบ„เปเบฒเบชเบฑเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆ
"c_เบŠเบทเปˆ" เบˆเบฐเบ–เบทเบเป€เบญเบตเป‰เบ™เบ”เป‰เบงเบเบชเบฒเบเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเป€เบ›เบฑเบ™ arguments. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”
เบšเปเปˆเบžเบปเบš, เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป‚เบ—เบซเบฒ "เปเบฅเปˆเบ™" เบˆเบฒเบ "perl".

เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป‚เบ—เบซเบฒเบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบ•เบปเบง, makefile-provided เบซเบผเบทเบ„เปเบฒเบชเบฑเปˆเบ‡เบžเบฒเบเบ™เบญเบ.
เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ "&" เป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ invoker เปƒเบ™ Perl, เปเบฅเบฐเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ
เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบกเบฑเบ™เบœเบดเบ”เบเบปเบ”เบซเบกเบฒเบเปƒเบ™ Shell.

$(ROOT)/include/%.h: %.h
&ln $(input) $(output)

เป‚เบ™เป‚เบ„
@ เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡ shell เบˆเบฐเบ–เบทเบเบžเบดเบกเบญเบญเบเบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒเบ„เปเบฒเบ—เปเบฒเบญเบดเบ”
เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™ "noecho" (เบซเบผเบทเบ–เป‰เบฒเบกเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "@"), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡
เบšเปเปˆเป„เบ”เป‰เบžเบดเบก. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

%.o: %.cxx
noecho $(LIBTOOL) --mode=compile $(CC) -c $(input)

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเป€เบกเบทเปˆเบญเบ„เปเบฒเบชเบฑเปˆเบ‡ libtool เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบžเบดเบกเบญเบญเบ. (Libtool
เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบžเบดเบกเบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบฑเบ”เปเบเป‰เบ—เบตเปˆเบกเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบŠเปเป‰เบฒเบŠเป‰เบญเบ™เบเบฑเบš
เบžเบดเบกโ€‹เบกเบฑเบ™โ€‹เบชเบญเบ‡โ€‹เบ„เบฑเป‰เบ‡โ€‹.)

ignore_error
- เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบ–เป‰เบฒเบ„เปเบฒเบชเบฑเปˆเบ‡ shell เบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบฐเบ–เบฒเบ™เบฐเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เบชเบนเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ makepp เบเบปเบเป€เบฅเบตเบเป€เบžเบฒเบฐเบงเปˆเบฒ
เบ„เปเบฒเบชเบฑเปˆเบ‡เบฅเบปเป‰เบกเป€เบซเบฅเบง. เบขเปˆเบฒเบ‡โ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹, เบšเบฒเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบ–เบทเบโ€‹เบ•เป‰เบญเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบชเบฐโ€‹เบ–เบฒโ€‹เบ™เบฐโ€‹เบเบฒเบ™โ€‹เบญเบญเบโ€‹, เบซเบผเบทโ€‹
เบญเบฒเบ”เบกเบตเบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบšเปเปˆเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบ เปเบฅเบฐเบšเปเปˆเบ„เบงเบ™เป€เบญเบปเบฒเบฅเบนเบเบญเบญเบเบ—เบฑเบ‡เปเบปเบ”
เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰ makepp เบšเปเปˆเบชเบปเบ™เปƒเบˆเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เป‚เบ”เบเบเบฒเบ™เบฅเบฐเบšเบธ
"ignore_error" เป€เบ›เบฑเบ™เบ„เปเบฒเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ (เบซเบผเบท "-" เป€เบ›เบฑเบ™เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เปเบฒเบญเบดเบ”).
เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

$(เบเบฒเบ™เปเบœเปˆเบเบฐเบˆเบฒเบเบชเบฝเบ‡):
ignore_error rm -r my_program-$(VERSION) # เบเปเบฒเบˆเบฑเบ”เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ.
&mkdir my_program-$(VERSION)
&cp $(FILES) my_program-$(VERSION)
tar cf my_program-$(VERSION).tar my_program-$(VERSION)

เบ„เปเบฒเบชเบฑเปˆเบ‡เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบชเปเบฒเป€เบ™เบปเบฒเบŠเปเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบกเบฑเบ™, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบงเบฒเบ‡
เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒ tar เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบˆเบเบขเบฒเบ. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบญเบญเบ
เป€เบ™เบทเป‰เบญเปƒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบ–เป‰เบฒเบกเบตเบชเบดเปˆเบ‡เปƒเบ”เปเบ”เปˆเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เปเบฅเบฐเบ™เบฑเป‰เบ™เปเบกเปˆเบ™
เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบชเบฑเป‰เบ™เบ—เปเบฒเบญเบดเบ”เป€เบฎเบฑเบ”. "rm" เบญเบฒเบ”เบˆเบฐเบฅเบปเป‰เบกเป€เบซเบฅเบง, เปเบ•เปˆเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบ‚เบญเบ‡เบกเบฑเบ™เบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

perl
เบœเบนเป‰เบœเบฐเบฅเบดเบ”
เบ™เบตเป‰เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™ perl, เปเบ•เปˆเบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เปเบ•เปˆเบฅเบฐเป€เบงเบฅเบฒเบ—เบตเปˆ
เปเบฅเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš, เบšเปเปˆเปเบกเปˆเบ™เปƒเบ™เป€เบงเบฅเบฒเบญเปˆเบฒเบ™ makefile. เบ•เบปเบงเปเบ›เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™ Perl เบ—เปเบฒเบกเบฐเบ”เบฒ
เบฅเบฐเบซเบฑเบ”, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเบงเปเบ›เบ—เบตเบชเบญเบ‡เบ—เปเบฒเบญเบดเบ”เบœเปˆเบฒเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบ•เบปเบงเปเบ›เปเบšเบš Make-style
เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบง.

เบชเปเบฒเบฅเบฑเบšเบชเบญเบ‡เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡เบเบฒเบ™เบงเบฒเบ‡เบชเบฒเบเปเบ‚เบ™เบ‚เบญเบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ, เป€เบšเบดเปˆเบ‡เบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเบ—เบตเปˆ
"perl_perlcode" เปƒเบ™ makepp_statements. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ•เบปเบงเปเบ›เบ—เบตเบชเบฒเบกเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™
เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เป‰เบญเบ‡เบ–เบทเบเบซเบเปเป‰เบซเบ™เป‰เบฒ. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบชเบฑเบ™เบเบฒเบ™
เบ„เบงเบฒเบกเบฅเบปเป‰เบกเป€เบซเบผเบงเปƒเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡ Perl, เป‚เบ”เบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "เบ•เบฒเบ".

เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™ Perl เบ›เบฐเบˆเบธเบšเบฑเบ™เบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เบขเบนเปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเปˆเบญเบเบ—เบปเปˆเบงเป„เบ›, เบเบปเบเป€เบงเบฑเป‰เบ™
Windows. เบ™เบฑเป‰เบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบเบฒเบ™เบญเปˆเบฒเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบ•เบปเบงเปเบ› makefile เปƒเบ”เป†. เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™
เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบฐเบ—เปเบฒเบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™ Perl. เบชเบฐเบ™เบฑเป‰เบ™เบเบฒเบ™เป‚เบ—เบซเบฒ exec เบซเบผเบท exit เบˆเบฐเบชเบฑเบšเบชเบปเบ™
เปเบ•เปˆเบ‡เปœเป‰เบฒ. เปเบ•เปˆเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”. เบชเปเบฒเบฅเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบเบฒเบ™เป‚เบ—เบซเบฒ Perl
scripts, เป€เบšเบดเปˆเบ‡เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ "&" เบซเบผเบท "เปเบฅเปˆเบ™".

$(เบชเบฐเบšเบฑเบšเบžเบฒเบชเบฒ phony):
noecho perl {{ # $(เป€เบ›เบปเป‰เบฒเปเบฒเบ) & $(VERSION) เบˆเบฒเบ Perl:
เบžเบดเบก "เบ™เบตเป‰เปเบกเปˆเบ™ ".f_target()." $VERSION\n";
}}
echo เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบชเบปเบกเบ™เบตเป‰เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡ Shell
-makeperl { เบžเบดเบก "เบ™เบตเป‰เปเบกเปˆเบ™ $(เป€เบ›เบปเป‰เบฒเปเบฒเบ) $(VERSION)\n" }

เบกเบตเบซเบผเบฒเบเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš, เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ เบเบปเบ”เบฅเบฐเบšเบฝเบš
target1 target2: dependency1 dependency2...
เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹

syntax เบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบšเปเปˆเบงเปˆเบฒเบˆเบฐ เป€เบ›เบปเป‰เบฒ เปเบฒเบ เบ—เบต 1 or เป€เบ›เบปเป‰เบฒ เปเบฒเบ เบ—เบต 2, เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”
เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช1, เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช2, เปเบฅเบฐเบญเบทเปˆเบ™เป†, เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปเบฅเป‰เบง. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเป„เบ”เป‰เบกเบญเบšเปƒเบซเป‰
เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบซเบญเบเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.

เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เปƒเบ™เป„เบŸเบฅเปŒเปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฅเบฐเบšเบธ
เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบ„เปเบฒโ€‹เบชเบฑเปˆเบ‡โ€‹.

เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก, makepp เบกเบฑเบเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡เบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”
เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ” (เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช). เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบซเบ™เบถเปˆเบ‡ invocation
เบ‚เบญเบ‡ yacc เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบฑเบ‡เบชเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰:

y.tab.c y.tab.h : parser.y
$(YACC) -d parser.y

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบทเปˆเบ™เป†เบ‚เบญเบ‡ make เบšเปเปˆเบกเบตเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เบฝเบง
เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบซเบผเบฒเบโ€‹, เปเบฅเบฐโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เบซเบผเบฒเบโ€‹เบ—เบตเปˆโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹
เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ. Makepp เบˆเบฐเบเบฑเบšเบ„เบทเบ™เบชเบนเปˆเบžเบถเบ”เบ•เบดเบเปเบฒเบ™เบตเป‰เบ–เป‰เบฒเบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ
เบ™เบตเป‰เปเบกเปˆเบ™ makefile เปเบšเบšเป€เบเบปเปˆเบฒ. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบกเบฑเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบ•เปเปˆเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ,
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบžเบฝเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบง, เบ–เป‰เบฒเบ—เบฑเบ‡เปเบปเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡:

ยท เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” $@. (เบ„เปเบฒเบชเบฑเบšเบ„เป‰เบฒเบเบ„เบท "$(output)" เบซเบผเบท
"$(เป€เบ›เบปเป‰เบฒเปเบฒเบ)" เบšเปเปˆเปƒเบซเป‰เป€เบเบตเบ”เบžเบถเบ”เบ•เบดเบเบณเบ™เบตเป‰.)

ยท เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบšเปเปˆเป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” "$(outputs)" (เบซเบผเบทเบ„เปเบฒเบชเบฑเบšเบ„เป‰เบฒเบเบ„เบทเบ‚เบญเบ‡เบกเบฑเบ™
"$(เป€เบ›เบปเป‰เบฒเปเบฒเบ)").

ยท เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹, เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เบกเบต foreach clauseโ€‹.

เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฑเป‰เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹:
เบชเปเบฒเบฅเบฑเบš subdir เปƒเบ™ $(SUBDIRS); เป€เบฎเบฑเบ” cd $$subdir && $(MAKE) $@; cd..; เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง

เป€เบ›เบฑเบ™ idiom เบ—เบปเปˆเบงเป„เบ›เปƒเบ™ makefiles, เปเบฅเบฐ makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบกเบฑเบ™. (เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เปƒเบŠเป‰
recursive make เปƒเบ™ makefiles เปƒเบซเบกเปˆเปƒเบ”เป†เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ‚เบฝเบ™ - เปƒเบŠเป‰ "load_makefile" เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™, เบซเบผเบท
เบเบฒเบ™เป‚เบซเบผเบ” makefile implicit เปเบ—เบ™.)

เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เบฝเบงเบเบฑเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เบถเปˆเบ‡เบ„เบฑเป‰เบ‡เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ
เบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™), เบกเบฑเบ™เบกเบฑเบเปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบš (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰) เบซเบผเบท a
เบ‚เปเป‰ โ€œforeachโ€. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก, เป€เบˆเบปเป‰เบฒเบˆเบฐเบ‚เบฝเบ™:

เบโ€‹เบ‚โ€‹เบ„โ€‹เบ‡:
do_something to build $@ > $@

เปƒเบ™ makepp, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบกเบฑเบ™เปเบšเบšเบ™เบตเป‰:

$(foreach): : foreach abcd
do_something เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ $(output) > $(output)

เป‚เบŸเบ™เบต เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ

A phony เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ เปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบˆเบฐเบšเปเปˆเป€เบ„เบตเบเบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒ; เบกเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบ›เบฑเบ™
เบงเบดเบ—เบตเบเบฒเบ™เบฎเบฑเบš makepp เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบšเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบฅเบฐเบญเบฒเบ”เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบšเบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony เบ›เบปเบเบเบฐเบ•เบดเปเบกเปˆเบ™ "เบ—เบฑเบ‡เบซเบกเบปเบ”", เป€เบŠเบดเปˆเบ‡เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปเบกเปˆเบ™เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰
เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹, เบ”เบฑเปˆเบ‡โ€‹เบ™เบตเป‰โ€‹:

เบ—เบฑเบ‡เปเบปเบ”: prog1 prog2 subdir/prog3 subdir2/libmine.a
@&echo "เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง!"

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบดเบก "makepp all", เบซเบผเบทเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบชเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ—เปเบฒเบญเบดเบ”เปƒเบ™ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
(เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เปเบšเบšเบ›เบปเบเบเบฐเบ•เบด) เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบžเบดเบก "makepp", เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบ‚เบถเป‰เบ™เบเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”
เบชเป‰เบฒเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบžเบดเบก "เป€เบฎเบฑเบ”เปเบฅเป‰เบงเบ—เบฑเบ‡เบซเบกเบปเบ”!". เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, makepp เบˆเบฐเบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒ ./เบ—เบฑเบ‡เปเบปเบ”
เปเบฅเบฐเบˆเบฐเบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเบกเบตเบขเบนเปˆ. เบกเบฑเบ™เบˆเบฐเบˆเบปเปˆเบกเบ”เบฑเบ‡เป†.

เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒ makepp เบˆเบฒเบเบเบฒเบ™เบ„เบฒเบ”เบซเบงเบฑเบ‡เป„เบŸเบฅเปŒ ./เบ—เบฑเบ‡เปเบปเบ” เบเบฒเบ™โ€‹เบญเบญเบโ€‹, เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบšเบญเบโ€‹เบงเปˆเบฒโ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹
เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ phony. เบžเบฝเบ‡เปเบ•เปˆเปƒเบชเปˆเป€เบชเบฑเป‰เบ™เป€เบŠเบฑเปˆเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปƒเบ™ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบกเบฑเบ™เบšเปเปˆเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡
เบšเปˆเบญเบ™เบ—เบตเปˆ):

.PHONY: เบ—เบฑเบ‡เบซเบกเบปเบ”

เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบชเบฐเบ”เบงเบเบเบงเปˆเบฒเปเบกเปˆเบ™เบเบฒเบ™เปƒเบŠเป‰ "$(phony)"
เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เป€เบŠเบฑเปˆเบ™โ€‹เบ™เบตเป‰โ€‹:

$(phony all): prog1 prog2 subdir/prog3 subdir2/libmine.a

เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony เปƒเบ™ makefile เบซเบ™เบถเปˆเบ‡เบชเบฒเบกเบฒเบ”เบซเบกเบฒเบเป€เบ–เบดเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony เปƒเบ™ makefile เบญเบทเปˆเบ™. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™
เบกเบฑเบเบˆเบฐเป€เบฎเบฑเบ”เบ”เป‰เบงเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ "เบชเบฐเบญเบฒเบ”", เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

# makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”:
# เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบฅเบฐเบชเบดเปˆเบ‡เบซเบผเบฒเบเบขเปˆเบฒเบ‡เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰
#....
$(phony clean): subdir1/clean subdir2/clean
&rm -fm my_program

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ, makefiles เบญเบฒเบ”เบˆเบฐเบญเปˆเบฒเบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

# Makefile เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ
#...
$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -fm $(wildcard *.o *.a)

เปเบ•เปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เปˆเบฒเบ™เบˆเบฐเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ "makeppclean", เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ”.

เบ•เบปเบงเปเบ—เบ™

เบกเบฑเบ™เบ›เบญเบ”เป„เบžเบ—เบตเปˆเบˆเบฐเบฅเบฐเบšเบธ wildcards เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช. เบ•เบปเบงเปเบ—เบ™เบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเป„เบŸเบฅเปŒเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™
เบ—เบตเปˆเบกเบตเบขเบนเปˆ, เปเบ•เปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰เบ•เบฒเบกเบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ™ makefile. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,
เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบˆเบฒเบเป„เบŸเบฅเปŒ .o เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบ™เบตเป‰:

libmine.a: *.o
&rm -f $(เบœเบปเบ™เบœเบฐเบฅเบดเบ”)
ar cr $(output) $(inputs)

เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเป„เบŸเบฅเปŒ ".o" เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบ—เบทเปˆเบญ, เป€เบžเบฒเบฐเบงเปˆเบฒ makepp's
wildcards เบเบปเบ‡เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบกเบตเบขเบนเปˆเปเบ•เปˆเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰. เบ™เบตเป‰เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบˆเบฐเป€เบญเบปเบฒเบ‚เบถเป‰เบ™
เป„เบŸเบฅเปŒเบ—เบตเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบšเปƒเบ™เบžเบฒเบเบซเบผเบฑเบ‡ (เปƒเบ™ makefile เบ”เบฝเบงเบเบฑเบ™, เบซเบผเบทเบญเบฑเบ™เบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบญเปˆเบฒเบ™). เปƒเบ™โ€‹เบ™เบตเป‰
เบˆเบธเบ”เบชเบธเบ”เบ—เป‰เบฒเบเบกเบฑเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆ "wildcard", เป€เบŠเบดเปˆเบ‡เบˆเปเบฒเบเบฑเบ”เบเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบฎเบนเป‰เบˆเบฑเบ,
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบ•เป‰เบญเบ‡เบเบฑเบšเบ„เบทเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบกเบฑเบ™เป€เบกเบทเปˆเบญเบกเบฑเบ™เบ–เบทเบเบ‚เบฐเบซเบเบฒเบ.

Makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ” shell wildcards เบ›เบปเบเบเบฐเบ•เบด ("*", "?", เปเบฅเบฐ "[]"). เบกเบฑเบ™เบเบฑเบ‡เบกเบต a
wildcard "**" เป€เบŠเบดเปˆเบ‡เบเบปเบ‡เบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปเบŠเบเปเบŠเบ‡เปƒเบ”เป†. (เบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰เบ–เบทเบเบฅเบฑเบ
เบˆเบฒเบ zsh.) เบ•เบปเบงเบขเปˆเบฒเบ‡, "**/*.c" เบเบปเบ‡เบเบฑเบšเบ—เบฑเบ‡เปเบปเบ” .c เป„เบŸเบฅเปŒเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เปเบซเบผเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”.
"objects/**/*.o" เบเบปเบ‡เบเบฑเบšเบ—เบฑเบ‡เปเบปเบ” .o เป„เบŸเบฅเปŒเบ—เบตเปˆเบšเบฑเบ™เบˆเบธเบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบเปเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ เบงเบฑเบ”เบ–เบธ
เบซเบผเบท เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ เบซเบผเบท เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบเบ‚เบญเบ‡เบกเบฑเบ™. เบชเบฑเบ™เบเบฒเบฅเบฑเบ "**" เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™
เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบญเปˆเบญเบ™เป†เป„เบ›เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปƒเบ™เบฅเบฐเบ”เบฑเบšเปƒเบ”เบเปเปˆเบ•เบฒเบก. เบกเบฑเบ™เบเบฑเบ‡เบˆเบฐเบšเปเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเบซเบผเบญเบเบฅเบงเบ‡.

เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡ Makepp เบˆเบฐเบšเปเปˆเบชเบปเบ™เปƒเบˆเป„เบŸเบฅเปŒ เบซเบผเบทเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบกเบตเบขเบนเปˆ เปเบ•เปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰. เบซเบผเบฑเบ‡เบˆเบฒเบ
เบ—เบฑเบ‡เบซเบกเบปเบ”, เป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก. เบเบฒเบ™เบงเบฒเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เปƒเบ™ a
เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เบปเป‰เบ™เบ•เปเป€เบžเบทเปˆเบญเบเบฑเบšเบเบฑเป‰เบ‡เบเบฒเบ™เบ™เปเบฒเป€เบ‚เบปเป‰เบฒเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเปƒเบซเป‰เบกเบฒเบˆเบฒเบ a
repository

เบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปเบกเปˆเบ™เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ›เบญเบ”เป„เบž. เบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™
เป„เบŸเบฅเปŒเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เบซเบผเบทเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบเปˆเบญเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เบšเปเปˆเบ›เบญเบ”เป„เบžเปƒเบ™เบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบ
เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบเบฑเบ‡เบเบปเบ‡เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบ makepp, เปเบ•เปˆเบšเปเปˆเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเบญเบตเบเบ•เปเปˆเป„เบ› (เบ•เบปเบงเบขเปˆเบฒเบ‡
เบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบญเบญเบ .c เป„เบŸเบฅเปŒ, เปเบ•เปˆ .o เป„เบŸเบฅเปŒเบเบฑเบ‡เบกเบตเบขเบนเปˆ.) เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบญเบฑเบ™เบ™เบตเป‰, เปƒเบซเป‰เปƒเบŠเป‰
เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "--rm-stale".

เบฎเบนเบšเปเบšเบš เบเบปเบ”เบฅเบฐเบšเบฝเบš
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเปเบกเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญ
เปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”. syntax เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš GNU make's
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹:

%.o: %.c
$(CC) -c $(input) -o $(output)

เบ™เบตเป‰เบšเบญเบเบงเปˆเบฒเป„เบŸเบฅเปŒเปƒเบ”เป†เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบเบปเบ‡เบเบฑเบš "*.c" เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™
เป„เบŸเบฅเปŒ .o เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เบ—เบตเปˆเปƒเบซเป‰.

เบเบฐเบฅเบธเบ™เบฒเบฎเบฑเบšเบŠเบฒเบšเบงเปˆเบฒเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฎเบนเบšเปเบšเบšเบซเบผเบฒเบเบญเบฑเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบชเบฐเปœเบญเบ‡เปƒเบซเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒ xyz.o เป€เบญเบเบฐเบชเบฒเบ™
เบ‚เบถเป‰เบ™เบเบฑเบšเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™ xyz.cpp เป„เบŸเบฅเปŒ, เปเบฅเบฐเบเบฑเบ‡เบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ moc_xyz.cflags เบ—เบตเปˆ
เบ›เบฐเบเบญเบšเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบญเบญเบเบ”เป‰เบงเบ:

%.o: %.cpp %.cflags
$(CXX) `cat $(stem).cflags` -c $(inputs) -o $(output)

เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบกเบตเป€เบ›เบปเป‰เบฒเปเบฒเบเบฎเบนเบšเปเบšเบšเบซเบผเบฒเบเบญเบฑเบ™. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

%.tab.h %.tab.c : %.y
yacc -d $(เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™)
&mv y.tab.h $(stem).tab.h
&mv y.tab.c $(stem).tab.c

เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบžเบฝเบ‡เปเบ•เปˆเบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบฑเบ‡เบ„เบฑเบš
เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ„เบปเป‰เบ™เบซเบฒเบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเบฅเบธเปˆเบกเบกเบฑเบ™เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ

makepp_percent_subdir := 1

เบเปˆเบญเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เปเบฒเบญเบดเบ”เปƒเบ™ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบซเบผเบทเบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡.

เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ "%" เปเบฅเบฐเบ•เบปเบงเปเบ—เบ™ "*", เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบˆเบฐเบเบปเบ‡เบเบฑเบ™
string: เบชเบฑเบ™เบเบฒเบฅเบฑเบเปเบ—เบ™เบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เปƒเบ™เบˆเบธเบ”เบ™เบฑเป‰เบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™
เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ” .o เป„เบŸเบฅเปŒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰เบ—เบตเปˆเบ™เบตเป‰:

prog: *.o
$(LD) $(LDFLAGS) $(inputs) -o $(output)

เบญเบฑเบ™เบ™เบตเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ›เปˆเบฝเบ™ "*" เบ”เป‰เบงเบ "%", เป€เบžเบฒเบฐเบงเปˆเบฒเบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบชเบณเบฅเบฑเบšเป€เบ—เบทเปˆเบญเบฅเบฐเบญเบฑเบ™.
เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ‚เบญเบ‡เบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™เบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เบœเบฐเบฅเบดเบ”เบžเบฒเบเปƒเบ™เบซเบ™เบถเปˆเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบฅเปเบฒเบ—เบตเปˆเบˆเบฑเบšเบ„เบนเปˆ.

static เบฎเบนเบšเปเบšเบš เบเบปเบ”เบฅเบฐเบšเบฝเบš
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ„เบปเบ‡เบ—เบตเปˆเปเบกเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบŠเบธเบ”เป„เบŸเบฅเปŒเบ—เบตเปˆเบˆเปเบฒเบเบฑเบ”เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™:

$(SPECIAL_MODULES).o : %.o : %.cpp
$(CXX) -c $(input) -o $(output)

เบ™เบตเป‰เบšเบญเบเบงเปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเปƒเบŠเป‰เบเบฑเบšเป„เบŸเบฅเปŒเปƒเบ™ "$(SPECIAL_MODULES).o".

เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš GNU เป€เบฎเบฑเบ”เปƒเบซเป‰; เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡ foreach (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰) เปเบกเปˆเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก
เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™.

เบ„เบฒเบ”เบฅเปˆเบงเบ‡ เปœเป‰เบฒ เบเบปเบ”เบฅเบฐเบšเบฝเบš
syntax เบฎเบนเบšเปเบšเบšเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เปเบกเปˆเบ™เบกเบตเบญเปเบฒเบ™เบฒเบ”เบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบ•เปˆ
เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ. Makepp เบชเบฐเบซเบ™เบญเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบก
syntax เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš: เบ›เบฐเป‚เบซเบเบ ":foreach" เบชเปเบฒเบฅเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบš.

target_expression : dependency_expression : foreach file-list
เบซเบธเป‰เบ™

เบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš foreach เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเป„เบ”เป‰เบ–เบทเบเบˆเปเบฒเบเบฑเบ”
เป„เบ›เบซเบฒเบฅเบฒเบเบเบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป„เบŸเบฅเปŒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบšเบญเบ
makepp เบงเบดเบ—เบตเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ—เบฑเบ‡เบซเบกเบปเบ” .c เป„เบŸเบฅเปŒ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ—เปˆเบฒเบ™เบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡ .c เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹
เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

#เบ™เบตเป‰เบ„เบทเบเบปเบ”เป€เบเบ™เบ—เบตเปˆเปƒเบŠเป‰เป„เบ”เป‰เบเบฑเบšเบ—เบธเบเบขเปˆเบฒเบ‡:
%.o : %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

%.o : %.c : foreach $(SPECIAL_MODULES)
$(CC) $(SPECIAL_CFLAGS) -c $(input) -o $(output)

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบญเปเบฒเบ™เบฒเบ”เบซเบผเบฒเบเบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš foreach เปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒเบ•เบปเบงเปเบ›
"$(foreach)" เบ–เบทเบเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เปเบ•เปˆเบฅเบฐเป„เบŸเบฅเปŒเบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเบฅเบฒเบเบเบฒเบ™เป„เบŸเบฅเปŒเปเบฅเบฐเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบฅเบฐ
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ–เบทเบเบ›เบฐเป€เบกเบตเบ™. เบฅเบฒเบเบŠเบทเปˆเป„เบŸเบฅเปŒเบญเบฒเบ”เบกเบตเบ•เบปเบงเปเบ—เบ™, เปเบฅเบฐเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰
เบเบปเบ‡เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เบกเบตเป€เบ—เบทเปˆเบญ เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰ (เป€เบšเบดเปˆเบ‡ "Wildcards" เปƒเบ™
makepp_rules).

เบ™เบตเป‰เปเบกเปˆเบ™ syntax unwieldy เปเบ•เปˆเบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบ—เบตเปˆเบชเบธเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบ•เบปเบงเปเบ› "$(foreach)"
เบญเบฒเบ”เบˆเบฐเบ›เบฒเบเบปเบ”เปƒเบ™เบ—เบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบกเปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเปเบกเปˆเบ™เปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡ a
เบเปเบฅเบฐเบ™เบตเบžเบดเป€เบชเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš foreach; เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹

%.o : %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

เป€เบ—เบปเปˆเบฒเบเบฑเบš:

$(patsubst %.c, %.o, $(foreach)): $(foreach): foreach *.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

(เปƒเบ™โ€‹เบ„เบงเบฒเบกโ€‹เป€เบ›เบฑเบ™โ€‹เบˆเบดเบ‡, เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ›เปˆเบฝเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เบกเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เบžเบฒเบโ€‹เปƒเบ™.)

เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบˆเบฐเปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ ":foreach" เบšเปˆเบญเบ™เบ—เบตเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบšเปเปˆเปเบกเปˆเบ™
เบžเบฝเบ‡เบžเป, เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบšเบฒเบ‡เบญเบฑเบ™ .c เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป‚เบ”เบเปƒเบŠเป‰เบ•เบปเบงเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบšเบฒเบ‡เบŠเบฐเบ™เบดเบ”
เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบงเบ a .k เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ. เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™ .c เป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบต a
เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเบเปˆเบงเบฒเบ›เบปเบเบเบฐเบ•เบด .c เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ—เปเบฒเบกเบฐเบ”เบฒ
เป„เบŸเบฅเปŒ. เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบณเบฅเบฑเบšเป„เบŸเบฅเปŒ .c เบ—เบณเบกเบฐเบ”เบฒ:
%.o : %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ .c เบˆเบฒเบเป„เบŸเบฅเปŒ .k:
%.c : %.k
$(preprocessor) $(input) > $(output)

# เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบžเบดเป€เบชเบ”เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒ .c เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบˆเบฒเบเป„เบŸเบฅเปŒ .k:
$(foreach:%.k=%.o): $(foreach:%.c=%.k): foreach *.k
$(CC) $(SPECIAL_CFLAGS) -c $(input) -o $(output)

(เบ™เบตเป‰เปƒเบŠเป‰ syntax เบญเป‰เบฒเบ‡เบญเบตเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ—เบตเปˆเบซเบเปเป‰เป€เบฅเบฑเบเบ™เป‰เบญเบเบเบงเปˆเบฒเบเบฒเบ™เป‚เบ—เบซเบฒ
"patsubst" เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™.)

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เปˆเบฝเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ› ("CFLAGS" เปƒเบ™เบ™เบตเป‰
เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹) เบšเบฒเบ‡โ€‹เบ„เบฑเป‰เบ‡โ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบ”เบงเบโ€‹เบซเบผเบฒเบโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ•เบปเบงโ€‹เปเบ›โ€‹เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบโ€‹เบชเบฐโ€‹เป€เบžเบฒเบฐโ€‹.

Legacy แž”แž…แŸ’แž…แŸแž™ เบเบปเบ”เบฅเบฐเบšเบฝเบš
เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เปƒเบ™เบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡, makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ•เปเปˆเบ—เป‰เบฒเบเปเบšเบšเป€เบเบปเปˆเบฒ.

.suffix1.suffix2:
เบซเบธเป‰เบ™

เป€เบ—เบปเปˆเบฒเบเบฑเบš

%.suffix2: %.suffix1
เบซเบธเป‰เบ™

เปเบ•เปˆเบซเบผเบฒเบเบเบฒเบเบ—เบตเปˆเบˆเบฐเบˆเบทเปˆ. (เบ„เบณเบ•เปเปˆเบ—เป‰เบฒเบเบญเบฑเบ™เปƒเบ”เบกเบฒเบเปˆเบญเบ™?) เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบเบปเบ”เบฅเบฐเบšเบฝเบšเบˆเบฐเบ›เบฒเบเบปเบ”เบ‚เบถเป‰เบ™
เปƒเบ™ makefile เบกเปเบฅเบฐเบ”เบปเบเป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

.co:
$(CC) $(CFLAGS) -c $*.c -o $*.o

เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™เปเบ—เป‰เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบเบฑเบš

%.o : %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

เบเบฒเบ™เบ‚เบฑเบ”เบ‚เบทเบ™ เบเบปเบ”เบฅเบฐเบšเบฝเบš
เป€เบกเบทเปˆเบญเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เป„เบŸเบฅเปŒ, makepp เปƒเบŠเป‰เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‡เปˆเบฒเบเป†เป€เบžเบทเปˆเบญ
เบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰.

ยท เบกเบฑเบ™เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบˆเบฐเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ—เบตเปˆเบ‚เบฑเบ”เปเบเป‰เบ‡เบเบฑเบ™เปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ.

ยท เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบš เปเบฅเบฐเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡ foreach เบ—เบตเปˆเบกเบต wildcards เบšเปเปˆเป€เบ„เบตเบ override เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบš. (เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ‡เปˆเบฒเบเป†
เบเบฒเบ™เปƒเบŠเป‰เบ›เบฐเป‚เบซเบเบ ":foreach" เบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบš. เบกเบฑเบ™เบ•เป‰เบญเบ‡เบกเบต a
wildcard (เป€เบŠเบฑเปˆเบ™ "*" เบซเบผเบท "?") เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบŠเบทเปˆเป„เบŸเบฅเปŒเปƒเบ™เบ›เบฐเป‚เบซเบเบ ":foreach". เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™
เบžเบฝเบ‡เปเบ•เปˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒ, เบกเบฑเบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™
เป„เบŸเบฅเปŒ.)

ยทเป€เบกเบทเปˆเบญเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ‚เบฑเบ”เปเบเป‰เบ‡เบกเบฒเบˆเบฒเบ makefiles เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบเบปเบ”เบฅเบฐเบšเบฝเบšเบˆเบฒเบ "เปƒเบเป‰เบเบงเปˆเบฒ"
makefiles override เบเบปเบ”เบฅเบฐเบšเบฝเบšเบˆเบฒเบ makefiles "เป„เบเบเบงเปˆเบฒ". "เปƒเบเป‰" เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ makefile
เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบเป‰เบเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบ™เบฅเปเบฒเบ”เบฑเบšเบŠเบฑเป‰เบ™เบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต (ie, เบŠเบทเปˆเป„เบŸเบฅเปŒเบ‚เบญเบ‡
เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆ makefile เบ–เบทเบเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปเบกเปˆเบ™เบชเบฑเป‰เบ™เบเบงเปˆเบฒ). เบ–เป‰เบฒเบ™เบตเป‰
เบšเปเปˆเป„เบ”เป‰เบˆเปเบฒเปเบ™เบ makefiles, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบˆเบฒเบ makefile เบ—เบตเปˆเบ–เบทเบเป‚เบซเบฅเบ”
เบฅเปˆเบฒโ€‹เบชเบธเบ”โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹.

เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
เบ•เบปเป‰เบ™เป„เบกเป‰เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบžเบฝเบ‡เปเบ•เปˆ makefile เบฅเบฐเบ”เบฑเบšเป€เบ—เบดเบ‡, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” override เบกเบฑเบ™เปƒเบ™
makefile เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, makefile เบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบญเบšเบกเบต:

%.o : %.c : foreach **/*.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

เปเบฅเบฐเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบกเบต makefile เปƒเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ subdirectories เบ—เบตเปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒ:

%.o : %.c
$(CC) $(SPECIAL_CFLAGS) -c $(input) -o $(output)

ยท เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบกเบตเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เบญเบฐเบ™เบธเบกเบฒเบ™เบชเบฑเป‰เบ™เบเบงเปˆเบฒเปเบกเปˆเบ™เบกเบฑเบเบซเบผเบฒเบเบเบงเปˆเบฒเบฎเบนเบšเปเบšเบšเบญเบทเปˆเบ™เป†
เบเบปเบ”เบฅเบฐเบšเบฝเบš. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰ (เบญเบตเบ‡เปƒเบชเปˆเบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบ
Linux kernel):

%.s: %.c
$(CC) -s $(input) -o $(output)

%.o: %.s
$(AS) $(input) -o $(output)

%.o: %.c
$(CC) -c $(input) -o $(output)

เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ "xyz.o", เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ ".s" เบฅเบฐเบ”เบฑเบšเบ›เบฒเบ™เบเบฒเบ‡เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
เปเบฅเปˆเบ™เบœเปˆเบฒเบ™เบ•เบปเบงเบ›เบฐเบเบญเบšเป‚เบ”เบเปƒเบŠเป‰เบชเบญเบ‡เบเบปเบ” เบ—เบณ เบญเบดเบ”, เบซเบผเบทเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป„เบ›เบซเบฒ a
เป„เบŸเบฅเปŒ ".o" เป‚เบ”เบเปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบธเบ”เบ—เป‰เบฒเบ. เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบกเบฑเบเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบตเบซเบ™เป‰เบญเบ
เบ‚เบฑเป‰เบ™ เบ•เบญเบ™ เปƒเบ™ เบฅเบฐ เบšเบปเบš เบ•เปˆเบญเบ‡ เป‚เบชเป‰ เบ‚เบญเบ‡ inference (เบซเบ™เบถเปˆเบ‡ เปเบ—เบ™ เบ—เบตเปˆ เบˆเบฐ เป€เบ›เบฑเบ™ เบชเบญเบ‡).

ยท เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ•เปเปˆเบกเบฒเปƒเบ™ makefile override เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰. (เบ™เบตเป‰โ€‹เปเบกเปˆเบ™
เบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™เบˆเบฒเบ GNU เป€เบฎเบฑเบ”เปƒเบซเป‰.) เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ„เบงเบ™เบงเบฒเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบปเปˆเบงเป„เบ›เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เปเบฅเบฐเบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ•เปเปˆเบกเบฒ. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

%o: %c # เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›.
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”

special_%.o: special_%.c # เบเบปเบ”เบฅเบฐเบšเบฝเบšเบžเบดเป€เบชเบ”เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบต a
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ # "special_" เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ.

เบเบปเบ”เบฅเบฐเบšเบฝเบš เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™
เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฐเบซเบ™เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญเบ”เบฑเบ”เปเบ›เบ‡เบงเบดเบ—เบตเบเบฒเบ™ makepp เบ›เบฐเบ•เบดเบšเบฑเบ”
เบเบปเบ”เบฅเบฐเบšเบฝเบš. เบ•เบปเบงเป€เบฅเบทเบญเบเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ–เบทเบเบฅเบฐเบšเบธเป€เบ›เบฑเบ™ ":optionname value", เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบขเบนเปˆเปƒเบ™เปเบ–เบงเบ—เบตเปˆเบกเบต
เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช, เบซเบผเบทเปƒเบ™เปเบ–เบงเบ•เปเปˆเป„เบ›.

เบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปƒเบ™เบชเบฒเบเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบญเบฒเบ”เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบ”เบฝเบงเบเบฑเบ™
makefile เบเบฑเบš makepp เปเบฅเบฐเป€เบฎเบฑเบ”เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

เป€เบ›เบปเป‰เบฒเปเบฒเบ : เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช
: เบฅเบฒเบเป€เบŠเบฑเบ™ target_newer
เบซเบธเป‰เบ™

เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบเบฑเบš Unix เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก, เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบ•เบตเบ„เบงเบฒเบกเบซเบกเบฒเบเป€เบชเบฑเป‰เบ™ ": เบฅเบฒเบเป€เบŠเบฑเบ™".
เป€เบ›เบฑเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบเบฐ, เปเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”เบšเปเปˆเป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป€เบฅเบตเบ.

:build_cache /path/to/build/cache
เป€เบ›เบปเป‰เบฒเปเบฒเบ : เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช
: build_cache /put/cache/files/over/there
เบซเบธเป‰เบ™

เบฅเบฐเบšเบธเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒ build cache เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบœเบฐเบฅเบดเบ”เป‚เบ”เบเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰. เบ™เบตเป‰
overrides เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡ "build_cache" เบซเบผเบทเบ„เปเบฒเบชเบฑเปˆเบ‡ "--build-cache".
เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบ–เบง, เบ–เป‰เบฒเบกเบต, เบชเปเบฒเบฅเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰. เป€เบšเบดเปˆเบ‡ makepp_build_cache เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡
เปเบ„เบช.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบฐเบšเบธ "none" เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡, เบ—เปˆเบฒเบ™เบ›เบดเบ”เบเบฒเบ™เบชเป‰เบฒเบ‡ cache เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ™เบตเป‰
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฐเป€เบžเบฒเบฐ. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เป€เบชเบเบžเบทเป‰เบ™เบ—เบตเปˆเบ”เบดเบชเบเปŒเบเบฑเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเบ—เปˆเบฒเบ™
เบฎเบนเป‰เบงเปˆเบฒเบšเปเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐ cache, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบเป‰เบญเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™
เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ„เบทเบ™เปƒเบซเบกเปˆเบซเบผเบทเบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™เป„เบงเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบšเปเปˆเบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเป€เบเบฑเบšเบžเบงเบเบกเบฑเบ™เป„เบงเป‰.

:build_check build_check_method
เป€เบ›เบปเป‰เบฒเปเบฒเบ : เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช
: build_check target_newer
เบซเบธเป‰เบ™

เบญเบฑเบ™เบ™เบตเป‰เบšเบญเบ makepp เบงเปˆเบฒเบˆเบฐเปƒเบŠเป‰เบงเบดเบ—เบตเปƒเบ”เป€เบžเบทเปˆเบญเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเป€เบ›เบปเป‰เบฒเปเบฒเบเบ•เป‰เบญเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เปƒเปเปˆเบซเบผเบทเบšเปเปˆ.
เป€เบšเบดเปˆเบ‡ makepp_build_check เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เบ™เบตเป‰ overrides เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡
เบ„เปเบฒเบชเบฑเปˆเบ‡ "build_check" เบซเบผเบท "--build-check-method" เบ—เบฒเบ‡เป€เบฅเบทเบญเบเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡, เบ–เป‰เบฒเบกเบต, เบชเปเบฒเบฅเบฑเบš
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบ™เบตเป‰โ€‹.

:env เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ ...
เป€เบžเบตเปˆเบกเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเบกเบตเบŠเบทเปˆ. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เปƒเบ”เป†โ€‹เบ‚เบญเบ‡โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹
เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบกเปˆเบ™เบ–เบทเบงเปˆเบฒเบฅเป‰เบฒเบชเบฐเป„เบซเบก, เบ–เป‰เบฒ
build_check method เบ™เบฑเป‰เบ™ dictates. (เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบปเบเป€เบงเบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบš
target_newer เป€เบ„เบปเบฒเบฅเบปเบšเบญเบฑเบ™เบ™เบตเป‰.)

VARIABLE เบญเบฒเบ”เบˆเบฐเบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบš "เบŠเบทเปˆเป„เบŸเบฅเปŒเปƒเบ™ PATH_VARIABLE" (เปƒเบ™เบงเบปเบ‡เบขเบทเบก), เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰
เป€เบ›เบปเป‰เบฒเปเบฒเบเบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบฅเป‰เบฒเบชเบฐเป„เป เบ–เป‰เบฒเป„เบ”เป€เบฃเบฑเบเบ—เปเบฃเบตเบ—เบณเบญเบดเบ”เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”
เบ„เปˆเบฒเบ‚เบญเบ‡ PATH_VARIABLE เป€เบŠเบดเปˆเบ‡เบกเบตเบŠเบทเปˆเป„เบŸเบฅเปŒเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบเบฒเบ™เบชเป‰เบฒเบ‡เบซเบผเป‰เบฒเบชเบธเบ”.
เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบซเบกเปˆเป€เบกเบทเปˆเบญ PATH_VARIABLE เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™
เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

: เบˆเบฑเบ”เบชเบปเปˆเบ‡ เบ„เปเบฒเบชเบฑเปˆเบ‡ ...
เบ„เบฑเบ”เบ•เบดเบ”เปเบ•เปˆเบฅเบฐเบเบฒเบ™เบเบฐเบ—เบณเบ‚เบญเบ‡เปเบเบฐ (เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบ„เบณเบชเบฑเปˆเบ‡ Perl เบซเบผเบทเบ„เบณเบชเบฑเปˆเบ‡ Perl) เปƒเบ™ "sh -c '...'"
เปเบฅเบฐเบ™เปเบฒเบซเบ™เป‰เบฒเบ”เป‰เบงเบเบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบ•เปˆเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบšเปเปˆเบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡.
เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฑเบšเบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เปเบ–เบงเบงเบฝเบ, เปเบ•เปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™
เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฒเบ”เบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ„เบดเบง, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เปเบ–เบง
เบฅเบฐเบšเบปเบšเป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ—เบฑเบ‡เบซเบกเบปเบ”.

:เบฅเบงเบก file_or_pattern
เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป„เบ›เบ•เบฒเบก compiler:

%.o : %.c
: เบฅเบงเบก %.d : เบฅเบฒเบเป€เบŠเบฑเบ™ C
gcc -MD -c ...

%.o : %.c
: include %.u : เบฅเบฒเบเป€เบŠเบฑเบ™ C# IBM เปƒเบŠเป‰เบ„เบณเบ•เปเปˆเบ—เป‰เบฒเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡
xlc -M -c ...

sub dependify { # เบ›เปˆเบฝเบ™เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ Microsoft เปƒเบซเป‰เป€เบ›เบฑเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”
s/\$/\$\$/g;
s/(เปเบฒเบเป€เบซเบ”: เบฅเบงเบกเบ—เบฑเบ‡เป„เบŸเบฅเปŒ: *)?(.+?)\r?\n/$1 ? "'$2' " : "'".f_output()."': "/e;
}
%.o : %.c
: เบฅเบงเบก %.d : เบฅเบฒเบเป€เบŠเบฑเบ™ C
cl -showIncludes -c ... >$(stem).d
&sed &dependify -o +<$(stem).d

เบšเบฒเบ‡ compilers (icc เบ‚เบญเบ‡ Intel เบ„เบทเบเบฑเบ™เบเบฑเบš gcc เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบซเบผเบท IBM's xlc) เบชเบฒเบกเบฒเบ”เบœเบฐเบฅเบดเบ” dependency.
เป„เบŸเบฅโ€‹เปŒโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบšเบดเบ™โ€‹. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเบฅเบงเบšเบฅเบงเบก, เบžเบงเบเป€เบ‚เบปเบฒเบ‚เบฝเบ™ makefile เบ—เบตเปˆ makepp เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบฅเบงเบก. เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบเบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบชเบฐเปเบเบ™เบ‚เบญเบ‡ makepp เปเบกเปˆเบ™เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™ 100%
เบ–เบทเบเบ•เป‰เบญเบ‡, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเปƒเบเป‰.

เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ™เบตเป‰ harnesses เบงเปˆเบฒโ€‹เปƒเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เบžเบดโ€‹เป€เบชเบ”โ€‹: เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹, เป€เบŠเบฑเปˆเบ™โ€‹:โ€‹
เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบต 1, เบเบฒเบ™เบชเบฐเปเบเบ™เบ›เบปเบเบเบฐเบ•เบดเป€เบเบตเบ”เบ‚เบทเป‰เบ™. เปเบ•เปˆเบ–เป‰เบฒเป„เบŸเบฅเปŒเบกเบตเบขเบนเปˆ, เบšเปเปˆเบกเบต
เบเบฒเบ™เบชเบฐเปเบเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™ (เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฅเบฐเบšเบธเบฅเบฒเบเป€เบŠเบฑเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ -- เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบเบ™เบ•เบปเบ
เบเบฑเบšโ€‹เบ„เบทเบ™โ€‹เป„เบ›โ€‹เบšเปˆเบญเบ™โ€‹เบ„เปˆเบฒโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™ dumb เบ‚เบญเบ‡ timestamp เปเบฅเบฐโ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹)โ€‹. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบกเบฑเบ™เบ›เบฐเบเบญเบšเบกเบตเป„เบŸเบฅเปŒ, เบเปˆเบญเบ™
เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹. เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”, เบกเบฑเบ™เบฅเบทเบกเปƒเบ”เบเปเปˆเบ•เบฒเบกเบกเบฑเบ™
เบญเปˆเบฒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเป„เบŸเบฅเปŒเบญเบฒเบ”เบˆเบฐเบฅเป‰เบฒเบชเบฐเป„เบซเบก. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบกเบฑเบ™เบญเปˆเบฒเบ™
เป„เบŸเบฅเปŒเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบกเบตเบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก.

เบ„เปเบฒเป€เบ•เบทเบญเบ™: เบญเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท. เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เป‚เบ”เบเบซเบผเบฒเบ
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เป€เบžเบดเปˆเบ‡โ€‹เบžเบฒโ€‹เบญเบฒโ€‹เป„เบชโ€‹. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบœเบนเป‰เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”
เบกเบฑเบ™เบ›เบฐเบเบญเบšเบกเบตเบเปˆเบญเบเบžเบฒเบเปƒเบ™, เป€เบŠเบดเปˆเบ‡ makepp เบกเบฑเบเบˆเบฐเบšเปเปˆเบชเบปเบ™เปƒเบˆ. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบซเบ™เป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท
เบ›เบฐเป‚เบซเบเบ”เบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบตเปˆ patch compiler เปเบเป‰เป„เบ‚เบžเบฝเบ‡เปเบ•เปˆเบเปˆเบญเบ. เป„เบ”เป‰
เบฅเบฒเบ„เบฒเปเบกเปˆเบ™เบงเปˆเบฒ makepp เบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡เป€เบšเบดเปˆเบ‡เป„เบŸเบฅเปŒเบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒ.

เบกเบตเบเบฒเบ™เบˆเบฑเบšเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡ "#include" เบญเบญเบ เปเบฅเบฐ เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™:
เบกเบฑเบ™เบˆเบฐเบเบฑเบ‡เบ–เบทเบเบเปˆเบฒเบงเป€เบ–เบดเบ‡เบขเบนเปˆเปƒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบˆเบฒเบเบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบ, เป€เบกเบทเปˆเบญเบกเบฑเบ™เปเบกเปˆเบ™
เบ•เป‰เบญเบ‡เบเบฒเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปเบเป‰เป„เบ‚เป„เบŸเบฅเปŒ dependency เป€เบžเบทเปˆเบญเป€เบญเบปเบฒ dependency
เบŠเบถเปˆเบ‡โ€‹เบšเปเปˆโ€‹เบชเบฒเบกเบฒเบ”โ€‹เบšเบฑเบ™เบฅเบธโ€‹เป„เบ”เป‰โ€‹เบญเบตเบโ€‹เบ•เปเปˆโ€‹เป„เบ›.

เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ™เบตเป‰เบšเปเปˆเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบเบฑเบš build cache เป„เบ”เป‰เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบ”เบถเบ‡เป„เบŸเบฅเปŒเบˆเบฒเบเบšเปˆเบญเบ™เบ™เบฑเป‰เบ™
เบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเป‰เบ—เบธเบเบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเป„เบŸเบฅเปŒ. เปเบ•เปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™
เป„เบŸเบฅเปŒ makepp เบฎเบฝเบ™เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เบกเบฑเบ™. เบเบฒเบ™เบ‚เบทเป‰เบ™เบเบฑเบšเบงเบปเบ‡เบงเบฝเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปเบกเปˆเบ™เบšเปเปˆเบ›เบปเบเบเบฐเบ•เบด
เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบซเบกเปˆ
เปเบฅเบฐเบเบฒเบ™เบญเปˆเบฒเบ™เป„เบŸเบฅเปŒ dependency เบ„เบทเบ™เปƒเปเปˆเบ—เบธเบเบขเปˆเบฒเบ‡เปเบกเปˆเบ™เบ–เบทเบเบ•เป‰เบญเบ‡เบญเบตเบเบ„เบฑเป‰เบ‡.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, makepp เบˆเบฐเป€เบฅเบทเบญเบเป€เบญเบปเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบˆเบฒเบ
1 repository เบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบซเบ™เบถเปˆเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเป„เบŸเบฅเปŒเบญเบทเปˆเบ™เป†, เบšเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบ—เบต 1
เบ”เป‰เบงเบเบฅเบฒเบเป€เบŠเบฑเบ™เบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰. เบ™เบตเป‰เปเบกเปˆเบ™เบ”เบตเบเปˆเบงเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ, เบšเปˆเบญเบ™เบ—เบตเปˆเบ‚เบฒเบ”เปเบ„เบ™
เบฅเบฒเบเป€เบŠเบฑเบ™, เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเป„เบ”เป‰.

:เป‚เบญโ€‹เบเบฒเบ”โ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบ
เป€เบ›เบตเบ”เปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเป€เบ›เบตเบ”, เป€เบŠเบฑเปˆเบ™:

%.foo foo%.bar: :last_chance
&เบชเบฝเบ‡ $@ -o $@
&cp $(เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš)

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบšเปเปˆเบกเบตเบ‚เบญเบšเป€เบ‚เบ”เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™,
เป€เบ›เบปเป‰เบฒเปเบฒเบเบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰เบˆเบฐเบšเปเปˆเบเบปเบ‡เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™ $(wildcard) เบซเบผเบทเบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบšเป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆ
เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™เป„เบ”เป‰เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเป‚เบ”เบเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ.
เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒ "--rm-stale" เบ–เบทเบเบฅเบฐเบšเบธ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเป€เบซเบฅเบทเบญเบˆเบฒเบเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ
makepp run เบˆเบฐเบ›เบฒเบเบปเบ”เบงเปˆเบฒ stale เบ–เป‰เบฒเบงเบดเบ—เบตเบ”เบฝเบงเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบกเบฑเบ™เปเบกเปˆเบ™เบœเปˆเบฒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบธเบ”เบ—เป‰เบฒเบ
เบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเป€เบ—เบทเปˆเบญ, เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบฒเบฐเบงเปˆเบฒ
เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบˆเบฐโ€‹เบฅเบปเป‰เบกโ€‹เป€เบซเบผเบงโ€‹เบซเบผเบฒเบโ€‹เบชเบฐโ€‹เบซเบกเปเปˆเบฒโ€‹เบชเบฐโ€‹เป€เบซเบกเบตโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบฑเบ™ erroneously เบญเบตเบ‡โ€‹เปƒเบชเปˆโ€‹เบ•เบปเบงโ€‹เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹
เบˆเบฑเบšเบ„เบนเปˆเป€เบ›เบปเป‰เบฒเปเบฒเบเบˆเบฒเบเบเบฒเบ™เปเบฅเปˆเบ™เบเปˆเบญเบ™เปœเป‰เบฒ.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ ":last_chance" เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเบฎเบฝเบเบฎเป‰เบญเบ‡เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ•เปเปˆเบเบฑเบšเบžเบถเบ”เบ•เบดเบเปเบฒเบžเบดเป€เบชเบ”เบ‚เบญเบ‡
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ wildcards.

:parser เปเบกเปˆเบšเบปเบ”
เบ™เบตเป‰เบšเบญเบ makepp เบงเบดเบ—เบตเบเบฒเบ™เปเบเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš (เบฅเบงเบกเบ—เบฑเบ‡) เป„เบŸเบฅเปŒ. เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง,
makepp เบ„เบฒเบ”เป€เบ”เบปเบฒเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบกเบฑเบ™เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปเบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡ (เป€เบšเบดเปˆเบ‡
makepp_scanning เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”). เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ–เป‰เบฒ makepp เบ„เบฒเบ”เป€เบ”เบปเบฒเบœเบดเบ”, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™
เบŠเบตเป‰เบšเบญเบเบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

%.o: %.abc
: parser c_compilation
เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบขเบนเปˆโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹

เบญเบฑเบ™เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰ makepp เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบเบ เปเบฅเบฐเบชเบฐเปเบเบ™เปเบšเบšเบ”เบฝเบงเบเบฑเบ™เบเบฑเบš C/C++
เบเปเปˆเบชเป‰เบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบฎเบนเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก C.

parser เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบฅเบฐเบšเบธเบ•เบปเบงเป€เบฅเบทเบญเบ ":parser",
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เปเบฒเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบ„เปเบฒเบชเบฑเปˆเบ‡เบ–เบทเบเบเบงเบ”เบชเบญเบš. เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบซเบผเบทเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ
เบ„เปเบฒเบชเบฑเปˆเบ‡, makepp เบˆเบฐเปƒเบŠเป‰ "c_compilation" parser; เบซเบผเบทเบ–เป‰เบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ
GNU variant, "gcc_compilation". เบ–เป‰เบฒเบšเปเปˆเบžเบปเบšเบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐ, เบกเบฑเบ™เปƒเบŠเป‰เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐ "none". เบชเปเบฒเบฅเบฑเบš
เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบซเบผเบทเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™ parser เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบซเบผเบทเบ›เปˆเบฝเบ™ makepp's
เบ•เบปเบงเบงเบดเป€เบ„เบฒเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบšเบดเปˆเบ‡ makepp_scanning.

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ™เบตเป‰เปƒเบŠเป‰เบเบฑเบšเบ—เบธเบเป†เบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš, เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™:

%.o: %.c : parser c-compilation
@echo 'เบเบฒเบ™เบชเป‰เบฒเบ‡ $(output)'
@funny_cc...

เบ™เบตเป‰เบเบฑเบ‡เบˆเบฐเบ•เบตเบ„เบงเบฒเบกเบซเบกเบฒเบ "echo" เป€เบ›เบฑเบ™ compiler เปเบฅเบฐ deduce เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ‚เบญเบ‡เบ•เบปเบ™ 'เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡
mymodule.o' เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช implicit. เบ™เบตเป‰เบˆเบฐเบ™เปเบฒเป„เบ›เบชเบนเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ—เบธเบเบงเปˆเบฒเบกเบฑเบ™
เบšเปเปˆเบฎเบนเป‰เบงเบดเบ—เบตเบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเบ”เบตเบเบงเปˆเบฒ
"register_parser". เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™เป€เบˆเบปเป‰เบฒเบŠเบญเบเบซเบฒเบ„เบณเบญเบฐเบ—เบดเบšเบฒเบเปเบ™เบงเปƒเบ” เปเบกเปˆเบšเบปเบ” เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบกเบญเบšเปƒเบซเป‰เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™
classname เบซเบผเบทเบŠเบทเปˆเบŸเบฑเบ‡เบŠเบฑเบ™.

:เบฅเบฒเบเป€เบŠเบฑเบ™ signature_method
เป€เบ›เบปเป‰เบฒเปเบฒเบ : เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช
: เบฅเบฒเบเป€เบŠเบฑเบ™ md5
เบซเบธเป‰เบ™

เบญเบฑเบ™เบ™เบตเป‰เบšเบญเบ makepp เบงเปˆเบฒเบˆเบฐเปƒเบŠเป‰เบญเบฑเบ™เปƒเบ”เบญเบฑเบ™เปœเบถเปˆเบ‡เป€เบžเบทเปˆเบญเบเบณเบ™เบปเบ”เบงเปˆเบฒเบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบทเบšเปเปˆ.
เป€เบšเบดเปˆเบ‡ makepp_signatures เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เบงเบดเบ—เบตเบเบฒเบ™เบฅเบฒเบเป€เบŠเบฑเบ™เบ—เบตเปˆเบฅเบงเบกเบขเบนเปˆเปƒเบ™
เบเบฒเบ™เปเบˆเบเบขเบฒเบ makepp เปเบกเปˆเบ™ "เบ—เปเบฒเบกเบฐเบ”เบฒ", "md5", "C" เบซเบผเบท "c_compilation_md5", เปเบฅเบฐ.
"shared_object". เบ™เบตเป‰เปเบ—เบ™เบ—เบตเปˆเบงเบดเบ—เบตเบเบฒเบ™เบฅเบฒเบเป€เบŠเบฑเบ™เบ—เบตเปˆเบฅเบฐเบšเบธเป„เบงเป‰เบ”เป‰เบงเบ "-m" เบซเบผเบท
"--signature-method" เบ•เบปเบงเป€เบฅเบทเบญเบเปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡, เบซเบผเบทเบ”เป‰เบงเบเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡ "เบฅเบฒเบเป€เบŠเบฑเบ™".

เบžเบดเป€เบชเบ” เบฅเบฑเบเบชเบฐเบ™เบฐ
Makepp เบชเบฒเบกเบฒเบ”เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เปƒเบ™เบžเบงเบเบกเบฑเบ™เป€เบŠเบฑเปˆเบ™: เบˆเปเป‰เบฒเบชเบญเบ‡เป€เบกเบฑเบ”เบซเบผเบทเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡.
เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "a:thing" เบˆเบฒเบเป„เบŸเบฅเปŒ "b:thing".
เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰:

a:thing : b:thing # เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ‚เบญเบ‡เป„เบงเบเบฐเบเบญเบ™
&cat $(input) -o $(output)

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ makepp เบˆเบฐเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเป‚เบ„เบ™เปƒเบซเบเปˆเปƒเบ”เบ—เบตเปˆเปเบเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบˆเบฒเบเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปเบฅเบฐเบญเบฑเบ™เปƒเบ”
เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบŠเบทเปˆเป„เบŸเบฅเปŒ. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบžเบฝเบ‡เปเบ•เปˆเปƒเบชเปˆเบŠเบทเปˆเปƒเบ™เบงเบปเบ‡เบขเบทเบก, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

"a:thing": "b:thing"
&cat $(input) -o $(output)

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบกเปˆเบ™เบšเปเปˆเปเบ™เปˆเบ™เบญเบ™.

Syntax เบงเบปเบ‡เบขเบทเบกเบ‚เบญเบ‡ Makepp เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš Shell's. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ”เบฝเบง
quotes เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบงเบปเบ‡เบขเบทเบกเบ„เบนเปˆ, เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบ™เบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”เบ—เบตเปˆเบกเบต backslash:

a\:เบชเบดเปˆเบ‡ : 'b:thing'
&cat $(input) -o $(output)

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบŠเบทเปˆเป„เบŸเบฅเปŒเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบกเปˆเบ™ "'"!;\$". เบ”เบฝเบงเบ™เบตเป‰เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เป€เบˆเบปเป‰เบฒเบˆเบถเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง.
เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰, เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบฐเบšเบธเบกเบฑเบ™เบเบฑเบš makepp (เปเบฅเบฐ shell):

\''"!;\$$'
"'\"!;\\$$"

เป€เบญเบปเบฒ เปƒเบˆ เปƒเบชเปˆ เบเปˆเบฝเบง เบเบฑเบš เป€เบง เบฅเบฒ เบ—เบตเปˆ makepp strips quotes เปเบฅเบฐ เปƒเบ™ เป€เบง เบฅเบฒ เบ—เบตเปˆ เปเบเบฐ เป„เบ”เป‰. Makepp เป€เบšเบดเปˆเบ‡เบขเบนเปˆ
quotes เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

ยทเปƒเบ™เบ„เบญเบšเบ„เบปเบง "ifeq" เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš

ยท เบเปˆเบญเบ™ เปเบฅเบฐ เบซเบผเบฑเบ‡ เบˆเปเป‰เบฒ เบชเบญเบ‡ เป€เบกเบฑเบ”

ยทเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบชเป‰เบฒเบ‡เปƒเบ™ makepp

ยท เปƒเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบ—เบตเปˆโ€‹เบเปˆเบฝเบงโ€‹เบ‚เป‰เบญเบ‡โ€‹เบเบฑเบšโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹

เบšเปเปˆเบ„เบทเบเบฑเบšเปเบเบฐ, makepp เบšเปเปˆเป„เบ”เป‰เบ‚เบฐเบซเบเบฒเบเบงเบปเบ‡เบขเบทเบกเปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบžเบงเบเบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเปเบ›. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™:

FILE = 'เบŠเบทเปˆเบ—เบตเปˆเบกเบตเบเบฐเบซเบงเปˆเบฒเบ‡'
x := $(เบžเบดเบก $(FILE)) # เบžเบฝเบ‡เปเบ•เปˆเป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบงเบปเบ‡เบขเบทเบกเบเบฑเบ‡เบกเบตเบขเบนเปˆ
$(FILE): # เบงเบปเบ‡เบขเบทเบกเบ›เบฐเบกเบฒเบ™เป„เบŸเบฅเปŒเบ”เบฝเบงเบ—เบตเปˆเบ–เบญเบ”เบญเบญเบเป‚เบ”เบ makepp
&echo hello -o$(FILE) # เบงเบปเบ‡เบขเบทเบกเบ›เบฐเบกเบฒเบ™เป„เบŸเบฅเปŒเบ”เบฝเบงเบ—เบตเปˆเบ–เบญเบ”เบญเบญเบเป‚เบ”เบ makepp
เบชเบฐเบ—เป‰เบญเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ >>$(FILE) # เบงเบปเบ‡เบขเบทเบกเบ›เบฐเบกเบฒเบ™เป„เบŸเบฅเปŒเบ”เบฝเบงเบ—เบตเปˆเบ–เบทเบเบ–เบญเบ”เบญเบญเบเป‚เบ”เบ Shell
'เบŠเบทเปˆเบ—เบตเปˆเบกเบตเบเบฐเบซเบงเปˆเบฒเบ‡':
&เบชเบฐเบ—เป‰เบญเบ™เบชเบฐเบšเบฒเบเบ”เบต -o'name with spaces'
echo there >>'$(output)' # quotes has stripped above, add them again

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ (เบšเปเปˆเบ„เบทเบเบฑเบš Shell) เบ•เบปเบงเปเบ›เบ—เบตเปˆเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "$" เปเบกเปˆเบ™เบ‚เบฐเบซเบเบฒเบเบญเบญเบเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบžเบฒเบเปƒเบ™เบ”เบฝเบง
เบงเบปเบ‡เบขเบทเบก. เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ›เบปเบเบ›เป‰เบญเบ‡เป‚เบ”เบเบงเบปเบ‡เบขเบทเบกเบซเบผเบท backslashes. เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเบนเป‰เบซเบ™เบฑเบ‡เบชเบท
เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒ, เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒเบ„เบนเปˆ, เบ•เบปเบงเบขเปˆเบฒเบ‡,

$(เบŸเบญเบเบ—เบฑเบ‡เปเบปเบ”):
@&echo เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒ: $$
@for val เปƒเบ™ abcd; เป€เบฎเบฑเบ”เบชเบฝเบ‡เบชเบฐเบ—เป‰เบญเบ™ $$val; เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบˆเบฐเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เปƒเบ”เป†เป‚เบ”เบเบเบฒเบ™เบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบกเบฑเบ™
เปƒเบ™เบšเบฒเบ‡เบ—เบฒเบ‡. เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡, เบฅเบฑเบเบชเบฐเบ™เบฐเบเบฒเบ™เบ„เบงเบšเบ„เบธเบก, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบˆเบปเปˆเบ‡เบฎเบนเป‰เบงเปˆเบฒเบขเบนเปˆเบ—เบตเปˆ
เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบเบฒเบ™เบ–เบญเบ”เบ„เปเบฒเบ„เบดเบ”เบ„เปเบฒเป€เบซเบฑเบ™เบ‚เบญเบ‡ makepp เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ, เปเบฅเบฐเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "#".
เบเปˆเบญเบ™เปœเป‰เบฒเบ”เป‰เบงเบเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบˆเบฐเบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเปเบฒเบเบงเปˆเบฒเป€เบ›เบฑเบ™เบ„เบณเป€เบซเบฑเบ™เบšเปเปˆเบงเปˆเบฒเบžเบงเบเบกเบฑเบ™เบ–เบทเบเบญเป‰เบฒเบ‡เบญเบตเบ‡เปเบ™เบงเปƒเบ”.

เป€เบกเบทเปˆเบญเบŠเบทเปˆเป€เบ›เบปเป‰เบฒเปเบฒเบ เบซเบผเบทเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบŠเบฑเปˆเบ™ "$(output)", เบˆเบฒเบเบ™เบฑเป‰เบ™
เบงเบปเบ‡เบขเบทเบก เปเบฅเบฐ backslashes เปƒเบ”เบ–เบทเบเบ–เบญเบ”เบญเบญเบ. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบญเป‰เบฒเบ‡เบญเบดเบ‡
เบŠเบทเปˆเป„เบŸเบฅเปŒเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”, เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบกเบฑเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

"เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบเบฐเบซเบงเปˆเบฒเบ‡":
เบชเบฝเบ‡เบชเบฐเบ—เป‰เบญเบ™ "เป€เบ™เบทเป‰เบญเปƒเบ™เบžเบดเป€เบชเบ”" > "$@"

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเปƒเบชเปˆเบงเบปเบ‡เบขเบทเบกเบ›เบฐเบกเบฒเบ™ $@, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ shell เบˆเบฐเป€เบซเบฑเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡

echo "เป€เบ™เบทเป‰เบญเปƒเบ™เบžเบดเป€เบชเบ”" > เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบเบฐเบซเบงเปˆเบฒเบ‡

เป€เบŠเบดเปˆเบ‡เบ‚เบฝเบ™เบ‚เปเป‰เบ„เบงเบฒเบก "เบŠเบทเปˆเป„เบŸเบฅเปŒเป€เบ™เบทเป‰เบญเบซเบฒเบžเบดเป€เบชเบ”เบ—เบตเปˆเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡" เปƒเบชเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ a.
เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™.

เปƒเบŠเป‰ makepp_rules เบญเบญเบ™เบฅเบฒเบเป‚เบ”เบเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ onworks.net


เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบŸเบฃเบต

เบ”เบฒเบงเป‚เบซเบผเบ”เปเบญเบฑเบš Windows เปเบฅเบฐ Linux

Linux เบ„เบณ เบชเบฑเปˆเบ‡

Ad