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

Ad


OnWorks favicon

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

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

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

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

NAME


makepp_functions -- เบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ™ makepp

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


A: absolute_filename,
absolute_filename_nolink,
abspath,
เบ•เบทเปˆเบกเบ„เบณเบ™เบณเปœเป‰เบฒ,
เบชเปˆเบงเบ™เบ•เบทเปˆเบก,
เปเบฅเบฐ, B: เบŠเบทเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™, C: เป‚เบ—, D: เปเบกเปˆเบ™,
dir_noslash, E: เบ„เบงเบฒเบกโ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”โ€‹, F: เป„เบŸเบฅโ€‹เปŒโ€‹,
เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡,
filter_out,
filter_out_dirs,
เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒ,
find_first_upwards,
เป‚เบ›เบฃเปเบเบฃเบกเบŠเบญเบเบซเบฒ,
เบŠเบญเบเบซเบฒเบชเบฒเบ,
find_upwards,
first_available,
เบ„เปเบฒโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹,
foreach, I: เบ–เป‰เบฒ,
เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง,
infer_linker,
infer_objects,
เบ‚เปเป‰เบกเบนเบ™, J: เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก, M: เป€เบฎเบฑเบ”,
เปเบœเบ™เบ—เบตเปˆ,
เบœเบนเป‰เบœเบฐเบฅเบดเบ”,
เปเบœเบ™เบ—เบตเปˆ,
"mktemp", N: notdir, O: only_generated,
only_nontargets,
only_phony_targets,
only_stale,
only_targets,
เบซเบผเบท,
เบ•เบปเป‰เบ™โ€‹เบเปเบฒโ€‹เป€เบ™เบตเบ”โ€‹, P: เบŠเปˆเบงเบโ€‹เป€เบซเบผเบทเบญโ€‹,
perl,
phony,
เบชเป‰เบฒเบ‡โ€‹เบฅเปˆเบงเบ‡โ€‹เบซเบ™เป‰เบฒโ€‹,
เบžเบดเบก, R: เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡,
relative_filename,
relative_to, S: เบซเบญเบ,
เบˆเบฑเบ”เบฅเบฝเบ‡,
เบฅเบญเบ,
เบเปˆเบญเบ,
เบ•เปเปˆเบ—เป‰เบฒเบ, T: เบŠเบปเปˆเบงเบ„เบฒเบง, W: เบ„เบณ เป€เบ•เบทเบญเบ™,
เบ•เบปเบงเปเบ—เบ™,
เบ„เปเบฒ,
เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹,
เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡, X: xargs

เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ‚เบญเบ‡เบฎเบนเบšเปเบšเบš "$(name)", เบšเปˆเบญเบ™เบ—เบตเปˆ "เบŠเบทเปˆ" เบšเปเปˆเปเบกเปˆเบ™เบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบงเปเบ›, เบซเบผเบท
"$(name arg1 arg2 arg3)" เบ–เบทเบเบ•เบตเบ„เบงเบฒเบกเปเบฒเบเบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™. เบŠเบทเปˆเบญเบฒเบ”เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™,
underscores, เบซเบผเบท hyphens; เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบชเบฑเบšเบชเบปเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ hyphens เบซเบผเบท underscores
เปเบฅเบเบ›เปˆเบฝเบ™เบเบฑเบ™เป„เบ”เป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เบเบฑเบšเบเบฑเป‰เบ‡เบžเบฒเบเปƒเบ™เบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™เบ‚เบตเบ”เบเป‰เบญเบ‡. เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ”เบฑเปˆเบ‡เบเปˆเบฒเบง
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบžเบฝเบ‡เปเบ•เปˆเป€เบญเบตเป‰เบ™เปƒเบŠเป‰เป€เบ›เบฑเบ™เบ›เบฐเบˆเบณเบเปˆเบญเบ Perl. เบ–เป‰เบฒ "เบŠเบทเปˆ" เบ–เบทเบเบ™เปเบฒเบซเบ™เป‰เบฒเบ”เป‰เบงเบ "&" เบกเบฑเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™
เบ„เปเบฒเบชเบฑเปˆเบ‡ builtin เบซเบผเบท script เบ‚เบญเบ‡เบŠเบทเปˆเบ™เบฑเป‰เบ™เบžเบฒเบเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ makepp, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™
เบœเบปเบ™เบœเบฐเบฅเบดเบ”. เบ™เบตเป‰เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบชเป‰เบฒเบ‡ perl เบชเปเบฒเบฅเบฑเบš PerlIO. เบ–เป‰เบฒเบŠเบทเปˆเบšเปเปˆเบ•เบฑเป‰เบ‡เบŠเบทเปˆเบŸเบฑเบ‡เบŠเบฑเบ™
เบกเบฑเบ™โ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบซเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบฎเบฝเบโ€‹เบฎเป‰เบญเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป‚เบ—โ€‹.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเปเบ›เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบ "$(name ...)" เบซเบผเบท "${name ...}". เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™
เบเบฑเบ‡เบงเบปเบ‡เป€เบฅเบฑเบšเบ”เบฝเบงเบเบฑเบ™, เบกเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบˆเบฑเบšเบ„เบนเปˆ, เบญเบฑเบ™เบญเบทเปˆเบ™เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™: "$(เบŠเบทเปˆ
...(){..." เบซเบผเบท "${name ...{}(...}".
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ.) double เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบˆเบฐ span เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™. เปเบ–เบงเปƒเปเปˆเปเบกเปˆเบ™
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡, เบเบปเบเป€เบงเบฑเป‰เบ™เบšเบฒเบ‡เบ—เบตเปƒเบ™ "เบเปเบฒเบ™เบปเบ”". เบ™เบญเบเบ™เบฑเป‰เบ™เบเบฑเบ‡เบกเบต syntax "$[name ...]"
เบซเบผเบท $[[name ...]], เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบญเปˆเบฒเบ™ makefile, เบเปˆเบญเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš grokking
เปเบฅเบฐเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบญเบทเปˆเบ™เป†.

Makepp เบกเบตเบซเบผเบฒเบเป†เบŸเบฑเบ‡เบŠเบฑเบ™ builtin เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”. เบกเบฑเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบเบทเบญเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡
GNU make's textual functions (เป€เบšเบดเปˆเบ‡ GNU make's documentation for details), เปเบฅเบฐเบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เบกเบฑเบ™
เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ” Perl subroutines เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เป€เบšเบดเปˆเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™ "เบเปˆเบญเบ".
เปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ makepp เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚ เบซเบ™เป‰เบฒเบ—เบตเปˆ
เปเบฅเบฐ condition1[,condition2[,condition3...]]
เปเบฅเบฐเบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฐเบซเบ™เบญเบ‡ "เบงเบปเบ‡เบˆเบญเบ™เบชเบฑเป‰เบ™" เปเบฅเบฐเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™. เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปเบกเปˆเบ™
เบ‚เบฐเบซเบเบฒเบ, เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เบ–เป‰เบฒเบญเบฒเบเบดเบงเป€เบกเบฑเบ™เบ‚เบฐเบซเบเบฒเบเป„เบ›เป€เบ›เบฑเบ™เบชเบฐเบ•เบฃเบดเบ‡เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบˆเบฐเบขเบธเบ” เปเบฅเบฐ
เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเปเบกเปˆเบ™เบชเบฒเบเบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เบ–เป‰เบฒเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบฐเบซเบเบฒเบเป„เบ›เบชเบนเปˆเบเบฒเบ™เบšเปเปˆเป€เบ›เบฑเบ™.
string เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบชเบธเบ”เบ—เป‰เบฒเบ.

if เบชเบฒเบ, result-if-string-not-blank[, result-if-string-blank]
iftrue เบชเบฒเบ, result-if-string-true[, result-if-string-false]
เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบš "ifeq", เปเบฅเบฐเบญเบทเปˆเบ™เป†, เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™. เบ–เป‰เบฒเบชเบฐเบ•เบฃเบดเบ‡เบšเปเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ (ie, the
เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เปเบกเปˆเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡), เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบญเบ‡ (เบ›เบฐเป‚เบซเบเบ "เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™") เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™ (เบซเบผเบฑเบ‡เบˆเบฒเบ
เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›); เบ–เป‰เบฒเบชเบฐเบ•เบฃเบดเบ‡เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบฒเบก (เบ‚เปเป‰ "เบญเบทเปˆเบ™") เปเบกเปˆเบ™
เบเบฑเบšเบ„เบทเบ™เบกเบฒ.

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

CFLAGS := $(เบ–เป‰เบฒ $(เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ gcc egcc, $(CC)), -g -Wall, -g)

