ืื ื’ืœื™ืชืฆืจืคืชื™ืชืกืคืจื“ื™

ืกืžืœ OnWorks

makepp_rules - ืžืงื•ื•ืŸ ื‘ืขื ืŸ

ื”ืคืขืœ makepp_rules ื‘ืกืคืง ืื™ืจื•ื— ื—ื™ื ืžื™ ืฉืœ OnWorks ืขืœ ืื•ื‘ื•ื ื˜ื• ืื•ื ืœื™ื™ืŸ, ืคื“ื•ืจื” ืื•ื ืœื™ื™ืŸ, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ื–ื•ื”ื™ ื”ืคืงื•ื“ื” makepp_rules ืฉื ื™ืชืŸ ืœื”ืจื™ืฅ ื‘ืกืคืง ื”ืื™ืจื•ื— ื”ื—ื™ื ืžื™ ืฉืœ OnWorks ื‘ืืžืฆืขื•ืช ืื—ืช ืžืชื—ื ื•ืช ื”ืขื‘ื•ื“ื” ื”ืžืงื•ื•ื ื•ืช ื”ืžืจื•ื‘ื•ืช ืฉืœื ื• ื‘ื—ื™ื ื ื›ื’ื•ืŸ Ubuntu Online, Fedora Online, ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ Windows ืื• ืืžื•ืœื˜ื•ืจ ืžืงื•ื•ืŸ ืฉืœ MAC OS

ืชึธื›ึฐื ึดื™ืช:

ืฉืึตื


makepp_rules -- ืื™ืš ืœื•ืžืจ ืœ-makepp ืœื‘ื ื•ืช ืžืฉื”ื•

ืชื™ืื•ืจ


?: &,
-,
@, B: :build_cache,
:build_check, D: :ืœึฐืฉืึทื’ึตืจ, E: :env, I: "ื”ืชืขืœื_ืฉื’ื™ืื”",
:ืœึดื›ืœื•ึนืœ, L: :ื”ื”ื–ื“ืžื ื•ืช ื”ืื—ืจื•ื ื”, M: ืžื™ื™ืคืจืœ, N: "ื ืืงื•", P: :ืžื ืชื—,
"ืคืจืœ", S: :ื—ึฒืชึดื™ืžึธื”

ื›ืœืœ ื”ื•ื ืžื” ืฉืื•ืžืจ ืœ-makepp ืื™ืš ืœื‘ื ื•ืช ืงื•ื‘ืฅ ืื• ืžื—ืœืงื” ืฉืœ ืงื‘ืฆื™ื. Makepp ืชื•ืžืš ื‘
ืื•ืชื• ืชื—ื‘ื™ืจ ื›ืœืœื™ื ื›ืžื• ื™ื™ืฉื•ืžื™ื ืื—ืจื™ื ืฉืœ make, ื‘ืชื•ืกืคืช ื›ืžื” ืชื•ืกืคื•ืช ืžืฉืœื•.

ืœื›ืœืœ ื™ืฉ ืืช ื”ืคื•ืจืžื˜ ื”ื›ืœืœื™

target_expression : dependency_expression [ : ืืจื’ื•ืžื ื˜ื™ื ืื•ืคืฆื™ื•ื ืœื™ื™ื]
ืคืขื•ืœื•ืช

ืจืฉื™ืžืช ื”ื™ืขื“ื™ื ืขืฉื•ื™ื” ืฉืœื ืœื”ื›ื™ืœ ืžืฉืชื ื™ื ืื•ื˜ื•ืžื˜ื™ื™ื (ืœืžืขื˜ "$(foreach)"). ื”
ืจืฉื™ืžืช ื”ืชืœื•ืช ืขืฉื•ื™ื” ืœื”ื›ื™ืœ ืจืง ืžืฉืชื ื™ื ืื•ื˜ื•ืžื˜ื™ื™ื ื”ืžืชื™ื™ื—ืกื™ื ืœื™ืขื“ (ื›ืœื•ืžืจ,
"$(ืคืœื˜)", "$(ืคืœื˜ื™ื)", ืื• ื”ืžื™ืœื™ื ื”ื ืจื“ืคื•ืช ืฉืœื”ื). ื”ืคืขื•ืœื” ืขืฉื•ื™ื” ืœื”ื›ื™ืœ ื›ืœ ืื•ื˜ื•ืžื˜ื™
ืžืฉืชื ื™ื.

ืื makepp ืžื—ืœื™ื˜ ืฉืฆืจื™ืš ืœื‘ืฆืข ืืช ื”ื›ืœืœ, ื›ืœ ืฉื•ืจื” ืฉืœ ื”ื›ืœืœ ืžื‘ื•ืฆืขืช
ื‘ืจืฆืฃ, ื•ืื ื‘ื›ืœืœ ืžื—ื–ื™ืจ ืกื˜ื˜ื•ืก ืฉืื™ื ื• ืืคืก, ื”ืฉืืจ ืœื ืžื‘ื•ืฆืขื™ื (ื•
makepp ืžื‘ื˜ืœ ืขื ืฉื’ื™ืื” ืืœื ืื ืฆื™ื™ื ืช ืืช ื”ืืคืฉืจื•ืช "-k" ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”.)
ื›ืœ ืคืขื•ืœื” ืฆืจื™ื›ื” ืœื”ื™ื•ืช ืจืง ืฉื•ืจื” ืื—ืช. ืื ืคืขื•ืœื” ืืจื•ื›ื” ืžื›ื“ื™ ืœื›ืชื•ื‘ ื‘ืฆื•ืจื” ื ื•ื—ื” ืขืœ ื
ืฉื•ืจื” ื‘ื•ื“ื“ืช, ืืชื” ื™ื›ื•ืœ ืœืคืฆืœ ืื•ืชื• ืœืžืกืคืจ ืฉื•ืจื•ืช ื•ืœืฉื™ื ืงื• ื ื˜ื•ื™ ื›ื“ื™ ืœืฆื™ื™ืŸ ืฉื”
ื™ืฉ ืœืฉืœื‘ ืžืกืคืจ ืฉื•ืจื•ืช ืœืื—ืช.

ืขืœ ืžื ืช ืœื”ื‘ื—ื™ืŸ ื‘ื™ืŸ ืคืขื•ืœื•ืช ืœื›ืœืœ ื”ื‘ื, ื™ืฉ ืœื”ื›ื ื™ืก ืืช ื”ืคืขื•ืœื” ื™ื•ืชืจ
ืžืืฉืจ ื”ืงื• ื”ืžื›ื™ืœ ืืช ื”ืžื˜ืจื•ืช ื•ื”ืชืœื•ืช. ื‘ื ื™ื’ื•ื“ ืœืžื™ืžื•ืฉื™ื ืื—ืจื™ื ืฉืœ
make, ืœื ืžืžืฉ ืื›ืคืช ืœ-makepp ื›ืžื” ืืชื” ืžื›ื ื™ืก ืืช ื–ื” ืื• ืื ืืชื” ืžืฉืชืžืฉ ื‘ืชื•ื•ื™ ื˜ืื‘
ื•ืœื ืจื•ื•ื—ื™ื. ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ืชืื™ืžื•ืช ืœืื—ื•ืจ ืขื ืชื•ืฆืจืช ืžืกื•ืจืชื™ืช, ื”ื›ืœืœื™ื
ืžืฉืชืžืฉืช makepp ื›ื“ื™ ืœื”ื—ืœื™ื˜ ืžืชื™ ื”ืคืขื•ืœื•ืช ืžืกืชื™ื™ืžื•ืช ื•ื”ื›ืœืœ ื”ื‘ื ืžืชื—ื™ืœ ื”ื ืงืฆืช ืžืกื•ื‘ื›ื™ื:

ยท ื™ืฉ ืœื”ื–ื™ืŸ ืืช ืฉื•ืจืช ื”ืคืขื•ืœื” ื”ืจืืฉื•ื ื” ื™ื•ืชืจ ืžื”ืฉื•ืจื” ื”ืžื›ื™ืœื” ืืช ื”ืžื˜ืจื”.

ยท ืื ืฉื•ืจื” ืžื•ื›ื ืกืช ื‘ืืžืฆืขื•ืช ืชื• ื˜ืื‘ ืื—ื“ ืื• 8 ืจื•ื•ื—ื™ื ืื• ื™ื•ืชืจ, ืื– ื–ื” ื ื—ืฉื‘
ืงื• ืคืขื•ืœื”.

ยท ืฉื•ืจื” ืจื™ืงื” ืื• ืฉื•ืจืช ื”ืขืจื” ืขื ื”ืชื• "#" ื‘ืฉื•ืœื™ื™ื ื”ื™ืžื ื™ื™ื ืžืกื™ื™ืžืช ืืช
ื›ืœืœ, ืืœื ืื ื”ืฉื•ืจื” ื”ืœื ืจื™ืงื” ื”ื‘ืื” ืžื•ื–ื—ืช ื™ื•ืชืจ ืž-8 ืจื•ื•ื—ื™ื (ืื• ื™ื•ืชืจ ืžืื—ื“
ืœืฉื•ื ื™ืช).

ยท ืื ืฉื•ืจื” ืžื•ืงืคืฆืช ื‘ืื•ืชื” ืžื™ื“ื” ืื• ื™ื•ืชืจ ืžืฉื•ืจืช ื”ืคืขื•ืœื” ื”ืจืืฉื•ื ื”, ืื– ื›ืŸ
ื ื—ืฉื‘ ืงื• ืคืขื•ืœื” ื ื•ืกืฃ.

ื™ืฉ ื›ืžื” ืคืจื™ื˜ื™ ืคืขื•ืœื” ืžื™ื•ื—ื“ื™ื:

& ืื—ืจื™ ืกืžืœ ื–ื” ื™ื•ืคื™ืข ืฉื ืคืงื•ื“ื” ื•ื›ืœ ืžืกืคืจ ืฉืœ ืืจื’ื•ืžื ื˜ื™ื. ืฆื“ืฃ
ื”ืชื—ื‘ื™ืจ ืœื ืžื•ื‘ืŸ ื‘ืžืœื•ืื• ื›ืืŸ, ืจืง ืžืจื›ืื•ืช ื‘ื•ื“ื“ื•ืช ื•ื›ืคื•ืœื•ืช ื•ื—ืชื™ื›ื•ืช ืœืื—ื•ืจ
ื“ืžื•ื™ื•ืช ื‘ืชื•ืš, ื›ืžื• ื‘ื›ืœ makepp. ืฉื ื”ืคืงื•ื“ื” ืžื•ื‘ื™ืœ ืœืคื•ื ืงืฆื™ื”
"ื’_ืฉืึตื" ืœื”ื™ืงืจื ืขื ื”ืžื—ืจื•ื–ื•ืช ื”ื ื•ืชืจื•ืช ื›ื˜ื™ืขื•ื ื™ื. ืื ืคื•ื ืงืฆื™ื” ื›ื–ื• ื™ื›ื•ืœื”
ืœื ื ืžืฆื, ื–ื” ื–ื”ื” ืœืงืจื™ืื” "ื”ืคืขืœื”" ืžื‘ืœื•ืง "ืคืจืœ".

ื–ื” ืžืืคืฉืจ ืœืงืจื•ื ื‘ื™ืขื™ืœื•ืช ืœืคืงื•ื“ื” ืžื•ื‘ื ื™ืช, ืžืกื•ืคืงืช ื‘-makefile ืื• ื—ื™ืฆื•ื ื™ืช.
ื”ืงื™ื“ื•ืžืช "&" ื ื‘ื—ืจื” ืžื›ื™ื•ื•ืŸ ืฉื”ื™ื ืžืขื•ืจืจืช ื”ืคื•ื ืงืฆื™ื•ืช ื‘- Perl, ื•ืžืฉื•ื
ื‘ื”ืชื—ืœื” ื–ื” ืœื ื—ื•ืงื™ ื‘-Shell.

$(ROOT)/include/%.h: %.h
&ln $(ืงืœื˜) $(ืคืœื˜)

noecho
@ ื‘ื“ืจืš ื›ืœืœ, ื›ืœ ืคืงื•ื“ืช ืžืขื˜ืคืช ืžื•ื“ืคืกืช ืชื•ืš ื›ื“ื™ ื‘ื™ืฆื•ืขื”. ืขื ื–ืืช, ืื ื”ืžื™ืœื” ื”ืจืืฉื•ื ื”
ืฉืœ ื”ืคืขื•ืœื” ื”ื™ื "noecho" (ืื• ืื ื”ื™ื ืžืชื—ื™ืœื” ื‘ืื•ืช "@"), ืื– ื”ืคืงื•ื“ื”
ืื™ื ื• ืžื•ื“ืคืก. ืœื“ื•ื’ืžื”,

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