เบเบณเบ™เบปเบ” CFLAGS เป€เบ›เบฑเบ™ "-g -Wall" เบ–เป‰เบฒเบ•เบปเบงเปเบ› CC เปเบกเปˆเบ™ "gcc" เบซเบผเบท "egcc", เปเบฅเบฐ "-g"
เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™. (เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบฎเบฑเบ”.)

"iftrue" เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš "เบ–เป‰เบฒ", เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒ string 0 เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ›เบฑเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

or condition1[,condition2[,condition3...]]
เบซเบผเบทเบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ OR "เบงเบปเบ‡เบˆเบญเบ™เบชเบฑเป‰เบ™". เปเบ•เปˆเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เปเบกเปˆเบ™เบ‚เบฐเบซเบเบฒเบ,
เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡. เบ–เป‰เบฒเบญเบฒเบเบดเบงเป€เบกเบฑเบ™เบ‚เบฐเบซเบเบฒเบเป„เบ›เบชเบนเปˆเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบšเปเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบˆเบฐเบขเบธเบ” เปเบฅเบฐ
เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเปเบกเปˆเบ™เบชเบฒเบเบ™เบฑเป‰เบ™. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบ, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡
เบžเบงเบเป€เบ‚เบปเบฒเปเบกเปˆเบ™เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ (เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ), เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเปเบกเปˆเบ™เบชเบฒเบเบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

เป€เบญเบเบฐเบชเบฒเบ™ เปเบฅเบฐ filename เบซเบ™เป‰เบฒเบ—เบตเปˆ
absolute_filename เป„เบŸ
abspath เป„เบŸ
เบ›เปˆเบฝเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป€เบ›เบฑเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เป‚เบ”เบเบšเปเปˆเบกเบต . or ..เบ—เบตเปˆเบขเบนเปˆ เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,
"$(absolute_filename xyz.c)" เบญเบฒเบ”เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™ "/usr/src/our_project/subdir/xyz.c".

absolute_filename_nolink เป„เบŸ
เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ เป„เบŸ
เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš absolute_filename, เปเบ•เปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบชเบฑเบ™เบเบฒเบฅเบฑเบเป„เบ”เป‰เบ–เบทเบเปเบเป‰เป„เบ‚.

เบŠเบทเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™ เบŠเบทเปˆเป„เบŸเบฅเปŒ
เบŠเบทเปˆเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบกเปˆเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ” (เบเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต), เบฅเบปเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบซเบผเบฑเบ‡เบˆเบฒเบเปเบฅเบฐ
เบฅเบงเบกเบ—เบฑเบ‡เป„เบฅเบเบฐเป€เบงเบฅเบฒเบชเบธเบ”เบ—เป‰เบฒเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, "$(basename myfile/version-1.0-module.c)" เปเบกเปˆเบ™
"myfile/version-1.0-module"

dir เบŠเบทเปˆเป„เบŸเบฅเปŒ
เปเบเบเบชเปˆเบงเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเป„เบŸเบฅเปŒเปƒเบ™เบฅเบฒเบเบŠเบทเปˆเป„เบŸเบฅเปŒ, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เบ•เปเปˆเบ—เป‰เบฒเบ
เบ—เบฑเบš. เบ•เบญเบš "./" เบ–เป‰เบฒเบšเปเปˆเบกเบตเป„เบ”เป€เบฃเบฑเบเบ—เปเบฃเบตเปƒเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒ.

dir_noslash เบŠเบทเปˆโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™
เบ„เบทเบเบฑเบ™เบเบฑเบš "$(dir )" เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบชเบปเปˆเบ‡เบ„เปˆเบฒเบซเบเปเป‰เปœเป‰เบฒเบ•เบฒเบกเบซเบผเบฑเบ‡.

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

$(filesubst ./src/%.c, %.o, $(wildcard src/*.c))

เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš filesubst เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบเบฑเบš pasubst.

filter_out_dirs เบŠเบทเปˆเป„เบŸเบฅเปŒ
เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบšเปเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เปƒเบชเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.

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

TCL_INCLUDE := -I$(dir_noslash $(findfile tcl.h, \
/usr/local/stow/tcl-8.4.5-nothread/include \
/usr/include/tcl8.4 /usr/include/tcl \
/net/na1/tcl8.4a3/include /net/na1/tcl8.4a3/include))

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

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

CC = $(find_program gcc egcc pgcc c89 cc) # เปเบฅเบฐเบญเบทเปˆเบ™เป†เบญเบตเบ, เบ‚เบถเป‰เบ™เบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡.
F77 = $(find_program f77 g77 fort77)
CXX = $(find_program g++ c++ pg++ cxx CC aCC)

เบ–เป‰เบฒเบšเปเปˆเบกเบตเป‚เบ›เบฃเปเบเบฃเบกเปƒเบ”เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™, "$(find_program)" เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบšเปเปˆเบžเบปเบš, เปเบฅเบฐ.
เบšเบฑเบ™เบ—เบถเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบšเปเปˆเบžเบปเบš. เบ™เบตเป‰เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบˆเบฐเบšเปเปˆเบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰ makefile เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, เปเบ•เปˆเบกเบฑเบ™
เบกเบตเปเบ™เบงเป‚เบ™เป‰เบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™:
เบ™เบตเป‰:

%.o : %.c
$(CC) $(inputs) -o $(outputs)

เปเบฅเบฐ makepp เบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ C compiler เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เบกเบฑเบ™เบˆเบฐเบ—เบปเบ”เปเบ—เบ™เบ—เบตเปˆเบšเปเปˆเบžเบปเบš.
เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ shell เบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบŸเบฅเปŒเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเปเบฅเบฐเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™
เบ‚เปเป‰เบ„เบงเบฒเบกเบญเบฒเบ”เบˆเบฐเปเบ›เบเปเบ—เป‰เป†.

find_upwards เบŠเบทเปˆโ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™
เบ„เบปเป‰เบ™โ€‹เบซเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ‚เบญเบ‡โ€‹เบŠเบทเปˆโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบš .,.., ../ ..,../../.., เปเบฅเบฐเบญเบทเปˆเบ™เป†,
เบˆเบปเบ™โ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบžเบปเบšโ€‹เป€เบซเบฑเบ™โ€‹เบซเบผเบทโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบฎเบฒเบโ€‹เปเบกเปˆเบ™โ€‹เป„เบ›โ€‹เป€เบ–เบดเบ‡โ€‹เบซเบผเบทโ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ—เบตเปˆโ€‹เบ•เบฑเป‰เบ‡โ€‹เบขเบนเปˆโ€‹
เปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. (เบ‚เปเป‰เบเปเบฒเบ™เบปเบ”เบชเบธเบ”เบ—เป‰เบฒเบเบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเบฑเบ™เบซเบฒเบเบฑเบš
automounters เบซเบผเบท hung network filesystems.) เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบกเบต a RootMakeppfile, เบ™เบฑเป‰เบ™เบเปเปˆเปเบกเปˆเบ™
เบชเบดเปˆเบ‡เบเบตเบ”เบ‚เบงเบฒเบ‡เบ—เบตเปˆเบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบ—เบตเปˆเบชเบนเบ‡เบ‚เบถเป‰เบ™.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบกเบตเบซเบผเบฒเบเบฅเบฐเบ”เบฑเบšเบ‚เบญเบ‡ subdirectories, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เบฅเบงเบกเป€เบญเบปเบฒเบŠเบดเป‰เบ™เบชเปˆเบงเบ™เบ—เบปเปˆเบงเป„เบ›เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡ makefiles (เป€เบŠเบฑเปˆเบ™: เป‚เบ”เบเปƒเบŠเป‰ "เบฅเบงเบก"
เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™):

TOP_LEVEL_INCLUDE_DIR := $(find_upwards เบฅเบงเบกเบกเบต)
# เบ„เบปเป‰เบ™เบซเบฒเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบ
# เบ›เบฐเบเบญเบšเบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบเปˆเบญเบ.

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

เบšเบฑเบ™เบซเบฒเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆ "find_upwards" เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเปเบเป‰เป„เบ‚เป„เบ”เป‰เปเบกเปˆเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบฅเบฒเบเบŠเบทเปˆเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡เบชเบธเบ”
เบ‚เบญเบ‡เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡. เป€เบฅเบทเป‰เบญเบเป†เบกเบฑเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เป€เบ—เบดเบ‡ :=../../..

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

เป€เบ—เบดเบ‡ := $(dir_noslash $(find_upwards LICENSE))

"$(find_upwards LICENSE)" เบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป€เบ•เบฑเบกเบ‚เบญเบ‡เป„เบŸเบฅเปŒเปƒเบšเบญเบฐเบ™เบธเบเบฒเบ”;
"$(dir_noslash ...)" เบ–เบญเบ”เบŠเบทเปˆเป„เบŸเบฅเปŒเบญเบญเบ, เบชเบปเปˆเบ‡เบ„เบทเบ™เบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.

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

เบฅเบงเบกเป€เบญเบปเบฒ $(find_upwards top_level_rules.mk)

เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ, เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰

เบฅเบงเบกเป€เบ–เบดเบ‡ top_level_rules.mk

เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™.)

เบ–เป‰เบฒเบšเปเปˆเบžเบปเบšเป„เบŸเบฅเปŒ, "find_upwards" เบˆเบฐเบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ”เป‰เบงเบเบ‚เปเป‰เบ„เบงเบฒเบกเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบฅเบฐเบšเบธเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เป„เบŸเบฅเปŒ, find_upwards เบˆเบฐเบ„เบปเป‰เบ™เบซเบฒเบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
เบญเบฑเบ™เบ—เบตเบชเบญเบ‡, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†,

$(find_upwards file1 file2)

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

$(find_upwards file1) $(find_upwards file2)

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเปƒเบ”เบ™เบถเปˆเบ‡, เปƒเบซเป‰เปƒเบŠเป‰ "find_first_upwards" เปเบ—เบ™.

find_first_upwards เปเบŸเป‰เบก 1 เปเบŸเป‰เบก 2 ...
เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบทเบเบฑเบš "find_upwards" เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เป„เบŸเบฅเปŒเบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เปƒเบ”เป†
เป„เบŸเบฅเปŒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบกเบฑเบ™เบžเบปเบš. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบกเบฑเบ™เบเบงเบ”เป€เบšเบดเปˆเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™เบชเปเบฒเบฅเบฑเบš
เป„เบŸเบฅเปŒเปƒเบ”เบ™เบถเปˆเบ‡เปƒเบ™เบฅเบฒเบเบŠเบทเปˆ, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เป„เบŸเบฅเปŒเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆ เบซเบผเบทเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เป„เบ”เป‰.
เบ–เป‰เบฒเบšเปเปˆเบกเบตเป„เบŸเบฅเปŒเปƒเบ”เป†เบซเบผเบทเบชเบฒเบกเบฒเบ”เบชเป‰เบฒเบ‡เบขเบนเปˆเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡ .., เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
../ .., เปเบฅเบฐเบญเบทเปˆเบ™เป†, เบˆเบปเบ™เบเปˆเบงเบฒเบกเบฑเบ™เป„เบ›เบฎเบญเบ”เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบเบซเบผเบทเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบ›เบฑเบ™
เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเป„เบŸเบฅเปŒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

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

TCL_LIB = $(first_available \
/usr/local/stow/tcl-8.4.5-nothread/lib/libtcl8.4.so \
/usr/lib/libtcl8.4.so /usr/lib/libtcl.so \
/net/na1/tcl8.4a3/lib/libtcl8.4.a \
/net/na1/tcl8.4a3/lib/libtcl8.4.sl)

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

infer_linker เปเบŸเป‰เบก 1 เปเบŸเป‰เบก 2 ...
เปƒเบซเป‰เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเบ—เปเบฒเบญเบดเบ”เบชเป‰เบฒเบ‡เปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบšเปเปˆเบ—เบฑเบ™เป„เบ”เป‰. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŠเบญเบเบซเบฒ
เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบ‚เบถเป‰เบ™เบเบฑเบš Fortran, C ++ เบซเบผเบทเปเบซเบผเปˆเบ‡ C เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™
compiler (เป€เบŠเบดเปˆเบ‡เบ”เบตเบเบงเปˆเบฒเบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเปˆเบงเบฒ "ld").

infer_objects เปเบŸเป‰เบก 1 เปเบŸเป‰เบก 2 ..., เบฎเบนเบšเปเบšเบš
$(infer_objects object1.o object2.o, *.o)

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

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ‚เบญเบ‡ Makepp เบชเปเบฒเบฅเบฑเบš inferring object dependencies เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบชเบปเบ™เบ—เบดเบชเบฑเบ™เบเบฒเบงเปˆเบฒ
เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ—เบธเบโ€‹เบŠเบฑเป‰เบ™โ€‹เบฎเบฝเบ™โ€‹เบซเบผเบทโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป„เบงเป‰โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบซเบปเบง "xyz.hโ€‹" เปเบกเปˆเบ™โ€‹
เบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ "xyz.o" (เบซเบผเบท "xyz.lo"). เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ algorithm เบ‚เบญเบ‡ makepp เบชเปเบฒเบฅเบฑเบš
inferring object dependencies เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบงเบฑเบ”เบ–เบธเบญเบฑเบ™เปœเบถเปˆเบ‡ เบซเบผเบทเบชเบญเบ‡เบชเบฒเบกเบญเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบฎเบนเป‰เบงเปˆเบฒเบ•เป‰เบญเบ‡เบกเบต
เป€เบŠเบทเปˆเบญเบกโ€‹เบ•เปเปˆโ€‹เบเบฑเบšโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹. เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป„เบŸเบฅเปŒเปƒเบ”เป„เบ”เป‰เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบš "#include" เปƒเบ™
เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบžเบฐเบเบฒเบเบฒเบกเบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ›เบฐเบเบญเบšเบกเบต
เป„เบŸเบฅเปŒ.

"$(infer_objects )" เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบเปˆเบฒเบงเป€เบ–เบดเบ‡เปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™, เป€เบŠเบฑเปˆเบ™
เบ™เบตเป‰:

myprog: $(infer_objects main.o another_object.o, \
**/*.o /other/library/dirs/**/*.o)
$(CXX) $(inputs) -o $(output) $(LIBS)

เบŸเบฑเบ‡เบŠเบฑเบ™ "$(infer_objects)" เปƒเบŠเป‰เบชเบญเบ‡เบญเบฒเบเบดเบงเป€เบกเบฑเบ™ (เบ‚เบฑเป‰เบ™เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบชเบฐเปเบ”เบ‡).
เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบ—เบตเปˆเบฎเบนเป‰เบงเปˆเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™ (เบ•เบปเบงเปเบ—เบ™เปเบกเปˆเบ™
เบญเบฐเบ™เบธเบเบฒเบ”เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰). เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบงเบฑเบ”เบ–เบธเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰ (เบ›เบปเบเบเบฐเบ•เบดเบ—เปˆเบฒเบ™เบˆเบฐเปƒเบŠเป‰ a
wildcard here) เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป„เบ”เป‰เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™. เบกเบนเบ™เบ„เปˆเบฒเบเบฑเบšเบ„เบทเบ™เบˆเบฒเบเบ™เบตเป‰
function เปเบกเปˆเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบงเบฑเบ”เบ–เบธเบ—เปเบฒเบญเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™ argument เบ—เปเบฒเบญเบดเบ”, เปเบฅเบฐ
เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบงเบฑเบ”เบ–เบธเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบšเบฑเบ™เบˆเบธเบขเบนเปˆเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเบชเบญเบ‡
เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเบงเบฑเบ”เบ–เบธเปƒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒ "main.o" เบกเบฒเบˆเบฒเบ "main.cpp", เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบกเบต "my_class.h".
"$(infer_objects)" เบŠเบญเบเบซเบฒเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบŠเบทเปˆ "my_class.o". เบ–เป‰เบฒเปเบ—เป‰เบซเบ™เบถเปˆเบ‡เป€เบŠเบฑเปˆเบ™
เป„เบŸเบฅเปŒเบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™, เบกเบฑเบ™เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ. (เบ–เป‰เบฒเบžเบปเบšเบชเบญเบ‡เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธ "my_class.o" เบ–เบทเบเบžเบปเบšเป€เบซเบฑเบ™
เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ‚เปเป‰เบ„เบงเบฒเบกเป€เบ•เบทเบญเบ™เบˆเบฐเบ–เบทเบเบžเบดเบกเบญเบญเบ.) "infer_objects" เบเบฑเบ‡
เบเบงเบ”เป€เบšเบดเปˆเบ‡ "my_class.cpp" เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบฑเบ™เบ›เบฐเบเบญเบšเบกเบตเบซเบเบฑเบ‡เปเบ”เปˆ, เปเบฅเบฐเป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เบซเบเบฑเบ‡
เบšเบปเปˆเบ‡เบšเบญเบ.

mktemp
mktemp เบ„เบณ เบ™เบณ เปœเป‰เบฒ
mktemp เบ„เบณ เบ™เบณ เปœเป‰เบฒXXX
mktemp /
เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเบŠเบปเปˆเบงเบ„เบฒเบงเบ—เบตเปˆเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™. เบšเปเปˆโ€‹เบกเบตโ€‹เบŠเบทเปˆ
เบเบฒเบ™เบŠเบตเป‰เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเบ”เบฝเบงเบเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เบชเบญเบ‡เบ„เบฑเป‰เบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™,
เบžเบฒเบโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™ makepp (เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบšเบฒเบ‡โ€‹เบขเปˆเบฒเบ‡โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบเบฑเบš recursive เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบžเบทเป‰เบ™โ€‹เป€เบกเบทเบญเบ‡โ€‹, เบซเบผเบทโ€‹เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒ Perlโ€‹
เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบ—เบตเปˆโ€‹เปเบฅเปˆเบ™โ€‹เบขเบนเปˆโ€‹เบžเบฒเบโ€‹เปƒเบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เป€เบญเบตเป‰เบ™โ€‹เบงเปˆเบฒ "f_mktempโ€‹"โ€‹)โ€‹. เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡ makepp เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”
เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เบชเบปเปˆเบ‡โ€‹เบ„เบทเบ™โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบฅเบปเบšโ€‹, เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบกเบต (เบญเบตเบโ€‹เป€เบ—เบทเปˆเบญโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบเบปเบโ€‹เป€เบงเบฑเป‰เบ™โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบซเบผเบปเปˆเบฒโ€‹เบ™เบตเป‰โ€‹
เบชเบปเปˆเบ‡เบ„เบทเบ™เป‚เบ”เบเบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เปƒเบ™เบฅเบฐเบซเบฑเบ” Perl เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš).

เบ•เบปเบงเป€เบฅเบเบ‚เบญเบ‡เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ "X" เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบˆเบฐเบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบ™เบฑเป‰เบ™
เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เปเบฅเบฐเบ•เบปเบงเป€เบฅเบเปเบšเบšเบชเบธเปˆเบก. เบซเบผเบฒเบเบกเบต, เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบ™เป‰เบญเบเบ—เบตเปˆเบˆเบฐ collide
เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบทเปˆเบ™เป†, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบซเป‰เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเป€เบŠเบฑเปˆเบ™ "/tmp/abc.", เบ—เปˆเบฒเบ™เบ„เบงเบ™เบกเบตเบžเบฝเบ‡เบžเป
"X"s. เบ–เป‰เบฒเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡ X, เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เปเบฒเบญเบดเบ”เบกเบฒเบˆเบฒเบ id เบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ–เป‰เบฒ
เบšเปเปˆเบกเบต, เบกเบฑเบ™เบ„เบทเบเบฑเบšเบงเปˆเบฒเบกเบตเบชเบดเบš, เป€เบŠเบดเปˆเบ‡เบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบžเบฝเบ‡เบžเป (8.4e17.
เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบผเบท 3.7e15 เปƒเบ™ Windows). เบ–เป‰เบฒเบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡, เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™
"tmp." เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹.

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบŠเบทเปˆเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบเบปเบ”เบฅเบฐเบšเบฝเบšเปเบฅเบฐเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš. เป„เบ”เป‰
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฐเบ–เบทเบเบ•เป‰เบญเบ‡, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบชเป‰เบฒเบ‡เบ„เบทเบ™เปƒเบซเบกเปˆเบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ makepp.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบฑเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเบฐเป€เบซเบกเบต, เบ—เปˆเบฒเบ™เบ„เบงเบ™เปƒเบŠเป‰เบ™เบตเป‰เปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰
":build_check ignore_action":

TMPFILE ;= $(mktemp) # 1 เป‚เบ—; "=" เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ 3 เป‚เบ—: 3 เป„เบŸเบฅเปŒ
A-count B-count: :build_check ignore_action
produce-As-and-Bs >$(TMPFILE)
&grep -c /A/ $(TMPFILE) -o A-count
&grep -c /B/ $(TMPFILE) -o B-count

เบซเบผเบทเบ—เปˆเบฒเบ™เบ„เบงเบ™เบชเบปเปˆเบ‡เบญเบญเบเบกเบฑเบ™เปเบฅเบฐเปƒเบซเป‰ Shell เบ›เบฐเป€เบกเบตเบ™เบกเบฑเบ™:

เบชเบปเปˆเบ‡เบญเบญเบ TMPFILE ;= $(mktemp)
A-count B-เบ™เบฑเบš:
produce-As-and-Bs >$$TMPFILE # makepp เบšเปเปˆเป€เบซเบฑเบ™เบ„เปˆเบฒ var
fgrep -c A $$TMPFILE >A-count
fgrep -c B $$TMPFILE >B-count

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

%.x: %.y
&grep foo $(input) -o $(mktemp)
&sed bar $(mktemp /) -o $(output) # เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเบญเบเบ‚เบญเบ‡ &grep

notdir เบŠเบทเปˆเป„เบŸเบฅเปŒ
เบชเบปเปˆเบ‡เบ„เบทเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบšเปเปˆเปเบกเปˆเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เบญเบ‡เบŠเบทเปˆเป„เบŸเบฅเปŒ, เป€เบŠเบฑเปˆเบ™, เบ—เบธเบเบขเปˆเบฒเบ‡เบซเบผเบฑเบ‡เบˆเบฒเบเบญเบฑเบ™เบชเบธเบ”เบ—เป‰เบฒเบ
slash เบ–เป‰เบฒเบกเบตเบซเบ™เบถเปˆเบ‡, เบซเบผเบทเบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™.

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

เบซเบ™เป‰เบฒเบ—เบตเปˆเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ” (เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปเบ™เปˆเบ™เบญเบ™ "makeppclean" เปเบกเปˆเบ™
เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบฑเบ):

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -f $( only_generated **/*)

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

.PHONY: เบเบฒเบ™เปเบˆเบเบขเบฒเบ

เบเบฒเบ™เปเบˆเบเบขเบฒเบ:
&mkdir our_product-$(VERSION)
&cp $(filter-out %~, $(only_nontargets *)) our_product-$(VERSION)
tar cf - our_product-$(VERSION) | gzip -9c > our_product-$(VERSION).tar.gz

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, "$(only_nontargets *)" เบชเบปเปˆเบ‡เบ„เบทเบ™เบ—เบธเบเป„เบŸเบฅเปŒเปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™
เบ™เบฑเป‰เบ™เบšเปเปˆเปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡. "$(filter_out %~, ...)" เป€เบญเบปเบฒเบ•เบปเบงเปเบเป‰เป„เบ‚เบญเบญเบ
เบชเบณ เบฎเบญเบ‡.

เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš "only_targets" (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡), "only_nontargets" เบžเบฝเบ‡เปเบ•เปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆ
เป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปเบฅเป‰เบง. เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›
เบ”เป‰เบงเบเบเบฒเบ™เบกเบญเบšเปเบฒเบ ":="; เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบฅเบฒเบเบŠเบทเปˆเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช เบซเบผเบทเบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ‚เบญเบ‡ a
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹, เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบญเบทเปˆเบ™เป†โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบซเบฑเบ™โ€‹เปเบฅเป‰เบงโ€‹.

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

เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบšเปเปˆเบกเบตเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเป„เบŸเบฅเปŒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง,
เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบกเบตเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบชเบฐเบญเบฒเบ”เบ‚เบญเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”:

$(phony flush):
&rm -f $(only_stale **/*)

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

only_targets เบŠเบทเปˆเป„เบŸเบฅเปŒ
เบชเบปเปˆเบ‡เบ„เบทเบ™เบžเบฝเบ‡เปเบ•เปˆเบŠเบทเปˆเป„เบŸเบฅเปŒเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบเบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบšเบฒเบ‡เบขเปˆเบฒเบ‡
(เบ—เบฑเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡ เบซเบผเบทเบฎเบนเบšเปเบšเบš). เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบฅเบฐเบšเบธเบ•เบปเบงเปเบ—เบ™ (เบฅเบงเบกเบ—เบฑเบ‡ makepp's
เบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”, "**") เปƒเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒ. (เป€เบšเบดเปˆเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ "$(wildcard )" เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก
เบฅเบฒเบเบฅเบฐเบญเบฝเบ”. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เบ•เบปเบงเบขเปˆเบฒเบ‡:

.PHONY: เบชเบฐเบญเบฒเบ”

เบชเบฐเบญเบฒเบ”:
&rm -f $(only_targets *)

เบ•เบญเบ™เบ™เบตเป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบžเบดเบก "makepp clean", เบกเบฑเบ™เบˆเบฐเบฅเบถเบšเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡. เปเบ•เปˆ
เบขเปˆเบฒเบชเป‰เบฒเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เปƒเบŠเป‰ "makeppclean" เปเบ—เบ™!

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

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

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

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

เปเบฅเป‰เบงเบšเบฑเบ™เบซเบฒเบ™เบตเป‰เบˆเบฐเบšเปเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™.

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

ALL_TARGETS := $(only_targets *)

เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบต 1: เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช1
เบซเบธเป‰เบ™

เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบต 2: เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช2
เบซเบธเป‰เบ™

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, "only_targets" เบˆเบฐเบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›.

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™, "only_targets" เบšเปเปˆเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบœเบฐเบฅเบดเบ”เบขเบนเปˆเปƒเบ™ makefiles เบ—เบตเปˆเป€เบ›เบฑเบ™
loaded เบเบฑเบš recursive make. (เปเบ•เปˆเบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เปƒเบŠเป‰ recursive make เป€เบฅเบตเบ; เปƒเบŠเป‰
เปƒเบŠเป‰เบ„เบณเบ–เบฐเปเบซเบผเบ‡ "load_makefile", เบซเบผเบทเบเบฒเบ™เป‚เบซเบผเบ” makefile implicit เปเบ—เบ™.)

relative_filename เปเบŸเป‰เบก 1 เปเบŸเป‰เบก 2 file3[, เบ—เบฑเบš]
เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฑเบ”เบˆเบธเบšเบฑเบ™ (เบญเบฑเบ™เบ—เบตเปˆ
makefile เบขเบนเปˆเปƒเบ™). เบ™เบตเป‰เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบ„เบงเบฒเบกเบชเบฐเบญเบฒเบ”เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™ "./" เปเบฅเบฐเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบญเบทเปˆเบ™เป†เบˆเบฒเบ
เป€เบชเบฑเป‰เบ™โ€‹เบ—เบฒเบ‡โ€‹:

DIR := .
SUBDIR :=..
FNAME := $(DIR)/../otherdir/$(SUBDIR)/files
X := $(relative_filename $(FNAME))

If slash เป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡ (เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบง 1) เบŠเบทเปˆเป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เปเบกเปˆเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒเบกเบต slash
เป‚เบ”เบ prepending "./" เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบกเบฑเบ™เป€เบ›เบฑเบ™เบŠเบทเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™
เบเบฑเบ‡เบงเบปเบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ„เบปเป‰เบ™เบซเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡ overriding เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.

เบ–เป‰เบฒเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เป‚เบ”เบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบฎเบฒเบ, เบžเปเปˆเปเบกเปˆเบ‚เบญเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเป€เบฎเบทเบญเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบซเบผเบท
"$(ROOT)" เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบซเบผเบทเบขเบนเปˆเปƒเบ™ Windows เบฎเบฒเบเบ‚เบญเบ‡เป„เบ” (เบ‚เบถเป‰เบ™เบเบฑเบš
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เบ™เบตเป‰เบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบš /cygdrive/c or /c), เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบˆเบฐเป€เบ›เบฑเบ™
เบเบฑเบšเบ„เบทเบ™เบกเบฒเปเบ—เบ™.

relative_to เปเบŸเป‰เบก 1 เปเบŸเป‰เบก 2 file3[, เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™]
เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเป„เบ”เป€เบฃเบฑเบเบ—เปเบฃเบตเบ—เบตเปˆเบฅเบฐเบšเบธ. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™
เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบˆเบฒเบ a
เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ (เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ›เบฐเบˆเบธเบšเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™):

source_backup.tar:
cd .. && tar cf $(relative_to $(output), ..) $(relative_to .,..)

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

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

$(suffix src/foo.c src-1.0/bar.c hacks)

เปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš ".c .c".

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

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

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

string เบซเบ™เป‰เบฒเบ—เบตเปˆ
เบ•เบทเปˆเบกเบ„เบณเบ™เบณเปœเป‰เบฒ เบ„เบณเบ™เบณเปœเป‰เบฒ, เบ„เปเบฒเป€เบงเบปเป‰เบฒ
Prepends เบ„เปเบฒเบ™เปเบฒเบซเบ™เป‰เบฒ string เบเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เปเบฒ. เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบš GNU เป€เบฎเบฑเบ”
เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบšเบš rc, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบ
เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เป‚เบกเบ”เบนเบ™ := abcd
X_OLD_STYLE := $(addprefix $(OBJDIR)/, $(addsuffix .o, $(MODULES))))
X_NEW_STYLE := $(OBJDIR)/$(MODULES).o # เบกเบฑเบ™เบšเปเปˆเบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบญเปˆเบฒเบ™เบšเป?

เบชเปˆเบงเบ™เบ•เบทเปˆเบก เบ•เปเปˆเบ—เป‰เบฒเบ, เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบชเปˆเบ—เป‰เบฒเบเบชเบฐเบ•เบฃเบดเบ‡เปƒเบชเปˆเปเบ•เปˆเบฅเบฐเบ„เบณเบชเบฑเบš. เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบš GNU เป€เบฎเบฑเบ”
เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบšเบš rc, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบ
เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

X_OLD_STYLE := $(addsuffix .o, $(MODULES))
X_NEW_STYLE := $(MODULES).o

เป‚เบ— เบ•เบปเบงเปเบ›[, เบ„เปเบฒ]...
เบŸเบฑเบ‡เบŠเบฑเบ™ "เป‚เบ—" เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบญเบเบฐเบฅเบฑเบเบ—เบตเปˆเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ เบ•เบปเบงเปเบ› เป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡
เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบกเบญเบšเบซเบกเบฒเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เปƒเบซเป‰ เบ•เบปเบงเปเบ› เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰
"เป‚เบ—เบซเบฒ" เป€เบžเบทเปˆเบญเบ‚เบฐเบซเบเบฒเบเป€เบ™เบทเป‰เบญเบซเบฒเบ‚เบญเบ‡เบกเบฑเบ™เปƒเบซเป‰เบเบฑเบšเบ„เปˆเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป‚เบ”เบ parameterized เป‚เบ”เบ เบ„เปเบฒเป€เบงเบปเป‰เบฒ เบ•เปเปˆเบกเบฒ. เปƒเบ™
เบฅเบฐเบšเบปเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบญเบทเปˆเบ™เป†, เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ•เบปเป‰เบ™เบ•เปเป€เบžเบทเปˆเบญเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเป‚เบ”เบเบœเปˆเบฒเบ™
"เป‚เบ—", เป€เบญเบตเป‰เบ™เบงเปˆเบฒ a เบกเบฐเบซเบฒเบžเบฒเบ.

เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบกเบฐเบซเบฒเบžเบฒเบ, เบ•เบปเบงเปเบ›เบŠเบปเปˆเบงเบ„เบฒเบง $1, $2, "... " เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡
เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเปƒเบซเป‰ "เป‚เบ—เบซเบฒ" เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบฎเบฝเบเบฎเป‰เบญเบ‡เบ‚เบญเบ‡เบกเบฑเบ™. เบ•เบปเบงเปเบ› $0 เบˆเบฐเบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบเป„เบ›
เบŠเบทเปˆเบ‚เบญเบ‡เบกเบฐเบซเบฒเบžเบฒเบ (ie เบ•เบปเบงเปเบ›) เบ—เบตเปˆ "เป‚เบ—" เบเปเบฒเบฅเบฑเบ‡เบ‚เบฐเบซเบเบฒเบเบญเบญเบเป„เบ›.

เบšเปเปˆโ€‹เบกเบตโ€‹เบ‚เบญเบšโ€‹เป€เบ‚เบ”โ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹, เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบกเบฐโ€‹เบซเบฒโ€‹เบžเบฒเบโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบโ€‹เบญเบฒเบ”โ€‹เบˆเบฐ "เป‚เบ—โ€‹" เบเบฑเบšโ€‹เบซเบผเบทโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบโ€‹
เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™ macro เบญเบฒเบ”เบˆเบฐเบ„เบฒเบ”เบซเบงเบฑเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบžเบทเปˆเบญ "เป‚เบ—เบซเบฒ" เป€เบ›เบฑเบ™เบกเบฐเบซเบฒเบžเบฒเบ
เบ•เป‰เบญเบ‡เบเบฒเบ™, เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเป€เบเบตเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเบเบปเบเป€เบฅเบตเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบœเปˆเบฒเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบซเบ™เป‰เบญเบเบเบงเปˆเบฒ a
macro เบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒ, เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเป€เบเบตเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ•เบปเบเบฅเบปเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

เบซเบ™เป‰เบฒเบ—เปเบฒเบญเบดเบ”เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ:

เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ = $(เบฅเบฒเบเบเบฒเบ™เบ„เบณเบชเบฑเบš 2, $(เบ„เบณเบชเบฑเบš $(1)), $(1))
list = ABCDE
butfirst := $(เบžเบฑเบเบœเปˆเบญเบ™เบเบฒเบ™เป‚เบ—, $(เบฅเบฒเบเบŠเบทเปˆ))

เบ—เบตเปˆเบ™เบตเป‰, เบ•เบปเบงเปเบ› "$(butfirst)" เบˆเบฐเบกเบตเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ "BCDE".

เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰:

เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ = $(wordlist 2,$(words $(1)),${1})
mymap = $(เบ–เป‰เบฒ $2,$(เป‚เบ—เบซเบฒ $1,$(เบ„เบณเบ—เบณเบญเบดเบ” $2)) $(เป‚เบ—เบซเบฒ $0,$1,$(เป‚เบ—เบญเบญเบ,$2)))
downcase = ${makeperl lc("$1")}

UCWORDS = เบ„เปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™ UPCASE
DCWORDS := $(เป‚เบ—เบซเบฒ mymap, downcase,$(UCWORDS))

เบ”เบฝเบงเบ™เบตเป‰ "$(DCWORDS)" เบ›เบฐเบเบญเบšเบกเบต "เบ„เบณเบชเบฑเบšเบ—เบฑเบ‡เปเบปเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™เบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ". เป‚เบ”เบเบงเบดเบ—เบตเบ—เบฒเบ‡เบเบฒเบ™: เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบšเปเปˆเบกเบต
เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡, เบšเปเปˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบœเปˆเบฒเบ™ $1, "${1}" or "$(1)" เบžเบฒเบเปƒเบ™เบกเบฐเบซเบฒเบžเบฒเบ.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เบ„เบทเบเบฑเบšเบงเปˆเบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบ–เป‰เบฒเบšเปเปˆเบกเบต
เบซเบ™เป‰เบฒเบ—เบตเปˆเบ‚เบญเบ‡เบŠเบทเปˆเบ™เบฑเป‰เบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบžเบฒเบเปƒเบ™เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ "เป‚เบ—", เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™
เบ—เบฝเบšเป€เบ—เบปเปˆเบฒ:

เบเบฒเบ™เบชเบปเบ™เบ—เบฐเบ™เบฒ = $0 เบเบฒเบเป€เบ›เบฑเบ™ $1 $2.
เป‚เบ”เบเบเบปเบ‡ = $(เบชเบปเบ™เบ—เบฐเบ™เบฒ,เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡)
เป€เบญเบตเป‰เบ™เบงเปˆเบฒ = $(เป‚เบ—เบชเบปเบ™เบ—เบฐเบ™เบฒ,เบญเบฑเบ™,เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡)

เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบงเบฒเบ—เบตเบงเปˆเบฒ "$[call]" เบ„เบงเบ™เบ‚เบฐเบซเบเบฒเบเบกเบฐเบซเบฒเบžเบฒเบ "$[]" เบซเบผเบทเบšเปเปˆ.
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ, เบซเบผเบทเบŸเบฑเบ‡เบŠเบฑเบ™เปƒเบ”เปœเบถเปˆเบ‡เบ„เบงเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ”เบฝเบงเบเบฑเบ™เบชเบฐเป€เปเบต, เบšเปเปˆเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”
เป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบชเบธเบ”เบ—เป‰เบฒเบเป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบ, เป€เบžเบฒเบฐเบงเปˆเบฒเบ”เป‰เบงเบ syntax เบ›เบปเบเบเบฐเบ•เบดเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™
เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบš "$[1], $[2]..." เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เบ›เปˆเบฝเบ™ (เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เปเบ—เบ™โ€‹เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบซเบเบฑเบ‡,
เบเปˆเบญเบ™เบ—เบตเปˆเบงเบฝเบเบ‡เบฒเบ™เบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™.) เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบกเบฐเบซเบฒเบžเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ” a
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹, เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบญเบญเบโ€‹เป€เบŠเบฑเปˆเบ™ "$(output)โ€‹" เป€เบžเบทเปˆเบญโ€‹เปƒเบซเป‰โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบซเบฑเบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบงเบดโ€‹เป€เบ„เบฒเบฐโ€‹, เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹.
เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ›เบปเบเบ›เป‰เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฒเบ "เป‚เบ—เบซเบฒ":

เบเปเบฒเบ™เบปเบ” myrule
$2: $1
mycommand $$(input) -o $$(output)
เบชเบดเป‰เบ™เบชเบธเบ”
$[myrule myinput,myoutput]

เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡ เบฎเบนเบšเปเบšเบš, เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบณเบชเบฑเบšเบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบเบปเบ‡เบเบฑเบšเบฎเบนเบšเปเบšเบšเบ•เปˆเบฒเบ‡เป†. เบฎเบนเบšเปเบšเบšเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เปเบšเบšเบญเบทเปˆเบ™เป†
เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†, เบซเบผเบทเบ™เบฒเบกเบšเบฑเบ”เบ•เบปเบงเปเบ—เบ™ (เป€เบŠเบฑเปˆเบ™, "*", "?", เปเบฅเบฐ "[az]" เบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰), เบซเบผเบทเบžเบงเบเป€เบ‚เบปเบฒเบญเบฒเบ”เบˆเบฐ
เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "%", เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบˆเบฐเบเบปเบ‡เบเบฑเบšเบชเบฐเบ•เบฃเบดเบ‡เปƒเบ”เบ™เบถเปˆเบ‡เปƒเบ™เบˆเบธเบ”เบ™เบฑเป‰เบ™ (เบ„เบทเบเบฑเบ™เบเบฑเบš "*").

filter_out เบฎเบนเบšเปเบšเบš, เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เบชเบปเปˆเบ‡เบ„เบทเบ™เบ„เบณเบชเบฑเบšเบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เบฅเบฒเบเบเบฒเบ™เบ—เบตเปˆเบšเปเปˆเบเบปเบ‡เบเบฑเบšเบฎเบนเบšเปเบšเบš. เบฎเบนเบšเปเบšเบšเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบžเบฝเบ‡เปเบ•เปˆ
เบ„เปเบฒเบชเบฑเบšเบญเบทเปˆเบ™, เบซเบผเบท filename wildcards (เป€เบŠเบฑเปˆเบ™, "*", "?", เปเบฅเบฐ "[az]" เบ–เบทเบเบฎเบฑเบšเบฎเบนเป‰), เบซเบผเบท
เบžเบงเบเบกเบฑเบ™เบญเบฒเบ”เบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "%", เป€เบŠเบดเปˆเบ‡เปเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบชเบฐเบ•เบฃเบดเบ‡เปƒเบ”เปœเบถเปˆเบ‡เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบ™เบฑเป‰เบ™ (เบ„เบทเบเบฑเบ™เบเบฑเบš
"*").

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

libproduction.a: $(filter_out test_*, $(wildcard *.o))

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

เบŠเบญเบเบซเบฒเบชเบฒเบ เบŠเบญเบเบซเบฒ, in
Return เบŠเบญเบเบซเบฒ, เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™ substring เบ‚เบญเบ‡ in.

เบ„เปเบฒเบ—เปเบฒเบญเบดเบ” เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เบเบฑเบšเบ„เบทเบ™เบ„เปเบฒเบ—เปเบฒเบญเบดเบ”.

เปเบœเบ™เบ—เบตเปˆ เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡, perlcode
เปเบœเบ™เบ—เบตเปˆ เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡, perlcode
เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเปเบœเบ™เบ—เบตเปˆ Perl, เบ™เบณเปƒเบŠเป‰ perlcode เป„เบ›เบซเบฒเปเบ•เปˆเบฅเบฐเบ„เปเบฒเปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš. เบ•เบปเบงเปเบ›เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ” Perl เบ—เปเบฒเบกเบฐเบ”เบฒ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเบงเปเบ›เบ—เบตเบชเบญเบ‡เบœเปˆเบฒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”
perlcode เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›เปเบšเบš Make-style. เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบขเบนเปˆเปƒเบ™เบ—เบฑเบ‡เบชเบญเบ‡
เบเปเบฅเบฐเบ™เบต.

เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ $_ เปเบฅเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ„เบทเบ™เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™ undef $_. เบ™เบตเป‰เปเบกเปˆเบ™เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบชเปเบฒเบฅเบฑเบš
เบเบฒเบ™เปเบเป‰เป„เบ‚เบšเปเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เป„เบ”เป‰เบ‡เปˆเบฒเบเป‚เบ”เบ "patsubst". เบžเบฝเบ‡เปเบ•เปˆเป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”เบ—เบณเบญเบดเบ”เปเบกเปˆเบ™เบ•เบปเบงเปเบเบ,
เบญเบทเปˆเบ™เปƒเบ”เบ–เบทเบเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ perlcode.

# เบ›เปˆเบฝเบ™เบ„เบณเบชเบฑเบš. Double paren, เป€เบžเบทเปˆเบญเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ paren เปƒเบ™ perlcode, เบซเบผเบทเปƒเบŠเป‰ ${}:
X = $((เปเบœเบ™เบ—เบตเปˆ $(VALUES), s/.+)-.+)/$2-$1/))
# เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰ make expressions, เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰ $$ เบชเปเบฒเบฅเบฑเบš Perl $:
Y = $(makemap $(VALUES), tr/$(OLDCHARS)/$(NEWCHARS)/ เบซเบผเบท $$_ = 'เบฅเบปเป‰เบกเป€เบซเบฅเบง')
# เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบปเบšเบฅเป‰เบฒเบ‡เบœเบนเป‰เบชเบฐเบซเบกเบฑเบ:
Y = $(เปเบœเบ™เบ—เบตเปˆ $(VALUES), undef $_ เบ–เป‰เบฒ /no_good/)

เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป† 1โ€‹, เบ„เปเบฒ2
เป€เบฎเบฑเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบ„เบนเปˆเบ‚เบญเบ‡เบ„เปเบฒเบ—เปเบฒเบญเบดเบ”เปเบฅเบฐเบ„เปเบฒเบ—เบตเบชเบญเบ‡.

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

OBJS = $(patsubst %.c, object_dir/%.o, $(C_SOURCES))

เป€เบญเบปเบฒเบ—เบธเบเป„เบŸเบฅเปŒเปƒเบ™ C_SOURCES เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบงเบฑเบ”เบ–เบธเปƒเบ™ object_dir.
เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™เบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เป€เบ›เบฑเบ™

OBJS = $(C_SOURCES:%.c=object_dir/%.o)

เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡ เบ„เปเบฒ1 เบ„เปเบฒ2 เบ„เปเบฒ3 ...
เบ„เบฑเบ”โ€‹เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เปƒเบ™โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบš lexical เปเบฅเบฐโ€‹เบฅเบปเบšโ€‹เบเบฒเบ™โ€‹เบŠโ€‹เป‰โ€‹เปเบฒโ€‹เบเบฑเบ™โ€‹.

เบญเบญเบ string
เป€เบญเบปเบฒเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ—เบฒเบ‡เปœเป‰เบฒ เปเบฅเบฐเบ•เปเปˆเบ—เป‰เบฒเบเบญเบญเบเบˆเบฒเบเบชเบฐเบ•เบฃเบดเบ‡ เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบžเบฒเบเปƒเบ™
เบฅเบณเบ”เบฑเบšเบ‚เบญเบ‡เปœเบถเปˆเบ‡ เบซเบผเบทเบซเบผเบฒเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบ—เบตเปˆเบกเบตเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบ”เบฝเบง. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, "$(strip ab
c )" เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™ "abc".

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