ื–ื” ืื•ืžืจ ืฉื›ืืฉืจ ื”ืคืงื•ื“ื” libtool ืžื‘ื•ืฆืขืช, ื”ื™ื ืœื ืžื•ื“ืคืกืช. (Libtool
ืขืฆืžื• ื‘ื“ืจืš ื›ืœืœ ืžื“ืคื™ืก ืืช ื”ืคืงื•ื“ื” ืฉืฉื•ื ืชื” ืฉื”ื™ื ืžื‘ืฆืขืช, ืื– ื–ื” ืžื™ื•ืชืจ
ืœื”ื“ืคื™ืก ืื•ืชื• ืคืขืžื™ื™ื.)

ื”ืชืขืœื_ืฉื’ื™ืื”
- ื‘ื“ืจืš ื›ืœืœ, ืื ืคืงื•ื“ืช ื”ืžืขื˜ืคืช ืžื—ื–ื™ืจื” ืกื˜ื˜ื•ืก ืฉืื™ื ื• ืืคืก, ืื– 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" ืขืœื•ืœ ืœื”ื™ื›ืฉืœ, ืืš ืžืชืขืœืžื™ื ืžืกื˜ื˜ื•ืก ื”ื”ื—ื–ืจื” ืฉืœื•.

ืคืจืœ
makeperl
ื–ื” ื‘ืขืฆื ื–ื”ื” ืœื”ืฆื”ืจืช perl, ืื‘ืœ ื–ื” ืžื‘ื•ืฆืข ื‘ื›ืœ ืคืขื ื›ืืฉืจ
ื”ืคืขืœืช ื”ื›ืœืœ, ืœื ื‘ืขืช ืงืจื™ืืช ื”-makefile. ื”ื’ืจืกื” ื”ืจืืฉื•ื ื” ื”ื™ื ืคืจืœ ืจื’ื™ืœ
ืงื•ื“, ื‘ืขื•ื“ ืฉื”ื•ืจื™ืื ื˜ ื”ืฉื ื™ ืžืขื‘ื™ืจ ืชื—ื™ืœื” ืืช ื”ื”ืฆื”ืจื” ื“ืจืš ื”ืžืฉืชื ื” Make-style
ื”ึทืจื—ึธื‘ึธื”.

ืœืฉืชื™ ื”ืืคืฉืจื•ื™ื•ืช ืœืฉื™ื ืืช ื”ืคืœื˜ื” ืฉืœ โ€‹โ€‹ื”ื’ื•ืฃ, ืจืื” ื”ืกื‘ืจ ื‘
"perl_perlcode" ื‘-makepp_statements. ืฉื™ืžื• ืœื‘ ืฉื”ื’ืจืกื” ื”ืฉืœื™ืฉื™ืช ืžื•ืกื‘ืจืช ืฉื
ืื™ืŸ ื”ื’ื™ื•ืŸ ื›ืืŸ, ื›ื™ ื™ืฉ ืœื”ื›ื ื™ืก ื”ื–ื—ื” ืฉืœ ื›ืœ ืฉื•ืจื•ืช ื”ืคืขื•ืœื”. ืืชื” ื—ื™ื™ื‘ ืœืื•ืชืช
ื›ื™ืฉืœื•ืŸ ื‘ื”ืฆื”ืจื•ืช ืคืจืœ, ืขืœ ื™ื“ื™ ืงืจื™ืื” "ืœืžื•ืช".

ืœืคื™ ื›ืœืœ, ื”ืฆื”ืจื•ืช Perl ืžื•ืขืจื›ื•ืช ื›ืขืช ื‘ืชื”ืœื™ืš ืžืฉื ื” ืžืฉื•ืชืฃ, ืœืžืขื˜ ื‘-
ื—ืœื•ื ื•ืช. ื–ื” ืื•ืžืจ ืฉื™ืฉ ืœื”ื ืจืง ื’ื™ืฉืช ืงืจื™ืื” ืœื›ืœ ืžืฉืชื ื™ makefile. ื–ื” ื’ื
ื”ืชื”ืœื™ืš ืฉืžื‘ืฆืข ืคืขื•ืœื•ืช ืฉืื™ื ืŸ Perl. ืื– ื”ืงืจื™ืื” ืœืžื ื”ืœ ืื• ื™ืฆื™ืื” ืชื‘ืœื‘ืœ
makepp. ืื‘ืœ ื–ื” ืขืฉื•ื™ ืœื”ืฉืชื ื•ืช ื‘ืขืชื™ื“. ืœื“ืจืš ื™ืขื™ืœื” ืœื”ืชืงืฉืจ ืœืคืจืœ
ืกืงืจื™ืคื˜ื™ื, ืขื™ื™ืŸ ื‘ืคืจื™ื˜ ื”ืงื•ื“ื "&" ืื• "ื”ืคืขืœื”".

$(ื’ืจืกื” ืžื–ื•ื™ืคืช):
noecho perl {{ # $(target) & $(VERSION) ืž- Perl:
print "ื–ื”ื• ".f_target()." $VERSION\n";
}}
echo ืืชื” ื™ื›ื•ืœ ืœืขืจื‘ื‘ ืืช ื–ื” ืขื ืคืงื•ื“ื•ืช Shell
-makeperl { ื”ื“ืคืก "ื–ื”ื• $(ืžื˜ืจื”) $(ื’ืจืกื”)\n" }

ื™ืฉื ื ืžืกืคืจ ืกื•ื’ื™ื ืฉื•ื ื™ื ืฉืœ ื›ืœืœื™ื, ืฉืœื›ืœ ืื—ื“ ืžื”ื ืžื˜ืจื•ืช ืฉื•ื ื•ืช.

ืžึฐืคื•ึนืจึธืฉื ื—ื•ืงื™
target1 target2: dependency1 dependency2 ...
ืคืขื•ืœื•ืช ืฉื™ืฉ ืœื‘ืฆืข

ืชื—ื‘ื™ืจ ื–ื” ืžืฆื™ื™ืŸ ืืช ื–ื” ืขืœ ืžื ืช ืœืขืฉื•ืช ืื• TargetXNX or TargetXNX, ื›ืœ ื”ืงื‘ืฆื™ื
ืชืœื•ืช 1, ืชืœื•ืช 2ื•ื›ื•', ื‘ื˜ื— ื›ื‘ืจ ื ืขืฉื•. ืื– ื”ืคืขื•ืœื•ืช ื”ื ืชื•ื ื•ืช ื”ืŸ
ื”ื•ืฆื ืœื”ื•ืจื’ ืขืœ ื™ื“ื™ ื”ืคื’ื– ื›ื“ื™ ืœื™ืฆื•ืจ ืืช ื”ืžื˜ืจื•ืช.

ื”ื›ืœืœ ื”ืžืคื•ืจืฉ ื”ืจืืฉื•ืŸ ื‘ืงื•ื‘ืฅ ื”ื•ื ื™ืขื“ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ, ื•ื”ื•ื ื ืขืฉื” ืื ืœื ืชืฆื™ื™ืŸ
ื™ืขื“ื™ื ื›ืœืฉื”ื ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื”.

ืฉืœื ื›ืžื• ืชื›ื ื™ื•ืช ื™ืฆืจืŸ ืžืกื•ืจืชื™ื•ืช, makepp ื‘ื“ืจืš ื›ืœืœ ืžื ื™ื— ืฉืงืจื™ืืช ืคืขื•ืœื” ืื—ืช ื”ื™ื
ืขื•ืฉื” ืืช ื›ืœ ื”ืžื˜ืจื•ืช (ืืœื ืื ื›ืŸ ืื™ืŸ ืชืœื•ืช). ืœืžืฉืœ, ืงืจื™ืื” ืื—ืช
ืฉืœ yacc ื™ื•ืฆืจ ืืช ืฉื ื™ ืงื•ื‘ืฆื™ ื”ืคืœื˜ ืขื‘ื•ืจ ื”ื›ืœืœ ื”ื–ื”:

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

ืฉื™ืžื• ืœื‘ ืฉืœื™ื™ืฉื•ืžื™ื ืื—ืจื™ื ืฉืœ make ืื™ืŸ ืžื•ืฉื’ ืฉืœ ืคืงื•ื“ื” ืื—ืช
ื™ื™ืฆื•ืจ ืงื•ื‘ืฆื™ ืคืœื˜ ืžืจื•ื‘ื™ื, ื•ืœื›ืŸ ื›ืืฉืจ ืืชื” ืžืฆื™ื™ืŸ ืžืกืคืจ ื™ืขื“ื™ื ื”ื ื™ืขืฉื• ื–ืืช
ืœื‘ืฆืข ืืช ื”ื›ืœืœ ืคืขื ืื—ืช ืœื›ืœ ื™ืขื“. Makepp ื™ื—ื–ื•ืจ ืœื”ืชื ื”ื’ื•ืช ื”ื–ื• ืื ื–ื” ื ืจืื” ื›ืš
ื–ื”ื• ืงื•ื‘ืฅ ืžื™ื™ืงืœ ื‘ืกื’ื ื•ืŸ ื™ืฉืŸ. ื‘ืื•ืคืŸ ืกืคืฆื™ืคื™, ื”ื•ื ื™ื‘ืฆืข ืืช ื”ื›ืœืœ ืคืขื ืื—ืช ืœื›ืœ ื™ืขื“,
ื‘ืžืงื•ื ืจืง ืคืขื ืื—ืช ื‘ืกืš ื”ื›ืœ, ืื ื›ืœ ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื ื ื›ื•ื ื™ื:

ยท ืคืขื•ืœืช ื”ื›ืœืœ ืžื–ื›ื™ืจื” ืืช ื”ืžืฉืชื ื” ื”ืื•ื˜ื•ืžื˜ื™ $@. (ื”ืžื™ืœื™ื ื”ื ืจื“ืคื•ืช "$(ืคืœื˜)" ืื•
"$(target)" ืœื ืžืคืขื™ืœ ื”ืชื ื”ื’ื•ืช ื–ื•.)

ยท ืคืขื•ืœืช ื”ื›ืœืœ ืื™ื ื” ืžื–ื›ื™ืจื” ืืช ื”ืžืฉืชื ื” ื”ืื•ื˜ื•ืžื˜ื™ "$(ืคืœื˜ื™ื)" (ืื• ื”ืžื™ืœื” ื”ื ืจื“ืคืช ืฉืœื•
"$(ื™ืขื“ื™ื)").

ยท ื–ื” ืœื ื›ืœืœ ื“ืคื•ืก, ื•ืื™ืŸ ืคืกืงืช foreach.

ืœื“ื•ื’ืžื”,

ื›ืœ ื”ืชืงื ื•ืช ื‘ื“ื™ืงื”:
ืขื‘ื•ืจ subdir ื‘-$(SUBDIRS); ืขืฉื” cd $$subdir && $(MAKE) $@; ืชืงืœื™ื˜ื•ืจ..; ื‘ื•ืฆืข

ื”ื•ื ื ื™ื‘ ื ืคื•ืฅ ื‘-makefiles, ื•-makepp ืชื•ืžืš ื‘ื•. (ืฉื™ื ืœื‘ ืฉืืกื•ืจ ืœืš ืœื”ืฉืชืžืฉ
ืžื•ืชื’ ืจืงื•ืจืกื™ื‘ื™ ื‘ื›ืœ ืงื•ื‘ืฅ makefile ื—ื“ืฉ ืฉืืชื” ื›ื•ืชื‘ - ื”ืฉืชืžืฉ ื‘ืžืฉืคื˜ "load_makefile", ืื•
ื˜ืขื™ื ืช ืงื•ื‘ืฅ makefile ื‘ืžืงื•ื ื–ืืช.)

ืื ืืชื” ืจื•ืฆื” ืฉืื•ืชื• ื›ืœืœ ื™ื‘ื•ืฆืข ืคืขื ืื—ืช ืขื‘ื•ืจ ื›ืœ ื™ืขื“ (ืœืžืฉืœ, ื‘ื’ืœืœ ื”ืžื˜ืจื•ืช
ื™ืฉ ืคืงื•ื“ื•ืช ื“ื•ืžื•ืช), ืขื“ื™ืฃ ืœื”ืฉืชืžืฉ ื‘ื›ืœืœ ื“ืคื•ืก (ืจืื” ืœื”ืœืŸ) ืื• ื
ืกืขื™ืฃ "ืงื“ื™ืžื”". ืœื“ื•ื’ืžื”, ืื ืขื ืชื•ื›ื ื™ืช ืชื•ืฆืจืช ืžืกื•ืจืชื™ืช ื”ื™ื™ืช ื›ื•ืชื‘:

ื ื‘ ื’ ื“:
do_something ื›ื“ื™ ืœื‘ื ื•ืช $@ > $@

ื‘-makepp, ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืชืจืฆื” ืœื›ืชื•ื‘ ืืช ื–ื” ื›ืš:

$(foreach): : foreach abcd
do_something ื›ื“ื™ ืœื‘ื ื•ืช $(ืคืœื˜) > $(ืคืœื˜)

ืžื–ื•ื™ืฃ ืžื˜ืจื•ืช

A ืžึฐื–ื•ึผื™ึธืฃ ื™ืขื“ ื”ื•ื ื™ืขื“ ืฉืœืขื•ืœื ืœื ื™ืชืงื™ื™ื ื‘ืคื•ืขืœ ื‘ืžืขืจื›ืช ื”ืงื‘ืฆื™ื; ื–ื” ืจืง ื
ื“ืจืš ืœื’ืจื•ื ืœ-makepp ืœื‘ื ื•ืช ื›ืžื” ืžื˜ืจื•ืช ื•ืื•ืœื™ ืœื‘ืฆืข ื›ืžื” ืคืงื•ื“ื•ืช ื ื•ืกืคื•ืช.

ื™ืขื“ ืžื–ื•ื™ืฃ ื˜ื™ืคื•ืกื™ ื”ื•ื "ื”ื›ืœ", ืฉื‘ื“ืจืš ื›ืœืœ ืžืฉืžืฉ ื›ื“ื™ ืœื’ืจื•ื ืœื›ืœ ืžื” ืฉื™ื›ื•ืœ ืœื”ื™ื•ืช
ื ื‘ื ื” ื›ื“ื™ ืœื”ื™ื‘ื ื•ืช, ื›ืš:

ื”ื›ืœ: prog1 prog2 subdir/prog3 subdir2/libmine.a
@&echo "ื”ื›ืœ ื ืขืฉื”!"

ืื ืืชื” ืžืงืœื™ื“ "makepp all", ืื• ืื ืืชื” ืฉื ื”ื›ืœ ื‘ืชื•ืจ ื”ื™ืขื“ ื”ืžืคื•ืจืฉ ื”ืจืืฉื•ืŸ ื‘-makefile ืฉืœืš
(ื•ื–ื” ืื•ืคื™ื™ื ื™) ื•ืคืฉื•ื˜ ื”ืงืœื“ "makepp", ื•ืื– ื–ื” ื™ื’ืจื•ื ืœื›ืœ ื”ืชืœื•ืช ืœื”ื™ื•ืช
ื ื‘ื ื”, ื•ืื– ื”ื•ื ื™ื“ืคื™ืก "ื”ื›ืœ ื ืขืฉื”!". ื‘ืฉืœื‘ ื–ื”, makepp ื™ื—ืคืฉ ืืช ื”ืงื•ื‘ืฅ ./ืืช ื›ืœ
ื•ื™ื’ืœื” ืฉื–ื” ืœื ืงื™ื™ื. ื–ื” ื™ืชืœื•ื ืŸ ื‘ืงื•ืœ ืจื.

ื›ื“ื™ ืœืžื ื•ืข ืž-makepp ืœืฆืคื•ืช ืœืงื•ื‘ืฅ ./ืืช ื›ืœ ื›ื“ื™ ืœืฆืืช, ืืชื” ืฆืจื™ืš ืœื”ื’ื™ื“ ืœื• ืฉื–ื” ื
ืžื˜ืจื” ืžื–ื•ื™ืคืช. ืคืฉื•ื˜ ืฉื™ื ืฉื•ืจื” ื›ืžื• ื”ื‘ืื” ื‘-makefile ืฉืœืš โ€‹โ€‹(ื–ื” ืœื ืžืฉื ื”
ืื™ืคื”):

.PHONY: ื”ื›ืœ

ื—ืœื•ืคื” ืžืงื‘ื™ืœื” ืฉืœืขื™ืชื™ื ื ื•ื—ื” ื™ื•ืชืจ ื”ื™ื ืœื”ืฉืชืžืฉ ื‘-"$(phony )"
ืคื•ื ืงืฆื™ื”, ื›ืš:

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

ืžื˜ืจื•ืช ืžื–ื•ื™ืคื•ืช ื‘ืงื•ื‘ืฅ makefile ื™ื›ื•ืœ ืœื”ืชื™ื™ื—ืก ืœื™ืขื“ื™ื ืžื–ื•ื™ืคื™ื ื‘ืงื•ื‘ืฅ makefile ืื—ืจ. ื–ื”
ื ืขืฉื” ืœืขืชื™ื ืงืจื•ื‘ื•ืช ืขื ื”ื™ืขื“ ื”"ื ืงื™", ื›ืš:

# Makefile ื‘ืจืžื” ื”ืขืœื™ื•ื ื”:
# ื”ืจื‘ื” ื—ื•ืงื™ื ื•ื“ื‘ืจื™ื ื›ืืŸ
#....
$(phony clean): subdir1/clean subdir2/clean
&rm -fm my_program

ื•ืื– ื‘ืกืคืจื™ื•ืช ื”ืžืฉื ื”, ื”-makefiles ืขืฉื•ื™ื™ื ืœื”ื™ืงืจื ื›ืš:

# Makefile ื‘ืกืคืจื™ื™ืช ืžืฉื ื”
#...
$(ื ืงื™ ืžื–ื•ื™ืฃ):
&rm -fm $(ืชื• ื›ืœืœื™ *.o *.a)

ืื‘ืœ ื‘ื™ืžื™ื ื• ื”ื™ื™ืช ืžืฉืชืžืฉ ื‘ืคืงื•ื“ื” "makeppclean", ื‘ืžืงื•ื ืžื˜ืจื” ื ืงื™ื™ื”.

ื›ืจื˜ื™ืกื™ ื‘ืจ

ื–ื” ื‘ื˜ื•ื— ืœืฆื™ื™ืŸ ืชื•ื•ื™ื ื›ืœืœื™ื™ื ื‘ืจืฉื™ืžืช ื”ืชืœื•ืช. ืชื•ื•ื™ื ื›ืœืœื™ื™ื ืชื•ืืžื™ื ืœื ืจืง ืงื‘ืฆื™ื
ืฉืงื™ื™ืžื™ื, ืื‘ืœ ืงื‘ืฆื™ื ืฉื ื™ืชืŸ ืœื™ืฆื•ืจ ื‘ื”ื™ื ืชืŸ ื”ื›ืœืœื™ื ื‘-makefile. ืœื“ื•ื’ืžื”,
ื›ื“ื™ ืœื‘ื ื•ืช ืกืคืจื™ื” ืžื›ืœ ืงื‘ืฆื™ ื”-.o ื‘ืกืคืจื™ื”, ืชื•ื›ืœ ืœื›ืชื•ื‘ ืืช ื–ื”:

libmine.a: *.o
&rm -f $(ืคืœื˜)
ar cr $(ืคืœื˜) $(ื›ื ื™ืกื•ืช)

ื–ื” ื™ืขื‘ื•ื“ ื’ื ืื ืืฃ ืื—ื“ ืžืงื‘ืฆื™ ".o" ืœื ื ื•ืฆืจ ืขื“ื™ื™ืŸ, ื›ื™ makepp's
ืชื•ื•ื™ื ื›ืœืœื™ื™ื ืชื•ืืžื™ื ืงื‘ืฆื™ื ืฉืขื“ื™ื™ืŸ ืœื ืงื™ื™ืžื™ื ืื‘ืœ ื ื™ืชื ื™ื ืœื‘ื ื™ื™ื”. ื–ื” ืืคื™ืœื• ื™ืชื’ื‘ืจ
ืงื‘ืฆื™ื ืฉื”ื›ืœืœ ืฉืœื”ื ืžืชื’ืœื” ืžืื•ื—ืจ ื™ื•ืชืจ (ื‘ืื•ืชื• makefile, ืื• ื›ื–ื” ืฉื˜ืจื ื ืงืจื). ื‘ื–ื”
ื”ื ืงื•ื“ื” ื”ืื—ืจื•ื ื” ื”ื™ื ืฉื•ื ื” ืžืคื•ื ืงืฆื™ื™ืช "ืชื• ื›ืœืœื™", ื”ืžื•ื’ื‘ืœืช ืœื›ืœืœื™ื ื”ื™ื“ื•ืขื™ื,
ื›ืคื™ ืฉื”ื•ื ื—ื™ื™ื‘ ืœื”ื—ื–ื™ืจ ืืช ื”ืชื•ืฆืื” ืฉืœื• ื›ืืฉืจ ื”ื•ื ืžื•ืจื—ื‘.

Makepp ืชื•ืžืš ื‘ื›ืœ ืชื•ื•ื™ ื”ืคื’ื– ื”ืจื’ื™ืœื™ื ("*", "?" ื•-"[]"). ื™ืฉ ืœื• ื’ื ื
ืชื• ื›ืœืœื™ "**" ืฉืžืชืื™ื ืœื›ืœ ืžืกืคืจ ืฉืœ ืกืคืจื™ื•ืช ืžืชืขืจื‘ื•ืช. (ื”ืจืขื™ื•ืŸ ื”ื–ื” ื ื’ื ื‘
ืž-zsh.) ืœื“ื•ื’ืžื”, "**/*.c" ืžืชืื™ื ืœื›ืœ ื”- .c ืงื‘ืฆื™ื ื‘ื›ืœ ืขืฅ ื”ืžืงื•ืจ.
"objects/**/*.o" ืชื•ืื ืืช ื›ืœ .o ืงื‘ืฆื™ื ื”ื›ืœื•ืœื™ื ื‘ื›ืœ ืžืงื•ื ื‘ืกืคืจื™ื™ืช ื”ืžืฉื ื” ืื•ื‘ื™ื™ืงื˜ื™ื
ืื• ื›ืœ ืื—ืช ืžืกืคืจื™ื•ืช ื”ืžืฉื ื” ืฉืœื” ืื• ื›ืœ ืื—ืช ืžืกืคืจื™ื•ืช ื”ืžืฉื ื” ืฉืœื”ืŸ. ื”ืชื• ื”ื›ืœืœื™ "**" ืœื ื™ืขืฉื” ื–ืืช
ืขืงื•ื‘ ืื—ืจ ืงื™ืฉื•ืจื™ื ืจื›ื™ื ืœืกืคืจื™ื•ืช ื‘ื›ืœ ืจืžื”. ื–ื” ื’ื ืœืขื•ืœื ืœื ื™ื—ื–ื™ืจ ืžื˜ืจื•ืช ืžื–ื•ื™ืคื•ืช.

ื”ืชื•ื•ื™ื ื”ื›ืœืœื™ื™ื ืฉืœ Makepp ื™ืชืขืœืžื• ืžืงื‘ืฆื™ื ืื• ืกืคืจื™ื•ืช ืฉืงื™ื™ืžื™ื ืืš ืœื ื ื™ืชื ื™ื ืœืงืจื™ืื”. ืœืื—ืจ
ื‘ื›ืœ ืžืงืจื”, ืœื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืงื‘ืฆื™ื ื›ืืœื” ื‘ืชื”ืœื™ืš ื”ื‘ื ื™ื™ื”. ื”ื›ื ืกืช ืงื‘ืฆื™ื ื‘ืœืชื™ ืงืจื™ืื™ื ื‘-a
ืกืคืจื™ื™ื” ืฉื™ืžื•ืฉื™ืช ื‘ืขื™ืงืจ ื›ื“ื™ ืœืขื›ื‘ ืืช ื”ื™ื™ื‘ื•ื โ€‹โ€‹ื”ืื•ื˜ื•ืžื˜ื™ ืฉืœ ื”ืงื•ื‘ืฅ ื”ื ืชื•ืŸ ืž-a
ืžืื’ืจ.

ื”ืงื‘ื™ืขื” ื”ืจืืฉื•ื ื™ืช ื”ื™ื™ืชื” ืฉื–ื” ื‘ื˜ื•ื—. ื–ื” ื‘ืžื•ื‘ืŸ ืฉื–ื” ืขื•ื‘ื“ ืื
ื”ืงื‘ืฆื™ื ื›ื‘ืจ ืงื™ื™ืžื™ื, ืื• ืฉืฆืจื™ืš ืœื‘ื ื•ืช ืงื•ื“ื. ืขื ื–ืืช, ื–ื” ืœื ื‘ื˜ื•ื— ื‘ืžื•ื‘ืŸ
ืฉื–ื” ืขื“ื™ื™ืŸ ื™ืชืื™ื ืœืงื‘ืฆื™ื ืฉื ื‘ื ื• ืขืœ ื™ื“ื™ makepp, ืื‘ืœ ืื™ืŸ ืœื”ื ืขื•ื“ ื›ืœืœ (ืœืžืฉืœ
ื”ืกืจืช ืืช .c ืงื•ื‘ืฅ, ืื‘ืœ ื” .o ื”ืงื•ื‘ืฅ ืขื“ื™ื™ืŸ ืงื™ื™ื.) ื›ื“ื™ ืœืžื ื•ืข ื–ืืช, ื”ืฉืชืžืฉ ื‘-
ืืคืฉืจื•ืช "--rm-stale".