$(subst ee,EE,เบ•เบตเบ™เบขเบนเปˆเบ–เบฐเปœเบปเบ™)

เปเบ—เบ™ string "fEEt on the strEEt".

เบ„เปเบฒ n, เบ‚เปเป‰เบ„เบงเบฒเบก
เบเบฑเบšเบ„เบทเบ™ nth เบ„เปเบฒโ€‹เบ‚เบญเบ‡โ€‹ เบ‚เปเป‰เบ„เบงเบฒเบก. เบ„เบธเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡ n เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบˆเบฒเบ 1 เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™
เบซเบผเบทเบ–เบญเบเบซเบผเบฑเบ‡เบˆเบฒเบ -1 เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบ. เบ–เป‰เบฒ n เปเบกเปˆเบ™เปƒเบซเบเปˆเบเบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™ เบ‚เปเป‰เบ„เบงเบฒเบก, เบเบฒเบ™
เบ„เปˆเบฒเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ.

เบฅเบฒเบเบเบฒเบ™เบ„เบณเบชเบฑเบš เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบต, เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เบฅเบฒเบเบเบฒเบ™เบ„เบณเบชเบฑเบš เบ”เบฑเบ”โ€‹เบŠเบฐโ€‹เบ™เบตโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹, เบ”เบฑเบ”เบŠเบฐเบ™เบตเบชเบธเบ”เบ—เป‰เบฒเบ, เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ”เบฑเบ”เบŠเบฐเบ™เบต (เบ™เบฑเบšเบˆเบฒเบ 1 เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบซเบผเบท
เบ–เบญเบเบซเบผเบฑเบ‡เบˆเบฒเบ -1 เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบ) เป€เบžเบทเปˆเบญเป€เบฅเบทเบญเบเบ„เปเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™. เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเบชเบญเบ‡เบ—เปˆเบฒเบ™
เบฅเบฐเบšเบธเบ‚เบญเบšเป€เบ‚เบ”เบ‚เบญเบ‡เบ„เปเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบปเปˆเบ‡เบ„เบทเบ™.