ืชื‘ื ื™ืช ื›ืœืœื™
ื›ืœืœ ื“ืคื•ืก ื”ื•ื ื›ืœืœ ืฉืžื•ื—ืœ ืขืœ ืกืžืš ื“ืคื•ืก ื˜ืงืกื˜ื•ืืœื™ ื›ืœืฉื”ื•. ื–ื” ืจื’ื™ืœ
ืœื”ื—ื™ืœ ืืช ืื•ืชื• ื›ืœืœ ืขืœ ืžื—ืœืงื” ืฉืœืžื” ืฉืœ ืงื‘ืฆื™ื. ื”ืชื—ื‘ื™ืจ ื–ื”ื” ืœืชื—ื‘ื™ืจ ืฉืœ GNU
ื›ืœืœื™ ื“ืคื•ืก:

%.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 $(ืกื˜ื).tab.h
&mv y.tab.c $(stem).tab.c

ื‘ื“ืจืš ื›ืœืœ, ื›ืœืœื™ ื“ืคื•ืก ืžื—ืคืฉื™ื ืจืง ืงื‘ืฆื™ื ื‘ืกืคืจื™ื•ืช ื”ื ื•ื›ื—ื™ื•ืช. ืืชื” ื™ื›ื•ืœ ืœื”ื›ืจื™ื—
ืื•ืชื ืœื—ืคืฉ ื‘ืกืคืจื™ื™ื” ื”ื ื•ื›ื—ื™ืช ื•ื‘ื›ืœ ื”ืกืคืจื™ื•ืช ืฉืžืชื—ืชื™ื” ืœืคื™ ื”ื’ื“ืจื”

makepp_percent_subdirs := 1

ืœืคื ื™ ื›ืœืœ ื”ื“ืคื•ืก ื”ืจืืฉื•ืŸ ื‘-makefile ืฉืœืš โ€‹โ€‹ืื• ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ืœืžืฉืœ.

ื™ืฉ ื”ื‘ื“ืœ ื‘ืจื•ืจ ื‘ื™ืŸ "%" ืœื‘ื™ืŸ ื”ืชื• ื”ื›ืœืœื™ "*", ืื ื›ื™ ืฉื ื™ื”ื ืชื•ืืžื™ื ืœื›ืœ
string: ื”ืชื• ื”ื›ืœืœื™ ืžื—ื–ื™ืจ ืจืฉื™ืžื” ืฉืœ ืงื‘ืฆื™ื ืฉื ืžืฆืื™ื ื‘ืฉื™ืžื•ืฉ ืžืœื ื‘ืื•ืชื” ื ืงื•ื“ื”. ืœื›ืŸ
ื–ื” ืชืœื•ื™ ื‘ื›ื•ืœื .o ืงื‘ืฆื™ื ืฉื ื™ืชืŸ ืœื‘ื ื•ืช ื›ืืŸ:

ืคืจื•ื’: *.o
$(LD) $(LDFLAGS) $(ื›ื ื™ืกื•ืช) -o $(ืคืœื˜)

ืœื ื ื™ืชืŸ ื”ื™ื” ืœื”ืฉื™ื’ ื–ืืช ืขืœ ื™ื“ื™ ื”ื—ืœืคืช "*" ื‘-"%", ืžื›ื™ื•ื•ืŸ ืฉื”ืื—ืจื•ืŸ ื”ื•ื ืื—ื“ ืœืื—ื“
ื”ืชืืžื” ืฉืœ ืงืœื˜ ืœืคืœื˜, ื™ืฆื™ืจืช ื›ืœืœ ืื—ื“ ืคื ื™ืžื™ ืขื‘ื•ืจ ื›ืœ ื’ื–ืข ืžื•ืชืื.

ืกื˜ื˜ื™ ื“ืคื•ืก ื›ืœืœื™
ื›ืœืœ ื“ืคื•ืก ืกื˜ื˜ื™ ื”ื•ื ื›ืœืœ ื“ืคื•ืก ื”ืžื•ื—ืœ ืจืง ืขืœ ืงื‘ื•ืฆื” ืžื•ื’ื‘ืœืช ืฉืœ ืงื‘ืฆื™ื:

$(SPECIAL_MODULES).o : %.o : %.cpp
$(CXX) -c $(ืงืœื˜) -o $(ืคืœื˜)

ื–ื” ืื•ืžืจ ืฉื›ืœืœ ื”ื“ืคื•ืก ื—ืœ ืจืง ืขืœ ื”ืงื‘ืฆื™ื ื‘-"$(SPECIAL_MODULES).o".

ื–ื” ื‘ืขื™ืงืจ ื‘ืฉื‘ื™ืœ ืชืื™ืžื•ืช ืขื GNU make; ื›ืœืœื™ื ืžืงื“ื™ืžื™ื (ืจืื” ืœื”ืœืŸ) ื”ื ืขื•ื“
ื“ืจืš ืขื•ืฆืžืชื™ืช ืœืขืฉื•ืช ืืช ืื•ืชื• ื”ื“ื‘ืจ.

ืœื›ืœ ืื—ื“ ื›ืœืœื™
ืชื—ื‘ื™ืจ ื›ืœืœ ื”ื“ืคื•ืกื™ื ืœืขื™ืœ ื—ื–ืง ืžืกืคื™ืง ื›ื“ื™ ืœืชืžื•ืš ื›ืžืขื˜ ื‘ื›ืœ ื”ื‘ื ื™ื™ื”, ืื‘ืœ
ืžื“ื™ ืคืขื ื™ืฉ ืฆื•ืจืš ืœืขืฉื•ืช ืžืฉื”ื• ื™ื•ืชืจ ืžืกื•ื‘ืš. Makepp ืžืกืคืง ื™ื•ืชืจ
ืชื—ื‘ื™ืจ ืจื‘ ืขื•ืฆืžื”: ื”ืกืขื™ืฃ ":foreach" ืขื‘ื•ืจ ื”ื›ืœืœ.

target_expression: dependency_expression: ืขื‘ื•ืจ ืจืฉื™ืžืช ืงื‘ืฆื™ื
ืคืขื•ืœื•ืช

ื”ืกื•ื’ ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ ืฉืœ ื›ืœืœ ืœื›ืœ ืื—ื“ ื”ื•ื ืจืง ื›ืœืœ ื“ืคื•ืก ืฉื”ื™ื™ืฉื•ื ืฉืœื• ืžื•ื’ื‘ืœ
ืœืจืฉื™ืžื” ืกืคืฆื™ืคื™ืช ืฉืœ ืงื‘ืฆื™ื. ืœื“ื•ื’ืžื”, ื ื ื™ื— ืฉื™ืฉ ืœืš ื›ืœืœ ื“ืคื•ืก ืฉืื•ืžืจ
makepp ืื™ืš ืœืงืžืคืœ ื”ื›ืœ .c ืงื‘ืฆื™ื. ืขื ื–ืืช, ื™ืฉ ืœืš ืจืฉื™ืžื” ืฉืœ .c ืงื‘ืฆื™ื ืฉืขื‘ื•ืจื ืืชื”
ืจื•ืฆื” ืœืขืฉื•ืช ืžืฉื”ื• ืื—ืจ. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืžืฉื”ื• ื›ื–ื”:

# ื”ื ื” ื”ื›ืœืœ ืฉื—ืœ ืขืœ ื”ื›ืœ:
%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

%.o : %.c : foreach $(SPECIAL_MODULES)
$(CC) $(SPECIAL_CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

ืฉื™ืžื•ืฉ ืขื•ืฆืžืชื™ ืขื•ื“ ื™ื•ืชืจ ื‘ื›ืœืœื™ื ืฉืœ ื›ืœ ืื—ื“ ืžื ืฆืœ ืืช ื”ืขื•ื‘ื“ื” ืฉื”ืžืฉืชื ื”
"$(foreach)" ืžื•ื’ื“ืจ ื‘ืชื•ืจื• ืœื›ืœ ืงื•ื‘ืฅ ื”ืชื•ืื ืœืจืฉื™ืžืช ื”ืงื‘ืฆื™ื ื•ืœืžื˜ืจื” ื•
ื‘ื™ื˜ื•ื™ื™ ืชืœื•ืช ืžื•ืขืจื›ื™ื. ืจืฉื™ืžืช ื”ืงื‘ืฆื™ื ืขืฉื•ื™ื” ืœื”ื›ื™ืœ ืชื•ื•ื™ื ื›ืœืœื™ื™ื, ื•ืืœื”
ืœื”ืชืื™ื ืืคื™ืœื• ืงื‘ืฆื™ื ืฉืขื“ื™ื™ืŸ ืœื ืงื™ื™ืžื™ื ืื‘ืœ ืฉื ื™ืชืŸ ืœื‘ื ื•ืช (ืจืื” "ืชื•ื•ื™ื ื›ืœืœื™ื™ื" ื‘
makepp_rules).

ื–ื”ื• ืชื—ื‘ื™ืจ ืœื ืžื ื•ื”ืœ ืื‘ืœ ื”ื•ื ื’ืžื™ืฉ ื‘ื™ื•ืชืจ, ื‘ื’ืœืœ ื”ืžืฉืชื ื” "$(foreach)".
ืขืฉื•ื™ ืœื”ื•ืคื™ืข ื‘ื›ืœ ื“ืจืš ื‘ื‘ื™ื˜ื•ื™. ืจืืฉื™ืช, ืฉื™ื ืœื‘ ืฉื›ืœืœื™ ื”ื“ืคื•ืก ื”ื ืœืžืขืฉื” ื
ืžืงืจื” ืžื™ื•ื—ื“ ืฉืœ ื›ืœืœื™ื ืžืงื“ื™ืžื™ื; ื›ืœืœ ื”ื“ืคื•ืก

%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

ืฉื•ื•ื” ื‘ื“ื™ื•ืง ืœ:

$(patsubst %.c, %.o, $(foreach)) : $(foreach) : foreach *.c
$(CC) $(CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

(ืœืžืขืฉื”, ื–ื” ื”ื•ืžืจ ื‘ืขืจืš ืœื–ื” ืคื ื™ืžื™.)

ื›ื“ื•ื’ืžื” ืœืื•ืคืŸ ืฉื‘ื• ืืชื” ืžืฉืชืžืฉ ื‘ืกืขื™ืฃ ":foreach" ืฉื‘ื• ื›ืœืœ ื“ืคื•ืก ืื™ื ื•
ืžืกืคื™ืง, ื ื ื™ื— ืฉื™ืฉ ืœืš ื›ืžื” .c ืงื‘ืฆื™ื ืฉื ื‘ื ื™ื ื‘ืืžืฆืขื•ืช ืื™ื–ืฉื”ื• ืžืขื‘ื“ ืงื“ื
ืืฉืจ ืœื•ืงื— ื›ืงื‘ืฆื™ ืงืœื˜ ืขื a .k ืกื™ื•ืžืช. ืืชื” ืจื•ืฆื” ืœื”ืจื›ื™ื‘ ืื•ืชื .c ืงื‘ืฆื™ื ืขื ื
ืงื‘ื•ืฆื” ืฉื•ื ื” ืฉืœ ืืคืฉืจื•ื™ื•ืช ื”ื™ื“ื•ืจ ืžื”ืจื’ื™ืœ .c ืงื‘ืฆื™ื ืฉื”ื ืžืงื•ืจ ืจื’ื™ืœ
ืงื‘ืฆื™ื. ืืชื” ื™ื›ื•ืœ ืœืขืฉื•ืช ืžืฉื”ื• ื›ื–ื”:

# ื›ืœืœ ืขื‘ื•ืจ ืงื‘ืฆื™ โ€Ž.c ืจื’ื™ืœื™ื:
%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

# ื›ืœืœ ืœื™ืฆื•ืจ ืงื‘ืฆื™ .c ืžืงื‘ืฆื™ .k:
%.c : %.k
$(ืงื“ื ืžืขื‘ื“) $(ืงืœื˜) > $(ืคืœื˜)

# ื›ืœืœื™ ื‘ื ื™ื™ื” ืžื™ื•ื—ื“ื™ื ืขื‘ื•ืจ ืงื‘ืฆื™ .c ืืฉืจ ืขืฉื•ื™ื™ื ืžืงื‘ืฆื™ .k:
$(foreach:%k=%.o) : $(foreach:%c=%.k) : foreach *.k
$(CC) $(SPECIAL_CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

(ื–ื” ืžืฉืชืžืฉ ื‘ืชื—ื‘ื™ืจ ื”ื”ืชื™ื™ื—ืกื•ืช ืœื”ื—ืœืคื” ืžืขื˜ ื™ื•ืชืจ ืชืžืฆื™ืชื™ืช ื‘ืžืงื•ื ืงื•ืจื
"patsubst" ื‘ืžืคื•ืจืฉ.)

ืฉื™ื ืœื‘ ืฉืื ื›ืœ ืžื” ืฉืืชื” ืจื•ืฆื” ืœืขืฉื•ืช ื”ื•ื ืœืฉื ื•ืช ืืช ื”ืขืจืš ืฉืœ ืžืฉืชื ื” ("CFLAGS" ื‘ื–ื”
ื‘ืžืงืจื”) ืœืคืขืžื™ื ื ื•ื— ื™ื•ืชืจ ืœื”ืฉืชืžืฉ ื‘ืžืฉืชื ื™ื ืกืคืฆื™ืคื™ื™ื ืœื™ืขื“.

ืžื•ึนืจึถืฉืึถืช ืกึดื™ื•ึนืžึถืช ื›ืœืœื™
ืขื‘ื•ืจ ืชืื™ืžื•ืช ืœืื—ื•ืจ, makepp ืชื•ืžืš ื‘ื›ืœืœื™ ื”ืกื™ื•ืžืช ื‘ืกื’ื ื•ืŸ ื”ื™ืฉืŸ.

.suffix1.suffix2:
ืคืขื•ืœื•ืช

ืฉื•ื•ื”

%.suffix2: %.suffix1
ืคืขื•ืœื•ืช

ืื‘ืœ ื”ืจื‘ื” ื™ื•ืชืจ ืงืฉื” ืœื–ื›ื•ืจ. (ืื™ื–ื• ืกื™ื•ืžืช ืงื•ื“ื?) ื‘ื“ืจืš ื›ืœืœ ื™ื•ืคื™ืข ื›ืœืœ
ื‘-makefile ืžื“ื•ืจ ืงื•ื“ื ื›ืžื• ื–ื”:

.ืฉื™ืชื•ืฃ:
$(CC) $(CFLAGS) -c $*.c -o $*.o

ืฉืžืงื‘ื™ืœ ื‘ื“ื™ื•ืง ืœ

%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

ืžืชื ื’ืฉ ื›ืœืœื™
ื›ืืฉืจ ื™ืฉ ื™ื•ืชืจ ืžื“ืจืš ืื—ืช ืœื™ืฆื•ืจ ืงื•ื‘ืฅ, makepp ืžืฉืชืžืฉ ื‘ื”ืœื™ืš ืคืฉื•ื˜ ื›ื“ื™
ืœืงื‘ื•ืข ื‘ืื™ื–ื” ื›ืœืœ ืœื”ืฉืชืžืฉ.

ยท ื–ื•ื”ื™ ืฉื’ื™ืื” ืฉื™ืฉ ื›ืœืœื™ื ืžืคื•ืจืฉื™ื ืกื•ืชืจื™ื ืœื‘ื ื™ื™ืช ืงื•ื‘ืฅ.

ยท ื—ื•ืงื™ ื“ืคื•ืก ื•ื›ืœืœื™ื ืžืงื“ื™ืžื™ื ืขื ืชื•ื•ื™ื ื›ืœืœื™ื™ื ืœืขื•ืœื ืื™ื ื ืขื•ืงืคื™ื ื›ืœืœื™ื ืžืคื•ืจืฉื™ื. ืœื›ืŸ
ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื›ืœืœื™ื ืžืคื•ืจืฉื™ื ื›ื“ื™ ืœืฆื™ื™ืŸ ื—ืจื™ื’ื™ื ืขื‘ื•ืจ ื›ืœืœื™ ื“ืคื•ืก. (ืฉื™ื ืœื‘ ืฉืคืฉื•ื˜
ืฉื™ืžื•ืฉ ื‘ืกืขื™ืฃ ":foreach" ืื™ื ื• ื”ื•ืคืš ืžืฉื”ื• ืœื›ืœืœ ื“ืคื•ืก. ื—ื™ื™ื‘ ืœื”ื™ื•ืช ื‘ื• ื
ืชื• ื›ืœืœื™ (ื›ืžื• "*" ืื• "?") ื›ื—ืœืง ืžืฉื ื”ืงื•ื‘ืฅ ื‘ืกืขื™ืฃ ":foreach". ืื ื–ื”
ืจืง ืจืฉื™ืžื” ืžืคื•ืจืฉืช ืฉืœ ืงื‘ืฆื™ื, ื”ื™ื ืžื˜ื•ืคืœืช ื›ื›ืœืœ ืžืคื•ืจืฉ ืขื‘ื•ืจ ื›ืœ ืื—ื“ ืžื”ื
ืงื‘ืฆื™ื.)

ยท ื›ืืฉืจ ื—ื•ืงื™ ื“ืคื•ืก ืกื•ืชืจื™ื ืžื’ื™ืขื™ื ืžืงื‘ืฆื™ makefile ืฉื•ื ื™ื, ื›ืœืœื™ื ืž"ืงืจื•ื‘ ื™ื•ืชืจ"
makefiles ืขื•ืงืคื™ื ื—ื•ืงื™ื ืžืงื‘ืฆื™ makefile "ืจื—ื•ืงื™ื ื™ื•ืชืจ". "ืงืจื•ื‘ ื™ื•ืชืจ" ืคื™ืจื•ืฉื• ืฉื”-makefile
ืžืžื•ืงื ืงืจื•ื‘ ื™ื•ืชืจ ืœื™ืขื“ ื‘ื”ื™ืจืจื›ื™ื™ืช ื”ืกืคืจื™ื•ืช (ื›ืœื•ืžืจ, ืฉื ื”ืงื•ื‘ืฅ ืฉืœ
target ื™ื—ืกื™ืช ืœืกืคืจื™ื™ื” ืฉืžืžื ื” ืžื•ืคืขืœ makefile ืงืฆืจ ื™ื•ืชืจ). ืื ื–ื”
ืœื ืžื‘ื“ื™ืœ ื‘ื™ืŸ ื”-makefile, ืื– ื”ื›ืœืœ ืžื”-makefile ืฉื ื˜ืขืŸ
ื ืขืฉื” ืฉื™ืžื•ืฉ ืื—ืจื•ืŸ.

ืžืฉืžืขื•ืช ื”ื“ื‘ืจ ื”ื™ื ืฉืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ื›ืœืœ ื“ืคื•ืก ื”ื—ืœ ืขืœ ื›ืœ ื”ืงื‘ืฆื™ื ืฉืœืš
ืขืฅ ื”ืกืคืจื™ื•ืช ื›ื•ืœื• ืจืง ื‘ืงื•ื‘ืฅ ื”-make ื‘ืจืžื” ื”ืขืœื™ื•ื ื”, ืื‘ืœ ืื– ืืชื” ื™ื›ื•ืœ ืœืขืงื•ืฃ ืื•ืชื•
ืงื•ื‘ืฅ makefile ื‘ืจืžื” ื ืžื•ื›ื” ื™ื•ืชืจ. ืœื“ื•ื’ืžื”, ืงื•ื‘ืฅ ื”-makefile ื‘ืจืžื” ื”ืขืœื™ื•ื ื” ืฉืœืš ื™ื›ื•ืœ ืœื”ื›ื™ืœ:

%.o : %.c : foreach **/*.c
$(CC) $(CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

ื•ื™ื›ื•ืœ ืœื”ื™ื•ืช ืœืš ืงื•ื‘ืฅ makefile ื‘ืื—ืช ืžืชื™ืงื™ื•ืช ื”ืžืฉื ื” ืฉืื•ืžืจ:

%.o : %.c
$(CC) $(SPECIAL_CFLAGS) -c $(ืงืœื˜) -o $(ืคืœื˜)

ยท ื›ืœืœื™ ื“ืคื•ืก ื‘ืขืœื™ ืฉืจืฉืจืช ืžืกืงื ื•ืช ืงืฆืจื” ื™ื•ืชืจ ืžื•ืขื“ืคื™ื ืขืœ ืคื ื™ ื“ืคื•ืก ืื—ืจ
ื›ืœืœื™ื. ืœื“ื•ื’ืžื”, ืื ื”ื™ื• ืœืš ืืช ื”ื›ืœืœื™ื ื”ื‘ืื™ื (ื‘ื”ืชื‘ืกืก ืขืœ ื“ื•ื’ืžื” ืžื”-
ืœื™ื‘ืช ืœื™ื ื•ืงืก):

%.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" ื‘ืืžืฆืขื•ืช ื”ื›ืœืœ ื”ืื—ืจื•ืŸ. ื”ื›ืœืœ ื”ืื—ืจื•ืŸ ืขื“ื™ืฃ ื›ื™ ื™ืฉ ืคื—ื•ืช
ืฉืœื‘ื™ื ื‘ืฉืจืฉืจืช ื”ื”ืกืงื” (ืื—ื“ ื‘ืžืงื•ื ืฉื ื™ื™ื).

ยท ื›ืœืœื™ ื“ืคื•ืก ืžืื•ื—ืจ ื™ื•ืชืจ ื‘-makefile ืขื•ืงืคื™ื ื›ืœืœื™ ื“ืคื•ืก ืžื•ืงื“ื ื™ื•ืชืจ. (ื–ื”
ืœืื—ื•ืจ ืž-GNU make.) ื–ื” ืื•ืžืจ ืฉืืชื” ืฆืจื™ืš ืœืฉื™ื ืืช ื”ื›ืœืœื™ื ื”ื›ืœืœื™ื™ื ื™ื•ืชืจ ืฉืœืš
ืžื•ืงื“ื ื™ื•ืชืจ, ื•ื”ื›ืœืœื™ื ื”ืกืคืฆื™ืคื™ื™ื ื™ื•ืชืจ ืฉืœืš ืžืื•ื—ืจ ื™ื•ืชืจ. ืœื“ื•ื’ืžื”,

%.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" ืื• ื”ืคืงื•ื“ื” "--build-cache".
ืืคืฉืจื•ืช ืงื•, ืื ื‘ื›ืœืœ, ืขื‘ื•ืจ ื›ืœืœ ื–ื”. ืจืื” makepp_build_cache ืœืคืจื˜ื™ื ืขืœ build
ืžื˜ืžื•ื ื™ื.

ืื ืืชื” ืžืฆื™ื™ืŸ "ืœืœื" ื‘ืžืงื•ื ื ืชื™ื‘, ืืชื” ืžืฉื‘ื™ืช ืืช ืžื˜ืžื•ืŸ ื”ื‘ื ื™ื™ื” ืขื‘ื•ืจ ื–ื”
ื›ืœืœ ืžืกื•ื™ื. ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื™ืžื•ืฉื™ ื›ื“ื™ ืœืžื ื•ืข ื‘ื–ื‘ื•ื– ืฉื˜ื— ื“ื™ืกืง ืขืœ ืงื‘ืฆื™ื ืฉืืชื”
know ืื™ื ื ืฉื™ืžื•ืฉื™ื™ื ืœืื—ืกื•ืŸ ื‘ืžื˜ืžื•ืŸ, ื’ื ืžืฉื•ื ืฉืืชื” ื‘ื˜ื•ื— ืžืื•ื“ ืฉื”ื ืœืขื•ืœื ืœื ื™ื”ื™ื•
ื‘ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ืื• ื‘ื’ืœืœ ืฉื”ื ื‘ื ื•ื™ื™ื ื›ืœ ื›ืš ืžื”ืจ ืฉืœื ื›ื“ืื™ ืœืื—ืกืŸ ืื•ืชื ื‘ืžื˜ืžื•ืŸ.

:build_check build_check_method
ื™ืขื“: ืชืœื•ืช
: build_check target_newer
ืคืขื•ืœื•ืช

ื–ื” ืื•ืžืจ ืœ-makepp ื‘ืื™ื–ื” ืืœื’ื•ืจื™ืชื ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœื”ื—ืœื™ื˜ ืื ื™ืฉ ืœื‘ื ื•ืช ืžื—ื“ืฉ ืืช ื”ืžื˜ืจื•ืช.
ืจืื” makepp_build_check ืœืคืจื˜ื™ื ื ื•ืกืคื™ื. ื–ื” ืขื•ืงืฃ ืืช ื”ื”ืฉืคืขื” ืฉืœ
ื”ืฆื”ืจืช "build_check" ืื• ืืคืฉืจื•ืช ืฉื•ืจืช ื”ืคืงื•ื“ื” "--build-check-method", ืื ื™ืฉ, ืขื‘ื•ืจ
ื”ื—ื•ืง ื”ื–ื”.

:env ืžึดืฉืึฐืชึทื ึถื” ...
ื”ื•ืกืฃ ืชืœื•ืช ื‘ืขืจื›ื™ื ืฉืœ ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ื‘ืขืœื™ ื”ืฉื. ืื ืžื™ืฉื”ื• ืžื”ื
ืฉื•ื ื” ืžื”ืžื‘ื ื” ื”ืงื•ื“ื, ืื– ื”ื™ืขื“ื™ื ื ื—ืฉื‘ื™ื ืœื ืžืขื•ื“ื›ื ื™ื, ืื ื”
ืฉื™ื˜ืช build_check ื›ืš ืžื›ืชื™ื‘ื”. (ื›ืœ ืฉื™ื˜ื•ืช ื”ื‘ื™ื ื•ื™ ื”ืžื•ื‘ื ื•ืช ืœืžืขื˜
target_newer ืชื›ื‘ื“ ืืช ื–ื”.)

VARIABLE ืขืฉื•ื™ ืœื”ื™ื•ืช ื‘ืฆื•ืจืช "ืฉื ืงื•ื‘ืฅ ื‘-PATH_VARIABLE" (ื‘ืžืจื›ืื•ืช), ื•ื‘ืžืงืจื” ื–ื”
ื™ืขื“ื™ื ื ื—ืฉื‘ื™ื ืœื ืžืขื•ื“ื›ื ื™ื ืื ื”ืกืคืจื™ื™ื” ื”ืจืืฉื•ื ื” ืžื”ื ืงื•ื“ืชื™ื™ื ืžื•ืคืจื“ืช
ื”ืขืจืš ืฉืœ PATH_VARIABLE ืฉื‘ื• ืงื™ื™ื ืฉื ื”ืงื•ื‘ืฅ ืฉื•ื ื” ืžื”ืžื‘ื ื” ื”ืื—ืจื•ืŸ.
ื–ื” ื™ื›ื•ืœ ืœืฉืžืฉ ื›ื“ื™ ืœื”ื™ืžื ืข ืžื‘ื ื™ื™ื” ืžื—ื“ืฉ ืฉืœ ื”ื™ืขื“ื™ื ื›ืืฉืจ PATH_VARIABLE ืžืฉืชื ื” ื‘-
ื“ืจืš ืœื ืจืœื•ื•ื ื˜ื™ืช.

:ืœึฐืฉืึทื’ึตืจ ื”ืคืงื•ื“ื” ...
ืกื’ื•ืจ ื›ืœ ืคืขื•ืœืช ืžืขื˜ืคืช (ืืš ืœื ืคืขื•ืœื•ืช Perl ื•ื’ื ืœื ืคืงื•ื“ื•ืช Perl) ื‘-"sh -c '...'"
ื•ืชืงื“ื™ืžื• ืื•ืชื• ื‘ืคืงื•ื“ื”, ืืš ื ื ื™ื— ืฉื”ืžื˜ืจื” ืื™ื ื” ืชืœื•ื™ื” ื‘ืคืงื•ื“ื”.
ื–ื” ืฉื™ืžื•ืฉื™ ืื ื‘ืจืฆื•ื ืš ืœืฉืœื•ื— ืคืขื•ืœื•ืช ืœืžืขืจื›ืช ืชื•ืจ ืขื‘ื•ื“ื”, ืืš ื”ืชื•ืฆืื” ื”ื™ื
ื”ื”ื ื—ื” ื”ื™ื ืฉืื™ื ื” ืชืœื•ื™ื” ื‘ืคืจืžื˜ืจื™ื ืฉืœ ืชื•ืจ, ื›ืžื• ื’ื ืื ื”ืชื•ืจ
ื”ืžืขืจื›ืช ืžืฉืžืฉืช ื‘ื›ืœืœ.

:ืœึดื›ืœื•ึนืœ file_or_pattern
ื”ื›ืœืœ ืžืฉืชื ื” ื‘ื”ืชืื ืœืžื”ื“ืจ:

%.o : %.c
: ื›ื•ืœืœื™ื %.d : ื—ืชื™ืžื” C
gcc -MD -c ...

%.o : %.c
: include %.u : signature C # IBM ืžืฉืชืžืฉืช ื‘ืกื™ื•ืžืช ืื—ืจืช
xlc -M -c ...

sub dependify { # ื”ืคื•ืš ืืช ื”ืคื˜ืคื•ื˜ ืฉืœ ืžื™ืงืจื•ืกื•ืคื˜ ืœืคื•ืจืžื˜ ืฉื™ืžื•ืฉื™
s/\$/\$\$/g;
s/(ื”ืขืจื”: ื›ื•ืœืœ ืงื•ื‘ืฅ: *)?(.+?)\r?\n/$1 ? "'$2' " : "'".f_output()."': "/e;
}
%.o : %.c
: ื›ื•ืœืœื™ื %.d : ื—ืชื™ืžื” C
cl -showIncludes -c ... >$(stem).d
&sed &dependify -o +<$(stem).d

ื›ืžื” ืžื”ื“ืจื™ื (icc ืฉืœ ืื™ื ื˜ืœ ื‘ื“ื™ื•ืง ื›ืžื• gcc ืœืžืขืœื”, ืื• xlc ืฉืœ ื™ื‘ืž) ื™ื›ื•ืœื™ื ืœื™ื™ืฆืจ ืชืœื•ืช
ืงื‘ืฆื™ื ืชื•ืš ื›ื“ื™ ืชื ื•ืขื”. ื›ืœื•ืžืจ, ื‘ื–ืžืŸ ืฉื”ื ืงื•ืžืคื™ืœื™ื, ื”ื ื›ื•ืชื‘ื™ื makefile ืฉ-makepp ื™ื›ื•ืœ
ืœึดื›ืœื•ึนืœ. ื”ื™ืชืจื•ืŸ ืขืœ ื”ืกื•ืจืง ืฉืœ makepp ื”ื•ื ืฉื”ื•ื ืžื•ื‘ื˜ื— ื‘-100%
ื ื›ื•ืŸ, ืื™ืคื” ืฉืจืง ื ืชืงืจื‘.

ืืคืฉืจื•ืช ื–ื• ืจื•ืชืžืช ื–ืืช ื‘ืฆื•ืจื” ืžื™ื•ื—ื“ืช: ืื ื”ืงื•ื‘ืฅ ืื™ื ื• ืงื™ื™ื, ื›ืœื•ืžืจ
ื‘ื“ืจืš ื›ืœืœ ื‘ื‘ื ื™ื™ื” ื”ืจืืฉื•ื ื”, ืžืชืจื—ืฉืช ืกืจื™ืงื” ืจื’ื™ืœื”. ืื‘ืœ ืื ื”ืงื•ื‘ืฅ ืงื™ื™ื, ืœื
ืžืชืจื—ืฉืช ืกืจื™ืงื” (ื•ืœื›ืŸ ืื ื• ืžืฆื™ื™ื ื™ื ื—ืชื™ืžื” ื—ื›ืžื” ืœืžืขืœื” -- ืœื ื ืคื™ืœื•ืช ืกืจื™ืงื”
ื—ื–ืจื” ืœื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื”ืžื˜ื•ืžื˜ืžืช ืฉืœ ื—ื•ืชืžืช ื–ืžืŸ ื•ื’ื•ื“ืœ). ื‘ืžืงื•ื ื–ืืช ื”ื•ื ื›ื•ืœืœ ืืช ื”ืงื•ื‘ืฅ, ืœืคื ื™
ื‘ื™ืฆื•ืข ื”ื›ืœืœ. ืœืื—ืจ ื‘ื™ืฆื•ืข ืžื•ืฆืœื— ืฉืœ ื”ื›ืœืœ, ื”ื•ื ืฉื•ื›ื— ืžื” ืฉืœื ื™ื”ื™ื”
ืงืจื ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื‘ื”ืชื—ืฉื‘ ื‘ื›ืš ืฉื”ืงื•ื‘ืฅ ื”ื™ื” ืžื™ื•ืฉืŸ. ื‘ืžืงื•ื ื–ื” ื›ืชื•ื‘
ื”ืงื•ื‘ืฅ ืฉื•ื‘, ืื ื”ื•ื ื”ืฉืชื ื”, ืขื‘ื•ืจ ืžื™ื“ืข ื‘ื ื™ื™ื” ืžืขื•ื“ื›ืŸ.

ืื–ื”ืจื”: ื–ื” ืžื˜ื‘ืขื• ืœื ืืžื™ืŸ. ืงื•ื‘ืฅ ื”ืชืœื•ืช ืžื™ื•ืฆืจ ืขืœ ื™ื“ื™ ื”ืžืื•ื“
ื›ืœืœ ืฉืขื‘ื•ืจื• ืžื“ื•ื‘ืจ ื‘ืชืœื•ืช. ืžืฆื“ ืฉื ื™, ื”ืžื”ื“ืจ ื™ื•ื“ืข ืขืœ ื”ื›ืœ
ื–ื” ื›ื•ืœืœ ืžืฉื ื” ืคื ื™ืžื™, ืฉืžืงืืค ื‘ื“ืจืš ื›ืœืœ ืžืชืขืœื ืžืžื ื•. ื–ื•ื”ื™ ืืžื™ื ื•ืช
ื™ืชืจื•ืŸ ืจืง ืœืžืงืจื” ืฉื‘ื• ืชื™ืงื•ืŸ ืžื”ื“ืจ ืžืชืงืŸ ืจืง ืืช ื”ืžืฉื ื” ื›ื•ืœืœ. ื”
ื”ืžื—ื™ืจ ื”ื•ื ืฉ-makepp ืžืกืชื›ืœ ืขืœ ื”ืจื‘ื” ื™ื•ืชืจ ืงื‘ืฆื™ื, ื•ื–ื” ืœื•ืงื— ื–ืžืŸ.

ื™ืฉ ืžืœื›ื•ื“ ื›ืืฉืจ ืืชื” ืžืกื™ืจ ืžืฉืคื˜ "#include". ื• ื”ืงื•ื‘ืฅ ื”ืžืชืื™ื:
ื–ื” ืขื“ื™ื™ืŸ ื™ื•ื–ื›ืจ ื‘ืงื•ื‘ืฅ ื”ืชืœื•ืช ืžื”ืคืขื ื”ืื—ืจื•ื ื”, ื›ืฉื”ื™ื ื”ื™ื™ืชื”
ื ึธื—ื•ึผืฅ. ื‘ืžืงืจื” ื›ื–ื” ืขืœื™ืš ืœืขืจื•ืš ืืช ืงื•ื‘ืฅ ื”ืชืœื•ืช ื›ื“ื™ ืœื”ืกื™ืจ ืืช ื”ืชืœื•ืช
ืฉื›ื‘ืจ ืœื ื ื™ืชืŸ ืœืžื™ืžื•ืฉ.

ืœื ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืชื›ื•ื ื” ื–ื• ืขื ืžื˜ืžื•ืŸ ื‘ื ื™ื™ื” ื‘ื’ืœืœ ืฉืœื™ืคืช ืงื•ื‘ืฅ ืžืฉื
ื“ื•ืจืฉ ืœื“ืขืช ื”ื›ืœ ืขืœ ื”ืงื•ื‘ืฅ. ืื‘ืœ ืงื•ื‘ืฅ ืชืœื•ืช ืชืœื•ื™ ื‘ืืœื”
ืงื‘ืฆื™ื makepp ืœื•ืžื“ ืขืœ ื™ื“ื™ ืงืจื™ืืชื. ืชืœื•ืช ืžืขื’ืœื™ืช ื›ื–ื• ืื™ื ื” ืจื’ื™ืœื”
ืืคืฉืจื™ ื‘ืžืขืจื›ืช ื‘ื ื™ื™ื” ืืžื™ื ื”. ื–ื” ื—ืจื™ื’ ื›ื™ ืœืื—ืจ ื‘ื ื™ื™ื” ืžื—ื“ืฉ
ื•ืงืจื™ืื” ื—ื•ื–ืจืช ืฉืœ ืงื•ื‘ืฅ ืชืœื•ืช ื”ื›ืœ ืฉื•ื‘ ืชืงื™ืŸ.

ืื ืชื‘ื ื” ื‘ืžืื’ืจื™ื ืฉืœืš, makepp ื™ืืกื•ืฃ ืืช ืงื•ื‘ืฅ ื”ืชืœื•ืช ืžื”-
ืžืื’ืจ ืจืืฉื•ืŸ ืฉืžื›ื™ืœ ืื—ื“. ื–ื” ื‘ื ื™ื’ื•ื“ ืœืงื‘ืฆื™ื ืื—ืจื™ื, ืฉื‘ื”ื ื–ื” ืœื•ืงื— ืืช ื”-1
ืขื ื”ื—ืชื™ืžื” ื”ืฆืคื•ื™ื”. ื–ื” ืขื“ื™ืฃ ืžืืฉืจ ืœื‘ื ื•ืช ืžื˜ืžื•ื ื™ื, ืฉื ืžื—ื•ืกืจ
ื—ืชื™ืžื”, ื–ื” ืืคื™ืœื• ืœื ื™ื›ื•ืœ ืœืžืฆื•ื ืืช ื”ืงื•ื‘ืฅ.

:ื”ื”ื–ื“ืžื ื•ืช ื”ืื—ืจื•ื ื”
ืืคืฉืจ ื›ืœืœ ืคืชื•ื—, ื›ื’ื•ืŸ

%.foo foo%.bar: :last_chance
&echo $@ -o $@
&cp $(ืคืœื˜ื™ื)

ืžื›ื™ื•ื•ืŸ ืฉื›ืœืœ ื›ื–ื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืžืกืคืจ ืื™ื ืกื•ืคื™ ืฉืœ ืžื˜ืจื•ืช,
ื™ืขื“ ืฉืœ ื›ืœืœ ื–ื” ืœื ื™ืชืื™ื ืœืคื•ื ืงืฆื™ื” $(ืชื• ื›ืœืœื™) ืื• ื›ืœืœ ื“ืคื•ืก ืืœื ืื ื›ืŸ
ืžืฉื”ื• ืื—ืจ ื›ื‘ืจ ื‘ื™ืฆืข ืืช ื”ื›ืœืœ ืขืœ ื™ื“ื™ ื”ืคื ื™ื” ืกืคืฆื™ืคื™ืช ืœืžื˜ืจื”.
ื™ืชืจ ืขืœ ื›ืŸ, ืื ืฆื•ื™ืŸ "--rm-stale", ืื– ืžื˜ืจื” ืฉื ืฉืืจื” ืžืงื•ื“ืžืชื”
makepp run ื™ื™ืจืื” ืžืขื•ืคืฉ ืื ื”ื“ืจืš ื”ื™ื—ื™ื“ื” ืœื‘ื ื•ืช ืื•ืชื• ื”ื™ื ื‘ืืžืฆืขื•ืช ื›ืœืœ last_chance
ืฉืขื“ื™ื™ืŸ ืœื ื‘ื•ืฆืข ืขื‘ื•ืจ ื”ื™ืขื“, ื•ื–ื• ื”ืชื ื”ื’ื•ืช ืจืฆื•ื™ื” ืžื›ื™ื•ื•ืŸ
ื”-build ื™ื™ื›ืฉืœ ื‘ืื•ืคืŸ ืขืงื‘ื™ ื™ื•ืชืจ ื›ืืฉืจ ื”ื•ื ืžืกืชืžืš ื‘ื˜ืขื•ืช ืขืœ ืชื•ื•ื™ื ื›ืœืœื™ื™ื ืœื—ื™ืคื•ืฉ
ืœื”ืชืื™ื ื™ืขื“ื™ื ืžืจื™ืฆื” ืงื•ื“ืžืช.

ื”ืืคืฉืจื•ืช ":last_chance" ื ื•ืขื“ื” ืœื”ืกื‘ ืชืฉื•ืžืช ืœื‘ ืœื”ืชื ื”ื’ื•ืช ื”ืžื™ื•ื—ื“ืช ืฉืœ ื”-
ื›ืœืœ ื‘ื™ื—ืก ืœืชื•ื•ื™ื ื›ืœืœื™ื™ื ืชื•ืืžื™ื.

: ืžื ืชื— ืžื ืชื—
ื–ื” ืื•ืžืจ ืœ-makepp ื›ื™ืฆื“ ืœื ืชื— ืืช ื”ืคืงื•ื“ื” ืœื–ื™ื”ื•ื™ (ื›ืœื•ืœ) ืงื‘ืฆื™ื. ื‘ึผึฐื“ึถืจึถืš ื›ึผึฐืœึทืœ,
makepp ืžื ื—ืฉ ื›ื™ืฆื“ ืœืขืฉื•ืช ื–ืืช ืขืœ ืกืžืš ื”ืžื™ืœื™ื ื‘ืคืงื•ื“ื” ืขืฆืžื” (ืจืื”
makepp_scanning ืœืคืจื˜ื™ื). ืขื ื–ืืช, ืื makepp ืžื ื—ืฉ ืœื ื ื›ื•ืŸ, ืื•ืœื™ ื›ื“ืื™
ืฆื™ื™ืŸ ื‘ืžืคื•ืจืฉ ืืช ื”ืžื ืชื—, ื›ืš:

%.o: %.abc
: ืžื ืชื— c_compilation
ืคืขื•ืœื” ื›ืืŸ

ื–ื” ื’ื•ืจื ืœ-makepp ืœื‘ืฆืข ืืช ืื•ืชื• ื ื™ืชื•ื— ื•ืกืจื™ืงื” ืฉื”ื•ื ืขื•ืฉื” ืขื‘ื•ืจ C/C++
ืœื‘ื ื•ืช ืคืงื•ื“ื•ืช, ื’ื ืื ื”ื•ื ืœื ืžื–ื”ื” ืืช ื”ืคืขื•ืœื” ื›ืงื•ืžืคื™ืœืฆื™ื” C.

ืžื ืชื— ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ืชืœื•ื™ ื‘ืคืงื•ื“ื”. ืื ืœื ืชืฆื™ื™ืŸ ืืคืฉืจื•ืช ":parser",
ืœืื—ืจ ืžื›ืŸ ื ื‘ื“ืงืช ื”ืžื™ืœื” ื”ืจืืฉื•ื ื” ืฉืœ ื›ืœ ืคืงื•ื“ื”. ืœืžืฉืœ ืœืงื•ืžืคื™ืœืฆื™ื” ืื• ืงื™ืฉื•ืจ
ื”ืคืงื•ื“ื”, makepp ื™ืฉืชืžืฉ ื‘ืžื ืชื— "c_compilation"; ืื• ืื ื”ืคืงื•ื“ื” ื ืจืื™ืช ื›ืžื•
ื’ืจืกื” ืฉืœ GNU, "gcc_compilation". ืื ืœื ื ืžืฆื ืžื ืชื— ื”ื•ื ืžืฉืชืžืฉ ื‘ืžื ืชื— "ืœืœื". ืœ
ืคืจื˜ื™ื ื ื•ืกืคื™ื ืขืœ ื–ื”, ืื• ืื ืืชื” ืจื•ืฆื” ืœื›ืชื•ื‘ ืžื ืชื— ืžืฉืœืš ืื• ืœืฉื ื•ืช ืืช ื”-makepp
ืžื ืชื—ื™ ื‘ืจื™ืจืช ืžื—ื“ืœ, ืจืื” makepp_scanning.

ืฉื™ื ืœื‘ ืฉื–ื” ื—ืœ ืขืœ ื›ืœ ืคืงื•ื“ื” ื‘ื›ืœืœ, ืฉืื•ืœื™ ื”ื™ื ืœื ืžื” ืฉืืชื” ืจื•ืฆื”:

%.o: %.c: ืžื ืชื— c-ืงื•ืžืคื™ืœืฆื™ื”
@echo 'ื‘ื ื™ื™ืช $(ืคืœื˜)'
@funny_cc...

ื–ื” ื’ื ื™ืคืจืฉ ืืช "ื”ื“" ื›ืงื•ืžืคื™ื™ืœืจ ื•ื™ืกื™ืง ืืช ื”ื˜ื™ืขื•ืŸ ืฉืœื• 'ื‘ื ื™ื™ืŸ
mymodule.o' ื›ืชืœื•ืช ืžืจื•ืžื–ืช. ื–ื” ื™ื•ื‘ื™ืœ ืœืชืœื•ื ื” ืฉื–ื”
ืœื ื™ื•ื“ืข ืื™ืš ืœื‘ื ื•ืช ืงื•ื‘ืฅ ื›ื–ื”. ื‘ืžืงืจื” ื–ื” ืขื“ื™ืฃ ืœืš
"register_parser". ืฉื ืืชื” ืžื•ืฆื ื”ืกื‘ืจ ืื™ืš ืžื ืชื— ื ื™ืชืŸ ืœืชืช ื’ื ื‘ืชื•ืจ ื
ืฉื ื›ื™ืชื” ืื• ื›ืฉื ืคื•ื ืงืฆื™ื”.

:ื—ึฒืชึดื™ืžึธื” ื—ืชื™ืžื”_ืฉื™ื˜ื”
ื™ืขื“: ืชืœื•ืช
: ื—ืชื™ืžื” md5
ืคืขื•ืœื•ืช

ื–ื” ืื•ืžืจ ืœ-makepp ื‘ืื™ื–ื” ืืœื’ื•ืจื™ืชื ืœื”ืฉืชืžืฉ ื›ื“ื™ ืœืงื‘ื•ืข ืื ื”ืชืœื•ืช ื”ืฉืชื ื•.
ืจืื” makepp_signatures ืœืคืจื˜ื™ื ื ื•ืกืคื™ื. ืฉื™ื˜ื•ืช ื—ืชื™ืžื” ื”ื›ืœื•ืœื•ืช ื‘-
ื”ืคืฆืช makepp ื”ื "ืจื’ื™ืœ", "md5", "C" ืื• "c_compilation_md5", ื•ื›ืŸ
"ืื•ื‘ื™ื™ืงื˜_ืžืฉื•ืชืฃ". ื–ื” ืขื•ืงืฃ ื›ืœ ืฉื™ื˜ืช ื—ืชื™ืžื” ืฉืฆื•ื™ื ื” ืขื ื”-"-m" ืื•
ืืคืฉืจื•ื™ื•ืช ืฉื•ืจืช ื”ืคืงื•ื“ื” "--signature-method", ืื• ืขื ื”ืฆื”ืจืช "ื—ืชื™ืžื”".

ืžื™ื•ื—ื“ ืชื•ื•ื™ื
Makepp ื™ื›ื•ืœ ืœืชืžื•ืš ื‘ืฉืžื•ืช ืงื‘ืฆื™ื ืฉื™ืฉ ื‘ื”ื ืชื•ื•ื™ื ืžื™ื•ื—ื“ื™ื ื›ืžื• ื ืงื•ื“ืชื™ื™ื ืื• ืจื•ื•ื—.
ื ื ื™ื—, ืœืžืฉืœ, ืืชื” ืจื•ืฆื” ืœื™ืฆื•ืจ ืงื•ื‘ืฅ ื‘ืฉื "a:thing" ืžื”ืงื•ื‘ืฅ "b:thing".
ืืชื” ืœื ื™ื›ื•ืœ ืœื›ืชื•ื‘ ืืช ื”ื›ืœืœ ื›ืš:

a:thing : b:thing # ื–ื•ื”ื™ ืฉื’ื™ืืช ืชื—ื‘ื™ืจ
&cat $(ืงืœื˜) -o $(ืคืœื˜)

ื›ื™ makepp ืœื ื™ื™ื“ืข ืื™ืœื• ื ืงื•ื“ืชื™ื™ื ืžืคืจื™ื“ื™ื ื‘ื™ืŸ ืžื˜ืจื•ืช ืœืชืœื•ืช ื•ืื™ื–ื”
ื—ืœืง ืžืฉืžื•ืช ื”ืงื‘ืฆื™ื. ื‘ืžืงื•ื ื–ืืช, ืคืฉื•ื˜ ื”ื•ืกืฃ ืืช ื”ืฉื ื‘ืžืจื›ืื•ืช, ื›ืš:

"a:thing" : "b:thing"
&cat $(ืงืœื˜) -o $(ืคืœื˜)

ื›ืขืช ื”ื›ืœืœ ื—ื“ ืžืฉืžืขื™.

ืชื—ื‘ื™ืจ ื”ืฆื™ื˜ื•ื˜ื™ื ืฉืœ Makepp ื“ื™ ื“ื•ืžื” ืœื–ื” ืฉืœ ื”ืžืขื˜ืคืช. ืืชื” ื™ื›ื•ืœ, ืœืžืฉืœ, ืœื”ืฉืชืžืฉ ื‘ืกื™ื ื’ืœ
ืžืจื›ืื•ืช ื‘ืžืงื•ื ืžืจื›ืื•ืช ื›ืคื•ืœื•ืช, ืื• ืฉืืชื” ื™ื›ื•ืœ ืœื‘ืจื•ื— ืžืชื•ื•ื™ื ืžื™ื•ื—ื“ื™ื ืขื ืงื• ื ื˜ื•ื™ ืื—ื•ืจื™:

a\:thing : 'b:thing'
&cat $(ืงืœื˜) -o $(ืคืœื˜)

ื ื ื™ื—, ืœืžืฉืœ, ืฉืฉื ื”ืงื•ื‘ืฅ ืฉืœืš ื”ื•ื "'"!;\$". ืขื›ืฉื™ื• ืœืžื” ืืชื” ืจื•ืฆื” ืฉื ืงื•ื‘ืฅ ื›ื–ื”
ืื ื™ ืœื ื™ื•ื“ืข, ืื‘ืœ ื”ื ื” ื›ืžื” ื“ืจื›ื™ื ืฉืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ ืืช ื–ื” ืœ-makepp (ื•ื”ืงืœื™ืคื”):

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

ืฉื™ืžื• ืœื‘ ืžืชื™ makepp ืจืฆื•ืขื•ืช ืฆื™ื˜ื•ื˜ื™ื ื•ืžืชื™ ื”ืงืœื™ืคื” ืขื•ืฉื” ื–ืืช. ืžื™ื™ืงืืค ืžืกืชื›ืœ
ืฆื™ื˜ื•ื˜ื™ื ืจืง ื‘ืžืงืจื™ื ื”ื‘ืื™ื:

ยท ื‘ืžืฉืคื—ืช ื”ืžื‘ื—ื ื™ื "ifeq".

ยท ืœืคื ื™ ื•ืื—ืจื™ ื ืงื•ื“ืชื™ื™ื ื”ื›ืœืœ

ยท ื‘ืคืงื•ื“ื” ืžื•ื‘ื ื™ืช ืฉืœ makepp

ยท ื‘ืคื•ื ืงืฆื™ื” ื”ื ื•ื’ืขืช ืœืงื‘ืฆื™ื

ื‘ื ื™ื’ื•ื“ ืœืžืขื˜ืคืช, makepp ืœื ืžืจื—ื™ื‘ ืžืจื›ืื•ืช ืชื•ืš ื”ืงืฆืืชืŸ ืœืžืฉืชื ื”. ืœื›ืŸ
ื”ื›ืœืœื™ื ื”ื‘ืื™ื ื–ื”ื™ื:

FILE = 'ืฉื ืขื ืจื•ื•ื—ื™ื'
x := $(ื”ื“ืคืก $(FILE)) # ืจืง ื›ื“ื™ ืœื‘ื“ื•ืง ืฉื”ืžืจื›ืื•ืช ืขื“ื™ื™ืŸ ืฉื
$(FILE): # ืžืจื›ืื•ืช ืกื‘ื™ื‘ ืงื•ื‘ืฅ ื‘ื•ื“ื“ ืฉื”ื•ืกืจ ืขืœ ื™ื“ื™ makepp
&echo hello -o$(FILE) # ืžืจื›ืื•ืช ืกื‘ื™ื‘ ืงื•ื‘ืฅ ื‘ื•ื“ื“ ืฉื”ื•ืกืจ ืขืœ ื™ื“ื™ makepp
echo there >>$(FILE) # ืžืจื›ืื•ืช ืกื‘ื™ื‘ ืงื•ื‘ืฅ ื‘ื•ื“ื“ ืฉื”ื•ืกืจ ืขืœ ื™ื“ื™ Shell
'ืฉื ืขื ืจื•ื•ื—ื™ื':
&echo hello -o'name with spaces'
echo there >>'$(output)' # ืžืจื›ืื•ืช ื”ื•ืคืฉื˜ื• ืœืžืขืœื”, ื”ื•ืกืฃ ืื•ืชื ืฉื•ื‘

ืฉื™ืžื• ืœื‘ (ื‘ื ื™ื’ื•ื“ ืœ-Shell) ืžืฉืชื ื™ื ืฉืžืชื—ื™ืœื™ื ื‘-"$" ืžื•ืจื—ื‘ื™ื ืืคื™ืœื• ื‘ืชื•ืš ืกื™ื ื’ืœ
ืฆื™ื˜ื•ื˜ื™ื. ืœื ื ื™ืชืŸ ืœื”ื’ืŸ ืขืœ ืฉืœื˜ื™ ื“ื•ืœืจื™ื ื‘ืืžืฆืขื•ืช ืžืจื›ืื•ืช ืื• ืงื•ื•ื™ื ืื—ื•ืจื™ื™ื. ื›ื“ื™ ืœืงื‘ืœ ืžื™ืœื•ืœื™ืช
ืกื™ืžืŸ ื“ื•ืœืจ, ื”ืฉืชืžืฉ ื‘ืกื™ืžืŸ ื“ื•ืœืจ ื›ืคื•ืœ, ืœืžืฉืœ,

$(ื›ืœ ืžื–ื•ื™ืฃ):
@&echo ื–ื”ื• ืกื™ืžืŸ ื“ื•ืœืจ: $$
@for val in abcd; do echo $$val; ื‘ื•ืฆืข

ื‘ืื•ืคืŸ ื›ืœืœื™, ืืชื” ืืžื•ืจ ืœื”ื™ื•ืช ืžืกื•ื’ืœ ืœื”ืชืžื•ื“ื“ ื›ืžืขื˜ ืขื ื›ืœ ื“ืžื•ืช ืžื™ื•ื—ื“ืช ืขืœ ื™ื“ื™ ืฆื™ื˜ื•ื˜ ืฉืœื”
ื‘ื“ืจืš ื›ืœืฉื”ื™. ื–ื” ื›ื•ืœืœ ืจื•ื•ื—ื™ื, ืชื•ื•ื™ ื‘ืงืจื” ื•ื›ื•'. ืขื ื–ืืช, ืฉื™ื ืœื‘ ืฉื‘-
ื‘ื”ื•ื•ื”, ื”ืคืฉื˜ืช ื”ื”ืขืจื•ืช ืฉืœ makepp ื”ื™ื ืžืขื˜ ืคืฉื˜ื ื™ืช, ื•ื›ืœ ื”ืชื•ื•ื™ื "#".
ืฉืœืคื ื™ื• ืจื•ื•ื— ืœื‘ืŸ ื™ืชืคืจืฉื• ื›ื”ืขืจื•ืช ืœื ืžืฉื ื” ืื™ืš ื”ืŸ ืžืฆื•ื˜ื˜ื•ืช.

ื›ืืฉืจ ืฉื ื™ืขื“ ืื• ืชืœื•ืช ืžื•ื›ื ืก ืœืžืฉืชื ื” ืื•ื˜ื•ืžื˜ื™ ื›ืžื• "$(ืคืœื˜)", ืื–
ื”ืžื™ืจื›ืื•ืช ื•ื›ืœ ื”ื”ื˜ื•ืช ื”ืื—ื•ืจื™ื•ืช ืžื•ืคืฉื˜ื•ืช. ื–ื” ืื•ืžืจ ืฉืื ืืชื” ืจื•ืฆื” ืœื”ืชื™ื™ื—ืก ืœ
ืฉื ื”ืงื•ื‘ืฅ ื‘ืคืขื•ืœื•ืช, ื›ื ืจืื” ืชืฆื˜ืจืš ืœืฆื˜ื˜ ืื•ืชื• ืฉื•ื‘, ื›ืš:

"ืฉื ืงื•ื‘ืฅ ืขื ืจื•ื•ื—ื™ื":
echo "ืชื•ื›ืŸ ืžื™ื•ื—ื“" > "$@"

ืื ืœื ืชืฆื™ื‘ ืืช ื”ืžื™ืจื›ืื•ืช ืกื‘ื™ื‘ $@, ื”ืžืขื˜ืคืช ืชืจืื” ืืช ื”ืคืงื•ื“ื”

echo "ืชื•ื›ืŸ ืžื™ื•ื—ื“" > ืฉื ืงื•ื‘ืฅ ืขื ืจื•ื•ื—ื™ื

ืฉื›ื•ืชื‘ืช ืืช ื”ืžื—ืจื•ื–ืช "ืฉื ืงื•ื‘ืฅ ืชื•ื›ืŸ ืžื™ื•ื—ื“ ืขื ืจื•ื•ื—ื™ื" ืœืงื•ื‘ืฅ ืฉื ืงืจื a.
ื–ื” ื›ื ืจืื” ืœื ืžื” ืฉืืชื” ืจื•ืฆื”.

ื”ืฉืชืžืฉ ื‘-makepp_rules ื‘ืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ืฉื™ืจื•ืชื™ onworks.net


ืฉืจืชื™ื ื•ืชื—ื ื•ืช ืขื‘ื•ื“ื” ื‘ื—ื™ื ื

ื”ื•ืจื“ ืืคืœื™ืงืฆื™ื•ืช Windows & Linux

  • 1
    JXplorer - ื“ืคื“ืคืŸ Java Ldap
    JXplorer - ื“ืคื“ืคืŸ Java Ldap
    ืœืงื•ื— Java LDAP ืขื ืชืžื™ื›ื” ื‘-LDIF,
    ืื‘ื˜ื—ื” (ื›ื•ืœืœ SSL, SASL ื•-GSSAPI),
    ืชื•ืจื’ื ืœืฉืคื•ืช ืจื‘ื•ืช (ื›ื•ืœืœ
    ืกื™ื ื™ืช), ืขื–ืจื” ืžืงื•ื•ื ืช, ื˜ืคืกื™ ืžืฉืชืžืฉ ื•
    ืจื‘ื™ื ืื—ืจื™ื...
    ื”ื•ืจื“ ืืช JXplorer - ื“ืคื“ืคืŸ Java Ldap
  • 2
    PosteRazor - ื”ื›ื™ื ื• ืคื•ืกื˜ืจ ืžืฉืœื›ื!
    PosteRazor - ื”ื›ื™ื ื• ืคื•ืกื˜ืจ ืžืฉืœื›ื!
    ืจื•ืฆื™ื ืœื”ื“ืคื™ืก ืคื•ืกื˜ืจ? PosterRazor ื—ืชื›ื™ื
    ืงื•ื‘ืฅ ืชืžื•ื ื” ืœื—ืชื™ื›ื•ืช ื•ืืชื” ื™ื›ื•ืœ
    ื”ื“ืคื™ืกื• ืื– ืขืœ ื”ืžื“ืคืกืช ื•ื”ื“ื‘ื™ืงื• ืื•ืชื
    ื™ื—ื“ ืœื›ืจื–ื”. ืžื‘ื•ืกืก FLTK ืงืœ
    ืœื”ืฉืชืžืฉ...
    ื”ื•ืจื“ ืืช PosteRazor - ืฆื•ืจ ืคื•ืกื˜ืจ ืžืฉืœืš!
  • 3
    Phaser
    Phaser
    Phaser ื”ื™ื ืคืชื™ื—ื” ืžื”ื™ืจื”, ื—ื™ื ืžื™ืช ื•ืžื”ื ื”
    ืžืกื’ืจืช ืžืฉื—ืง ืžืงื•ืจ HTML5 ืฉืžืฆื™ืขื”
    ืขื™ื‘ื•ื“ WebGL ื•-Canvas ืœืจื•ื—ื‘
    ื“ืคื“ืคื ื™ ืื™ื ื˜ืจื ื˜ ืฉื•ืœื—ื ื™ื™ื ื•ื ื™ื™ื“ื™ื. ืžืฉื—ืงื™ื
    ื™ื›ื•ืœ ืœื”ื™ื•ืช ืฉื•ืชืฃ...
    ื”ื•ืจื“ ืืช Phaser
  • 4
    ืžื ื•ืข VASSAL
    ืžื ื•ืข VASSAL
    VASSAL ื”ื•ื ืžื ื•ืข ืžืฉื—ืง ืœื™ืฆื™ืจื”
    ื’ืจืกืื•ืช ืืœืงื˜ืจื•ื ื™ื•ืช ืฉืœ ืœื•ื— ืžืกื•ืจืชื™
    ื•ืžืฉื—ืงื™ ืงืœืคื™ื. ื–ื” ืžืกืคืง ืชืžื™ื›ื” ืขื‘ื•ืจ
    ืขื™ื‘ื•ื“ ื•ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ื—ืœืงื™ ืžืฉื—ืง,
    ื•...
    ื”ื•ืจื“ ืืช VASSAL Engine
  • 5
    OpenPDF - Fork of iText
    OpenPDF - Fork of iText
    OpenPDF ื”ื™ื ืกืคืจื™ื™ืช Java ืœื™ืฆื™ืจื”
    ื•ืขืจื™ื›ืช ืงื‘ืฆื™ PDF ืขื LGPL ื•
    ืจื™ืฉื™ื•ืŸ ืงื•ื“ ืคืชื•ื— MPL. OpenPDF ื”ื•ื ื”
    ื™ื•ืจืฉ ื”ืงื•ื“ ื”ืคืชื•ื— LGPL/MPL ืฉืœ iText,
    ...
    ื”ื•ืจื“ ืืช OpenPDF - Fork of iText
  • 6
    SAGA GIS
    SAGA GIS
    SAGA - ืžืขืจื›ืช ืœืื•ื˜ื•ืžื˜ื™ื•ืช
    ื ื™ืชื•ื—ื™ื ื’ื™ืื•ื’ืจืคื™ื™ื - ื”ื•ื ื’ื™ืื•ื’ืจืคื™
    ืชื•ื›ื ืช ืžืขืจื›ืช ืžื™ื“ืข (GIS) ืขื
    ื™ื›ื•ืœื•ืช ืขืฆื•ืžื•ืช ืœื’ื™ืื•ื“ื˜ื”
    ืขื™ื‘ื•ื“ ื•ืื ื”...
    ื”ื•ืจื“ ืืช SAGA GIS
  • ืขื•ื“ ยป

ืคืงื•ื“ื•ืช ืœื™ื ื•ืงืก

Ad