เบ„เปเบฒเป€เบงเบปเป‰เบฒ เบ‚เปเป‰เบ„เบงเบฒเบก
เบ•เบญเบšเบˆเบณเบ™เบงเบ™เบ„เบณเบชเบฑเบšเปƒเบ™ เบ‚เปเป‰เบ„เบงเบฒเบก.

Miscellaneous เบซเบ™เป‰เบฒเบ—เบตเปˆ
foreach var,เบฅเบฒเบเบŠเบทเปˆ,เบ‚เปเป‰เบ„เบงเบฒเบก
เบชเบญเบ‡โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹, var เปเบฅเบฐ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบญเบตเบ; เบซเบกเบฒเบโ€‹เป€เบซเบ”โ€‹
เบงเปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบชเบธเบ”เบ—เป‰เบฒเบ, เบ‚เปเป‰เบ„เบงเบฒเบก, เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบ‚เบฐเบซเบเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เปเบฒเบชเบฑเบšเบ‚เบญเบ‡
เบกเบนเบ™เบ„เปˆเบฒเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบŠเบทเปˆเป‚เบ”เบเบ„เปˆเบฒเบ‚เบฐเบซเบเบฒเบเบ‚เบญเบ‡ var เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป€เบ›เบฑเบ™
เบ„เปเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบกเบ–เบทเบเบ‚เบฐเบซเบเบฒเบเบญเบญเบ. เบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบกเบตเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ•เบปเบงเปเบ›เบ™เบฑเป‰เบ™,
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เปƒเบ™เปเบ•เปˆเบฅเบฐเบ„เบฑเป‰เบ‡.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบ™เบตเป‰เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ› เป„เบŸ เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™
เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹ เบ—เบตเปˆเบขเบนเปˆ:

dirs := abcd
เป„เบŸเบฅเปŒ := $(foreach dir,$(dirs),$(wildcard $(dir)/*))

เบ‚เปเป‰เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™ "$(wildcard $(dir)/*)". เบเบฒเบ™เบ„เป‰เบฒเบ‡เบซเป‰เบญเบ‡เบ—เปเบฒเบญเบดเบ”เบŠเบญเบเบซเบฒเบ„เปˆเบฒ "a" เบชเปเบฒเบฅเบฑเบš dir,
เบชเบฐเบ™เบฑเป‰เบ™เบกเบฑเบ™เบœเบฐเบฅเบดเบ”เบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš "$(wildcard a/*)"; เบเบฒเบ™เบ„เป‰เบฒเบ‡เบซเป‰เบญเบ‡เบ—เบตเบชเบญเบ‡เบœเบฐเบฅเบดเบ”
เบœเบปเบ™เบ‚เบญเบ‡ "$(wildcard b/*)"; เปเบฅเบฐเบญเบฑเบ™เบ—เบตเบชเบฒเบก, เบ‚เบญเบ‡ "$(wildcard c/*)".

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เบกเบตเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ”เบฝเบงเบเบฑเบ™ (เบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ "dirs") เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เป„เบŸเบฅเปŒ := $(wildcard a/* b/* c/* d/*)

เป€เบกเบทเปˆเบญเบ‚เปเป‰เบ„เบงเบฒเบกเบกเบตเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบฑเบšเบ›เบธเบ‡เบเบฒเบ™เบญเปˆเบฒเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เปƒเบซเป‰เบŠเบทเปˆ, เบเบฑเบš
เบ•เบปเบงเปเบ›เป€เบžเบตเปˆเบกเป€เบ•เบตเบก:

find_files = $(wildcard $(dir)/*)
dirs := abcd
เป„เบŸเบฅเปŒ := $(foreach dir,$(dirs),$(find_files))

เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ find_files เบ•เบปเบงเปเบ›เบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰ "=" เบ—เปเบฒเบกเบฐเบ”เบฒเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ” a
เบ•เบปเบงเปเบ› recursively-expanding, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เบปเบงเบˆเบดเบ‡
เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ„เบทเบ™เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ‚เบญเบ‡ foreach; เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเปเบšเบšเบ‡เปˆเบฒเบเป†เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”,
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ wildcard เบˆเบฐเบ–เบทเบเป€เบญเบตเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเบ„เบฑเป‰เบ‡เบ”เบฝเบงเปƒเบ™เป€เบงเบฅเบฒเบเปเบฒเบ™เบปเบ” find_files.

เปเบฒเบเป€เบซเบ”: เบขเปˆเบฒเบชเบฑเบšเบชเบปเบ™เบเบฑเบšเบ•เบปเบงเปเบ›เบžเบดเป€เบชเบ” "$(foreach)".

เบ‚เปเป‰เบกเบนเบ™ เบ‚เปเป‰เบ„เบงเบฒเบก
เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบž เบ‚เปเป‰เบ„เบงเบฒเบก
เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” เบ‚เปเป‰เบ„เบงเบฒเบก
เบžเบดเบกเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบชเบปเปˆเบ‡เบ„เบทเบ™เบšเปเปˆเบกเบตเบซเบเบฑเบ‡. เบญเบฑเบ™เบ—เปเบฒเบญเบดเบ”เป„เบ› STDOUT, เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เป„เบ›เบซเบฒ STDERR,
เบญเบฑเบ™เบ—เบตเบชเบฒเบกเบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡.

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

file_list :
# เบ„เบณเบชเบฑเปˆเบ‡ shell เป€เบžเบทเปˆเบญเบ„เบณเบ™เบงเบ™เบฅเบฒเบเบเบฒเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเบˆเบฐเปƒเบชเปˆเป€เบ‚เบปเป‰เบฒเปƒเบ™เป‚เบ›เบฃเปเบเบฃเบก

my_program : $(&cat $(prebuild file_list))

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฅเบฒเบเบŠเบทเปˆเปƒเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš, เบกเบฑเบ™เบˆเบฐเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰
เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›เบซเบผเบฒเบเบ„เบฑเป‰เบ‡:

file_list ;= $(&cat $(prebuild file_list))

my_program1 : ao $(file_list)

my_program2 : bo $(file_list)

เบ–เป‰เบฒเปเบ—เบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบฅเบฐเบšเบธเบžเบฝเบ‡เปเบ•เปˆ "$(&cat file_list)", เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ makepp เบˆเบฐเบšเปเปˆเบšเบฑเบ‡เบ„เบฑเบš
file_list เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ—เบฑเบ™เบชเบฐเป„เบซเบกเบเปˆเบญเบ™เบ—เบตเปˆเบกเบฑเบ™เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡ shell. เบเบฒเบ™เปƒเบŠเป‰ "$(prebuild)"
เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบฅเปเป‰เบฅเบงเบ‡เปƒเบซเป‰เบฅเบญเบ‡เบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป€เบŠเบฑเปˆเบ™
เบ™เบตเป‰:

my_program : file_list $(&cat file_list)

เปเบ•เปˆเบ™เบตเป‰เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบเป€เบžเบฒเบฐเบงเปˆเบฒ "$(&cat file_list)" เบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เบเปˆเบญเบ™เบ—เบตเปˆ makepp เบžเบฐเบเบฒเบเบฒเบก
เบชเป‰เบฒเบ‡ "file_list".

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

$(เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš phony): $(only_phony_targets */**/tests)

เบ•เบปเป‰เบ™เบเปเบฒเป€เบ™เบตเบ” เบ•เบปเบงเปเบ›
เป‚เบ”เบเปƒเบซเป‰เบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบงเปเบ›, เบšเบญเบเบ—เปˆเบฒเบ™เบงเปˆเบฒเบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™เบกเบฒเบˆเบฒเบเปƒเบช.

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

เปเบฒเบเป€เบซเบ”, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”, เบ•เบปเบงเบ‚เบฑเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเบžเบฒเบเปƒเบ™
perlcode เบขเบนเปˆเบ™เบญเบเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบญเป‰เบฒเบ‡เบญเบตเบ‡เบ”เบฝเบง เบซเบผเบทเบ„เบนเปˆ. เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ” double เบกเบฑเบ™เบ„เบทเบเบฑเบšเปƒเบ™
เบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบธเบ”เบ—เป‰เบฒเบ:

VAR = 1
VAR1 = ${perl ($VAR + 1) * 3}
VAR2 = $(perl do { $VAR *= 3; เบชเบปเปˆเบ‡เบ„เบทเบ™ $VAR + 1 } เบ–เป‰เบฒ $VAR)
VAR3 = $(makeperl $(VAR1) * 3 + $$VAR) # เบซเบ™เบถเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰ var เปเบฅเบฐเบซเบ™เบถเปˆเบ‡ Perl var
VAR = $((perl เบ–เป‰เบฒ(... ) { ... }))

phony เบ„เปเบฒเป€เบงเบปเป‰เบฒ
เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เปเบกเปˆเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ phony, เปเบฅเบฐเบชเบปเปˆเบ‡เบ„เบทเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡
เป€เบ›เบปเป‰เบฒเปเบฒเบ. เบกเบฑเบ™เบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เป€เบžเบทเปˆเบญเปƒเบŠเป‰เปเบšเบšเบ™เบตเป‰:

$(phony all): my_program

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -f *.o my_program

เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ›เบฐเบเบฒเบ”เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเป€เบ›เบฑเบ™ phony เบเบฑเบšเป€เบชเบฑเป‰เบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เบ—เบธเบเบšเปˆเบญเบ™เปƒเบ™
makefile เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹:

PHONY: เบ—เบฑเบ‡เปเบปเบ”เบชเบฐเบญเบฒเบ”

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

XYZ := $(เบžเบดเบก $(patsubst %.c, %o, $(SOURCE_FILES)))

เบˆเบฐเบžเบดเบกเบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ—เบซเบฒ "patsubst".

XYZ := $(patsubst %.c, %o, $(เบžเบดเบก $(SOURCE_FILES)))

เบˆเบฐเบžเบดเบกเบญเบญเบเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปƒเบซเป‰เบเบฑเบšเบเบฒเบ™เป‚เบ— "patsubst".

เบซเบญเบ shell-เบ„เปเบฒเบชเบฑเปˆเบ‡
เบชเบปเปˆเบ‡เบ„เบทเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบ„เบณเบชเบฑเปˆเบ‡ shell เบ—เบตเปˆเปƒเบซเป‰, เป‚เบ”เบเบกเบตเปเบ–เบงเปƒเปเปˆเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบเบฐเบซเบงเปˆเบฒเบ‡.

เปเบฒเบเป€เบซเบ”, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบฑเบ‡เปเบปเบ”, เบ•เบปเบงเบ‚เบฑเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเบ›เบฒเบเบปเบ”เบขเบนเปˆเบžเบฒเบเปƒเบ™
shell-command เบžเบฒเบเบ™เบญเบเบ‚เบญเบ‡เบชเบฐเบ•เบฃเบดเบ‡เบ”เบฝเบงเบซเบผเบทเบชเบญเบ‡เบงเบปเบ‡เบขเบทเบก. เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบญเบ‡เป€เบ—เบปเปˆเบฒ
เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเบชเบญเบ‡:

date = $(shell date) # เบ”เบตเบเบงเปˆเบฒ: $(perl scalar localtime)
VAR = ${{shell f() { echo เบชเบฐเบšเบฒเบเบ”เบต; }; f}}

xargs เบ„เปเบฒเบชเบฑเปˆเบ‡, arguments[,suffix[,length]]
เบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฒเบเบŠเบทเปˆเบ„เบณเบชเบฑเปˆเบ‡เบ—เบตเปˆเบ‚เบฑเป‰เบ™เบ”เป‰เบงเบเปเบ–เบงเปƒเปเปˆเบ‚เบญเบ‡เบ„เบณเบชเบฑเปˆเบ‡เบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบญเบฑเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบเบฒเบ™เบฅเบฐเบšเบธเป„เบงเป‰
เบ„เปเบฒเบชเบฑเปˆเบ‡, เปเบฅเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ”เป‰เบงเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป„เบ›
เบ„เบงเบฒเบกเบเบฒเบง (เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ 1000) เบ•เบปเบงเบญเบฑเบเบชเบญเบ™.

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

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
$(xargs $(RM), $(only_targets **/*))

เบ™เบตเป‰เบเบฑเบ‡เบกเบตเบœเบปเบ™เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡เบ—เบตเปˆเบšเปเปˆเบกเบตเบ„เปเบฒเบชเบฑเปˆเบ‡เปƒเบ”เป†เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ
เป€เบเบตเบ”โ€‹เบ‚เบถเป‰เบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบซเบงเปˆเบฒเบ‡โ€‹เป€เบ›เบปเปˆเบฒโ€‹. เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบกเบฑเบ™เบˆเบฐเบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰ buildin & rm,
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡ builtin เปเบกเปˆเบ™เบˆเปเบฒเบเบฑเบ”เบžเบฝเบ‡เปเบ•เปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบญเบ‡ Perl:

$(เบฅเป‰เบฒเบ‡โ€‹เบœเบดเบ”โ€‹เบžเบฒเบ”):
&rm -f $(เบžเบฝเบ‡_เป€เบ›เบปเป‰เบฒเปเบฒเบ **/*)

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

manifest:
&rm -f $@
&เปเบ•เบฐ $@
$(xargs echo, $(only_nontargets **/*), >> $@)

เบšเบฒเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆ GNU เป€เบฎเบฑเบ”เป€เบญเบเบฐเบชเบฒเบ™.

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

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


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

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

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

Ad