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

Ad


OnWorks favicon

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

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

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

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

NAME


makepp_variables -- เบงเบดเบ—เบตเปƒเบŠเป‰เบ•เบปเบงเปเบ›เปƒเบ™ makepp

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


?: $*,
$+,
$/,
$<,
$?,
$@,
$^,
=,
!=,
&=,
+=,
:=,
;=,
?=, A: AR,
ARFLAGS,
AS, C: DC,
เบ—เบธเบ‡,
"changed_dependencies",
change_inputs,
CurdIR,
CXX,
CXXFLAGS, D: "เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช",
"เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช", F: F77,
FC,
"foreach", I: เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™,
เบงเบฑเบ”เบ–เบธเบ”เบดเบš, L: LD,
LEX,
LIBTOOL, M: เป€เบฎเบฑเบ”,
MAKECMDGOALS,
เป€เบ„เบทเปˆเบญเบ‡เปเบ•เปˆเบ‡เบเบฒเบ,
เบ‚เปเป‰เบกเบนเบ™,
MAKEPP_DEBUG,
เบ—เบธเบ‡,
_MAKEPPFLAGS,
MAKEPP_LN_CP,
"makepp_percent_subdir",
"makepp_require_phony",
makepp_signature_C_flat,
"makepp_simple_concatenation",
MAKEPP_VERSION, O: "เบœเบปเบ™เบœเบฐเบฅเบดเบ”",
"เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš", P: PERL,
PWD, R: RM,
เบฎเบฒเบ, S: เปเบเบฐ,
"sorted_dependencies",
sorted_inputs,
"เบฅเปเบฒ", T: เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ,
เป€เบ›เบปเป‰เบฒ เปเบฒเบ, V: VPATH, Y: YACC

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

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

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

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ เบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบ
เบ•เบปเบงเปเบ›เบชเบฒเบกเบฒเบ”เบชเบปเบกเบกเบธเบ”เบกเบนเบ™เบ„เปˆเบฒเปƒเบ™เบซเบผเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™:

ยท เบ•เบปเบงเปเบ›เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ makefile. เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”
เบ™เบตเป‰; เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰.

ยท เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เบณเบชเบฑเปˆเบ‡, เปเบšเบšเบ™เบตเป‰:

makepp CFLAGS=-O2 my_program

เบ–เป‰เบฒเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡ makefile เบ–เบทเบเป‚เบซเบฅเบ”, เบ•เบปเบงเปเบ› CFLAGS เบˆเบฐเบ–เบทเบเป€เบœเบตเบเปเบœเปˆเป„เบ›เบซเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡
makefiles. เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบ—เบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” override เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเปƒเบ”เป†เบ‚เบญเบ‡
เบ•เบปเบงเปเบ›เปƒเบ™ makefiles เปƒเบ”.

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

ยท เบ–เป‰เบฒเบ•เบปเบงเปเบ›เบ–เบทเบเบ•เบฑเป‰เบ‡เป„เบงเป‰เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ› makepp.
เบ›เบปเบเบเบฐเบ•เบดเบเบฒเบ™เบกเบญเบšเปเบฒเบเปƒเบซเป‰เบเบฑเบšเบ•เบปเบงเปเบ›เบžเบฒเบเปƒเบ™ makefile override เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบˆเบฒเบ
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เปเบ•เปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰ "-e" เบซเบผเบท "--environment-overrides"
เบ•เบปเบงเป€เบฅเบทเบญเบเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡.

เบ•เบปเบงเปเบ›เบ–เบทเบเบกเบญเบšเปเบฒเบเบ”เป‰เบงเบเปœเบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰

X = 1
เป‚เบกเบ”เบนเบ™ := abcd
CC ?= gcc
CFLAGS += -เบเบฒ
เบเปเบฒเบ™เบปเบ” VAR
var เปเบ–เบง 1
var เปเบ–เบง 2
enddef
เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบชเบปเปˆเบ‡เบญเบญเบ := $(PWD):$(PATH)
global MYPROJECT.INFO = เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเบฐเป€เบซเบฑเบ™เปƒเบ™ makefiles เบ—เบฑเบ‡เปเบปเบ”

เบเบฒเบ™เบ™เบณเปœเป‰เบฒ เปเบฅเบฐเบ–เบฑเบ”เบˆเบฒเบเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบญเป‰เบญเบกเบ„เปˆเบฒเบ•เปˆเบฒเบ‡เป†เบˆเบฐเบ–เบทเบเบ–เบญเบ”เบญเบญเบเบชเบฐเป€เปเบต.

เบœเบนเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เบ‡เปˆเบฒเบเบ”เบฒเบ เบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบ เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™

=
VARIABLE = เบ‚เปเป‰เบ„เบงเบฒเบก
override VARIABLE = เบ‚เปเป‰เบ„เบงเบฒเบก

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

X = 1
Y = $(X)
X = 2

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, "$(Y)" เบ•เปเปˆเบกเบฒเปƒเบ™ makefile เบˆเบฐเบ›เบฐเป€เบกเบตเบ™เป€เบ›เบฑเบ™ "2".

เป‚เบ”เบเบ—เบปเปˆเบงเป„เบ›เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ ":=" (เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰) เปเบ—เบ™ "=" เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™
เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ•เบปเบงเปเบ›เบ—เบตเปˆเบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เบซเบผเบฒเบเบ‚เบถเป‰เบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบตเป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™
เป€เบžเบทเปˆเบญเป€เบฅเบทเปˆเบญเบ™เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบ•เบปเบงเปเบ›. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ‚เบฝเบ™ makefile เบ—เบตเปˆเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™
backwards-compatible with some version of make other than GNU make , เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบšเปเปˆเบกเบต
เบ—เบฒเบ‡เป€เบฅเบทเบญเบ: เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ "=" เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

:=
VARIABLE := expr
override VARIABLE := expr

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบš "VARIABLE = expr" เบเบปเบเป€เบงเบฑเป‰เบ™เบ”เป‰เบฒเบ™เบ‚เบงเบฒเบกเบทเบ–เบทเบเบ›เบฐเป€เบกเบตเบ™
เบ„เบฑเป‰เบ‡เบ”เบฝเบงเปเบฅเบฐเบชเปเบฒเบฅเบฑเบšเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบกเบญเบšเบซเบกเบฒเบ. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ–เป‰เบฒ

X := 1
Y := $(X)
X := 2

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, "$(Y)" เบ•เปเปˆเบกเบฒเปƒเบ™ makefile เบˆเบฐเบ›เบฐเป€เบกเบตเบ™เป€เบ›เบฑเบ™ "1" เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆ "$(X)" เปเบกเปˆเบ™.
เป€เบกเบทเปˆเบญ "$(Y)" เบ–เบทเบเบเปเบฒเบ™เบปเบ”.

;=
VARIABLE ;= expr
override VARIABLE ;= expr

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

VAR1 ;= $(เบเบฒเบ™เบ„เบณเบ™เบงเบ™เปเบžเบ‡เบซเบผเบฒเบ)
VAR2 ;= $(เบ„เบณเบชเบฑเปˆเบ‡เบžเบฒเบเบ™เบญเบเบ‚เบญเบ‡เปเบเบฐ)

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

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

+=
VARIABLE += expr
override VARIABLE += expr

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

&=
VARIABLE &= expr
override VARIABLE &= expr

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

เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบ™เบถเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒ "CFLAGS", เบญเบฑเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบญเบฒเบ”เบˆเบฐเปƒเบชเปˆเปƒเบ™,
เบชเบฐเป€เบซเบกเบตเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "-Wall" เปเบกเปˆเบ™เบชเบญเบ‡เปเบ–เบงเบ™เบตเป‰:

CFLAGS = -O2 # เบญเบฒเบ”เบˆเบฐ overridden เปƒเบ™เปเบ–เบงเบ„เปเบฒเบชเบฑเปˆเบ‡
override CFLAGS &= -Wall # prepended unconditionally

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

เบ•เบปเบงเบ›เปˆเบฝเบ™เป„เบ”เป‰ := expr $(เบ›เปˆเบฝเบ™เป„เบ”เป‰)

?=
VARIABLE ?= expr
override VARIABLE ?= expr # เบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”, เปเบ•เปˆเบ–เบทเบเบเบปเบ”เปเบฒเบ

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

ifndef เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เป„เบ”เป‰
VARIABLE = expr
เบชเบดเป‰เบ™เบชเบธเบ”

!=
VARIABLE != เบ„เบณเบชเบฑเปˆเบ‡ shell
override VARIABLE != เบ„เบณเบชเบฑเปˆเบ‡ shell

เปเบฅเปˆเบ™เบ„เบณเบชเบฑเปˆเบ‡ Shell เปเบฅเบฐเบเบณเบ™เบปเบ”เบ•เบปเบงเปเบ›เปƒเบซเป‰เบกเบตเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ‚เบญเบ‡เบ„เบณเบชเบฑเปˆเบ‡.
เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เปเบ—เป‰โ€‹เบ—เบฝเบšโ€‹เป€เบ—เบปเปˆเบฒโ€‹เบเบฑเบš

เบ•เบปเบงเบ›เปˆเบฝเบ™เป„เบ”เป‰ := $(เบ„เบณเบชเบฑเปˆเบ‡เปเบเบฐ)

เบซเบผเบฒเบเปเบ–เบง เบ•เบปเบงเปเบ›

เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆ "เบเปเบฒเบ™เบปเบ”" เปเบกเปˆเบ™เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เบ—เบฝเบšเป€เบ—เบปเปˆเบฒเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡. เป„เบ”เป‰
operator เบซเบผเบฑเบ‡เบˆเบฒเบเบ•เบปเบงเปเบ›เปเบกเปˆเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ. เบ–เป‰เบฒเบ‚เบฒเบ”เบซเบฒเบเป„เบ›, เบกเบฑเบ™เป€เบ—เบปเปˆเบฒเบเบฑเบš "เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ›
=" . "&=" เปเบฅเบฐ "+=" เป‚เบ•เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เปƒเบ™เบ™เบฑเป‰เบ™เบžเบงเบเบกเบฑเบ™เบเบฒเบงเปƒเบชเปˆ
เบ„เปˆเบฒเป€เบเบปเปˆเบฒเบเบฑเบšเปเบ–เบงเปƒเปเปˆ, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡. เบˆเบฐเบ•เป‰เบญเบ‡เบšเปเปˆเบกเบตเบซเบเบฑเบ‡เบเบปเบเป€เบงเบฑเป‰เบ™ a
เบ„เปเบฒเบ„เบดเบ”เบ„เปเบฒเป€เบซเบฑเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™, ie เบกเบนเบ™เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบ™เปเบ–เบงเบ•เปเปˆเป„เบ›.

เบเปเบฒเบ™เบปเบ”เบ•เบปเบงเปเบ› :=
เปเบ–เบงเบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›
เปเบ–เบงเบ—เบตเบชเบญเบ‡เบ‚เบญเบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›
เปเบ–เบงเบ—เบตเบชเบฒเบกเบ‚เบญเบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›
เบชเบดเป‰เบ™เบชเบธเบ”

override เบเปเบฒเบ™เบปเบ” VARIABLE
...
enddef

เบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ "เบเปเบฒเบ™เบปเบ”" เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ "เบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบ" เบซเบผเบท "เบ—เบปเปˆเบงเป‚เบฅเบ" เปเบฅเบฐ
"เบเบปเบเป€เบฅเบตเบ".

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบ•เบปเบงเปเบ›เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบตเป€เบชเบฑเป‰เบ™เปƒเบซเบกเปˆ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบ—เบตเปˆ "เบเปเบฒเบ™เบปเบ”" เป€เบ›เบฑเบ™
เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ (เบซเบผเบทเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเป‚เบ”เบเบเบปเบ‡เปƒเบ™ Perl). ("endef" เบ–เบทเบเป€เบฅเบทเบญเบเบชเปเบฒเบฅเบฑเบš
เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš GNU เป€เบฎเบฑเบ”. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰ "enddef".) เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เบปเป‰เบ™เบ•เปเบชเปเบฒเบฅเบฑเบš
"เบฅเปเบฒเบ”เบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบเบฐเบ›เป‹เบญเบ‡", เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เบเปเบฒเบ™เบปเบ” COMPILE_C_PROGRAM
@&echo "เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก $(input)"
@$(CC) $(CFLAGS) $(CPPFLAGS) $(เบฅเบงเบกเบ—เบฑเบ‡) -c $(input) -o $(output)
เบชเบดเป‰เบ™เบชเบธเบ”

เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบซเบผเบฒเบเปเบ–เบงเบ™เบตเป‰เปƒเบ™เบซเบผเบฒเบเบเบปเบ”เบฅเบฐเบšเบฝเบš, เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

%.o : %.c
$(COMPILE_C_PROGRAM)

$(ARCH)/%.o : $(ARCH)/%.c
$(COMPILE_C_PROGRAM)

เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบฑเบเบˆเบฐเบšเบฑเบ™เบฅเบธเบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™เป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เปเบฒเบเบˆเบธเบ”เปเบ—เบ™เป€เบชเบฑเป‰เบ™เปƒเปเปˆ,
เป€เบžเบฒเบฐเบงเปˆเบฒ shell เบ•เบตเบ„เบงเบฒเบกเปเบฒเบเบงเปˆเบฒเป€เบ›เบฑเบ™เบ•เบปเบงเบ‚เบฑเป‰เบ™เบ„เบณเบชเบฑเปˆเบ‡เบ„เบทเบเบฑเบ™. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡,

COMPILE_C_PROGRAM = @echo "เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก $(input)"; \
$(CC) $(CFLAGS) $(CPPFLAGS) $(เบฅเบงเบกเบ—เบฑเบ‡) -c $(input) -o $(output)

เบˆเบฐเบกเบตเบœเบปเบ™เบ„เบทเบเบฑเบ™, เบเบปเบเป€เบงเบฑเป‰เบ™เบงเปˆเบฒ semicolon เบšเบฑเบ‡เบ„เบฑเบš Perl เบœเปˆเบฒเบ™เบกเบฑเบ™เป„เบ›เบซเบฒเปเบเบฐ,
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เปเบฒเบชเบฑเปˆเบ‡เป‚เบ”เบเบเบปเบ‡เปเบฅเบฐเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™. เบ™เบญเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ•เป‰เบญเบ‡เป„เบ”เป‰เปƒเบชเปˆเปเบ•เปˆเบฅเบฐเบ„เบปเบ™
buildin เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบชเบฐเบซเบผเบฑเบšเบเบฑเบš echo เบžเบฒเบเบ™เบญเบเปƒเบ™
เบเปเบฅเบฐเบ™เบต semicolon.

เบกเบตเบ„เบงเบฒเบกเบžเบดเป€เบชเบ”เบซเบ™เบถเปˆเบ‡เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเบžเบฒเบเปƒเบ™ "define", ie "define X :=" เบซเบผเบทเบเปˆเบฝเบงเบเบฑเบš a
เบ•เบปเบงเปเบ›เบ—เบตเปˆเป€เบ„เบตเบเป€เบ›เบฑเบ™ ":=", "define X &=" เปเบฅเบฐ "define X +=". เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ™เบตเป‰
"$(shell command ...)" เบซเบผเบท buildin "$(&command ...)" เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เบชเบฒเบเปƒเปเปˆเป€เบ›เบฑเบ™.
เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ.

เบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบ เบ•เบปเบงเปเบ› to เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบเปˆเบญเบ

เบชเบปเปˆเบ‡เบญเบญเบ VAR ...
VAR = เบชเบปเปˆเบ‡เบญเบญเบ
เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบ VAR += เบ„เปˆเบฒ

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

เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™ เบ•เบปเบงเปเบ› เปƒเบ™เบ—เบปเปˆเบง makefiles

VAR เบ—เบปเปˆเบงเป‚เบฅเบ...
global VAR = เบ„เปˆเบฒ
เบฅเบปเบšเบฅเป‰เบฒเบ‡ VAR เบ—เบปเปˆเบงเป‚เบฅเบ &= เบ„เปˆเบฒ

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

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

เบ•เบปเบงเปเบ›เบ—เบปเปˆเบงเป‚เบฅเบเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบšเบฑเบ™เบซเบฒเป„เบ”เป‰เบเบฒเบ, เป€เบžเบฒเบฐเบงเปˆเบฒ makepp เบญเบฒเบ”เบˆเบฐเป‚เบซเบผเบ” makefiles เปƒเบ™เบญเบฑเบ™เปƒเบ”เบเปเปˆเป„เบ”เป‰
เบ„เปเบฒเบชเบฑเปˆเบ‡, เบ•เบฒเบกเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบšเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบšเปเปˆเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบšเบซเบผเบท makefiles เบ–เบทเบเป‚เบซเบฅเบ”.
เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ™เบตเป‰, เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบกเบต a RootMakeppfile เปเบฅเบฐเบเบฒเบ™เป‚เบซเบผเบ”เบ—เบฑเบ‡เปเบปเบ”เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡
เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ”เบฑเบ”เปเบ›เบ‡เบซเบผเบทเปƒเบŠเป‰เบ•เบปเบงเปเบ›เบ—เบตเปˆเบกเบต "load-makefile".

GLIBLIBS เบ—เบปเปˆเบงเป‚เบฅเบ ;= $(shell pkg-config --libs glib-2.0)

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

เป€เบ›เบปเป‰เบฒเปเบฒเบเบชเบฐเป€เบžเบฒเบฐ เบงเบฝเบเบกเบญเบš เปเบฒเบ

target: VARIABLE = string
target: VARIABLE := string
target: override VARIABLE += string

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

CFLAGS := -O2

my_prog: file1.o file2.o special_file.o

special_file.o : CFLAGS := -g

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

เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบ™เบตเป‰เปเบกเปˆเบ™เบงเปˆเบฒเป„เบŸเบฅเปŒ ".c" เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ–เบทเบเบฅเบงเบšเบฅเบงเบกเบ”เป‰เบงเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš ("-O2") เบเบปเบเป€เบงเบฑเป‰เบ™
"special_file.c", เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบฅเบงเบšเบฅเบงเบกเปƒเบ™เบฎเบนเบšเปเบšเบšเบ”เบตเบšเบฑเบ ("-g"). เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบชเบฐเบ”เบงเบเบ—เบตเปˆเบˆเบฐ
เบฅเบฐเบšเบธเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบžเบฝเบ‡เปเบ•เปˆเบชเบญเบ‡เบชเบฒเบกเป„เบŸเบฅเปŒ.

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

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

test_*.o : CFLAGS += -DTEST

เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš GNU make, "%" เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปเบ—เบ™ "*".

เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ เบ›เปˆเบฝเบ™เปเบ—เบ™
เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ•เบปเบงเปเบ›เบ‚เบญเบ‡ Makepp เปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบญเบทเปˆเบ™เป†, เปเบ•เปˆเบšเบฒเบ‡เบขเปˆเบฒเบ‡
เบกเบตเบญเปเบฒเบ™เบฒเบ”เบซเบผเบฒเบ. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบฎเบฑเบ”เบ—เบฑเบ‡เปเบปเบ”, "$(CC)" เบซเบผเบท "${CC}" เบ—เบฑเบ‡เบชเบญเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡เบกเบนเบ™เบ„เปˆเบฒ
CC เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบ”เป‰. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบฑเบ™เบเบฒเบฅเบฑเบเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒ, เปƒเบชเปˆเป€เบ„เบทเปˆเบญเบ‡เบซเบกเบฒเบเป€เบ‡เบดเบ™เป‚เบ”เบฅเบฒเบชเบญเบ‡เป€เบ—เบปเปˆเบฒ ($$), เป€เบŠเบฑเปˆเบ™
เบ™เบตเป‰:

เป€เบ›เบปเป‰เบฒเปเบฒเบ: dep1 dep2 dep3 dep4
&rm -f $(เบœเบปเบ™เบœเบฐเบฅเบดเบ”)
เบชเปเบฒเบฅเบฑเบšเป„เบŸเบฅเปŒเปƒเบ™ $(เบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™); do cat $$file >> $(output); เบชเบณเป€เบฅเบฑเบ”เปเบฅเป‰เบง

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ makepp เบกเบต syntax "$[VARIABLE]", เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบญเบฑเบ™เบญเบทเปˆเบ™
เบชเบญเบ‡, เปเบ•เปˆเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ makepp groks เบซเบเบฑเบ‡เบญเบตเบเปเบ”เปˆ. เบ™เบตเป‰เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปƒเบŠเป‰เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบ—เบตเปˆเบชเบปเบกเบšเบนเบ™
เปเบฅเบฐ/เบซเบผเบทเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚:

เบเปเบฒเบ™เบปเบ” bracket_rule =
ifdef SOME_VAR
เบงเบปเบ‡เป€เบฅเบฑเบš:
&echo เบ™เบตเป‰เปเบกเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš -o $(output)
เบชเบดเป‰เบ™เบชเบธเบ”
enddef

$[bracket_rule]

เปเบšเบš rc เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™

เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, makepp เปƒเบŠเป‰เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc (เป€เบญเบตเป‰เบ™เบงเปˆเบฒเป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบšเบธเบเป€เบšเบตเบเป‚เบ”เบ
rc shell). เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ”เบตเบ—เบตเปˆเบชเบธเบ”เป‚เบ”เบเบ•เบปเบงเบขเปˆเบฒเบ‡:

เป‚เบกเบ”เบนเบ™ = abcd

mylib.a : module_dir/$(MODULES).o $(OTHER_OBJECTS)
$(CXX) $(dependencies) -o $(เป€เบ›เบปเป‰เบฒเปเบฒเบ)

เบ„เบณเบ™เบณเปœเป‰เบฒ "module_dir/" เปเบกเปˆเบ™เบ™เบณเปœเป‰เบฒเปƒเบชเปˆเปเบ•เปˆเบฅเบฐเบ„เบณเปƒเบ™ MODULES, เปเบฅเบฐเบ„เบณเบ•เปเปˆเบ—เป‰เบฒเบ ".o" เปเบกเปˆเบ™
เบ•เบทเปˆเบกเปƒเบชเปˆเบเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เปเบฒ.

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc เป‚เบ”เบเบšเปเปˆเบ•เป‰เบญเบ‡เปƒเบชเปˆเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ a
เบ•เบปเบงเปเบ›; syntax เปเบกเปˆเบ™ "$ (word1 word2)". เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบงเบปเบ‡เป€เบฅเบฑเบš เปเบฅเบฐ
เบ„เปเบฒเบ—เปเบฒเบญเบดเบ”. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ‚เบฝเบ™เป€เบ›เบฑเบ™:

mylib.a : module_dir/$( abcd).o $(OTHER_OBJECTS)
$(CXX) $(dependencies) -o $(เป€เบ›เบปเป‰เบฒเปเบฒเบ)

เบ•เบปเบงเปเบ›เบˆเบฐเปƒเบซเป‰เบ•เบปเบงเบ›เปˆเบฝเบ™เปเบšเบš rc เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เป€เบกเบทเปˆเบญเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเปœเบถเปˆเบ‡เบ„เบณเปƒเบ™เบ™เบฑเป‰เบ™.
เบ”เป‰เบงเบเบ„เปเบฒเบ”เบฝเบงเบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบก. เบญเบฐเบ™เบดเบˆเบฒ, เป€เบกเบทเปˆเบญเบ•เบปเบงเปเบ›เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ, เบกเบต a
เบ‚เปเป‰เบ‚เบฑเบ”เปเบเปˆเบ‡. เปเบšเบšเบ”เบฑเป‰เบ‡เป€เบ”เบตเบกเป€เบฎเบฑเบ”เปƒเบซเป‰เบžเบฝเบ‡เปเบ•เปˆเบ‚เบฐเบซเบเบฒเบเบกเบฑเบ™เป„เบ›เบซเบฒเบชเบฒเบเบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เปเบ•เปˆโ€‹เป€เบกเบทเปˆเบญโ€‹เบ„เบดเบ”โ€‹เป€เบ–เบดเบ‡
เบกเบฑเบ™เป€เบ›เบฑเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ "-I$ (DIRLIST)" เบซเบฒเบเป„เบ›, เบšเปเปˆเปƒเบซเป‰ "-I". เป„เบ”เป‰
เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เปเบกเปˆเบ™โ€‹เบเบฒเบ™โ€‹เบซเปเปˆโ€‹เบกเบฑเบ™โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เป„เบ›โ€‹เปƒเบ™โ€‹เบšเบฑเบ™โ€‹เบŠเบตโ€‹เบฅเบฒเบโ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ”เป‰เบงเบโ€‹เบŠเปˆเบญเบ‡โ€‹เบซเบงเปˆเบฒเบ‡โ€‹: "-I$($(DIRLIST))" เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™
เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบกเบตเบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบตเบ„เปเบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบชเปˆเบ•เบปเบงเปเบ›เบซเบผเบฒเบเบญเบฑเบ™เปƒเบ™เบ„เปเบฒเบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบ‚เบฐเบซเบเบฒเบเป„เบ›เบชเบนเปˆ array เบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบš, rc-style
เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบ•เบปเบงเบˆเบดเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™ cartesian, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒ
เป€เบˆเบปเป‰เบฒโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™:

DIRS = s1 s2
เป‚เบกเบ”เบนเบ™ = abc
SUFFIXES = .o .c
เป„เบŸเบฅเปŒ := $(DIRS)/$(MODULES)$(SUFFIXES)

เปเบฅเบฐ FILES เบˆเบฐเบกเบตเบชเบฐเบ•เบฃเบดเบ‡

s1/ao s1/ac s1/bo s1/bc s1/co s1/cc s2/ao s2/ac s2/bo s2/bc s2/co s2/cc

เบ™เบญเบเบˆเบฒเบเบžเบทเป‰เบ™เบ—เบตเปˆเบชเบตเบ‚เบฒเบง, เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc เบˆเบฐเบขเบธเบ”เบขเบนเปˆเบ—เบตเปˆเบงเบปเบ‡เบขเบทเบกเปƒเบ”เป†, เบฎเบญเบšเปƒเบ”, curly เบซเบผเบทเบชเบตเปˆเบซเบฅเปˆเบฝเบก
เบงเบปเบ‡เป€เบฅเบฑเบš, เปเบฅเบฐเบญเบฑเบ™เปƒเบ”เบ™เบถเปˆเบ‡เบ‚เบญเบ‡ ", : ; = # @". เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเปเบ›เบเปƒเบˆ, เปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡. เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเบชเปˆเบงเบ™เบซเบปเบงเป‚เบ”เบ wildcard เปƒเบ™เบ—เบธเบเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต
เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ:

BAD := [AZ]*/**/*.$( hpp h) # [AZ]*/**/*.hpp */**/*.h
เบ”เบต := $( [AZ]*/**/*.)$( hpp h) # [AZ]*/**/*.hpp [AZ]*/**/*.h

เบ–เป‰เบฒเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบฒเบ‡, เบซเบผเบทเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ™เปเบฒเบžเบฒเบซเบผเบทเบ•เบดเบ”เบ•เบฒเบก
เบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ•เบปเบงเปเบ›เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบดเบ”เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ
เบ•เบปเบงเปเบ› "makepp_simple_concatenation=1". เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เบดเบ”เบกเบฑเบ™เป„เบ”เป‰เบ—เบปเปˆเบงเป‚เบฅเบเปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡
เป€เบชเบฑเป‰เบ™เบซเบผเบทเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก. เบซเบผเบทเบšเบปเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™ per-makefile เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เปƒเบ™
makefile เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹. เบ—เปˆเบฒเบ™เบ„เบงเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบขเบนเปˆเปƒเบเป‰เบเบฑเบšเบ”เป‰เบฒเบ™เป€เบ—เบดเบ‡เบ‚เบญเบ‡ makefile, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเปเบฅเปˆเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™
เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ•เบฐเบซเบฅเบปเบเบ—เบตเปˆเบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†.
(เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เบเปˆเบญเบ™เบเบฒเบ™เบกเบญเบšเปเบฒเบเบˆเบฐเปƒเบŠเป‰เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc, เปเบฅเบฐเบ—เบฑเบ‡เปเบปเบ”
เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเบ—เบตเปˆเบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบˆเบฐเบšเปเปˆ. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเปƒเบ™
makefiles เปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เปเบฅเบฐเบšเปเปˆเบˆเบฐเปเบˆเป‰เบ‡เบชเบฐ เป€เปเบต เป„เบ›เบˆเบฒเบเบ„เปเบฒเบชเบฑเปˆเบ‡เบ‚เบญเบ‡เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™เปƒเบ™
makefile, เบกเบฑเบ™เบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบˆเบฐเบ•เบฑเป‰เบ‡ "makepp_simple_concatenation" เป„เบงเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเบˆเบฐเป„เบงเป„เบ”เป‰.) เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”
เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบ•เบฑเป‰เบ‡เบกเบฑเบ™เป„เบงเป‰เบžเบฝเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบเบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™:

เป€เบ›เบปเป‰เบฒเปเบฒเบ: makepp_simple_concatenation = 1
เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ:
&echo before_first$(LIST)after_last -o $(output)

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ "$[VARIABLE]" เบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เป„เบงเบเบงเปˆเบฒ "$(VARIABLE)", เบชเบปเบกเบ—เบปเบšเบชเบญเบ‡เบญเบฑเบ™เปƒเบ™ rc-
เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบˆเบฐเบšเปเปˆเปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ„เบฒเบ”เบซเบงเบฑเบ‡, เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบซเปเปˆเบกเบฑเบ™เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡
เบฅเบฒเบเบŠเบทเปˆ:

A = ab
N = 1 2
เบšเปเปˆเบ”เบต := $(A)$[N]
เบ”เบต := $(A)$($[N])

เป€เบชเบฑเป‰เบ™เบชเบธเบ”เบ—เป‰เบฒเบเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเปˆเบฒเบ™เป€เบ›เบฑเบ™

BAD := $(A)1 2 # a1 b1 2
เบ”เบต := $(A)$( 1 2) # a1 a2 b1 b2

เบ›เปˆเบฝเบ™เปเบ—เบ™ เป€เบญเบเบฐเบชเบฒเบ™

เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบกเบตเบฎเบนเบšเปเบšเบš "$(VAR:A=B)", เป€เบŠเบดเปˆเบ‡ A เปเบกเปˆเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™ เปเบฅเบฐ B เปเบกเปˆเบ™
เบฎเบนเบšเปเบšเบšเป€เบžเบทเปˆเบญเบ—เบปเบ”เปเบ—เบ™เบกเบฑเบ™. เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบกเปˆเบ™เบ•เบปเบงเบซเบเปเป‰เบ‚เบญเบ‡
เบŸเบฑเบ‡เบŠเบฑเบ™ "patsubst". เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

source_files = ac bc cc dc
object_files = $(source_files:%.c=%.o)

เบˆเบฐเบ•เบฑเป‰เบ‡ "$(object_files)" เป€เบ›เบฑเบ™ "ao bo co do". "%" เปเบกเปˆเบ™เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ”
เบชเบฐเบ•เบดเบ‡เบ—เบตเปˆเบกเบฑเบ. เบ–เป‰เบฒเบ—เบฑเบ‡เบชเบญเบ‡ A เปเบฅเบฐ B เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบ "%", เป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบตเบ—เบปเปˆเบงเป„เบ›เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เปˆเบฝเบ™เปเบ—เบ™
เบ„เปเบฒเบ•เปเปˆเบ—เป‰เบฒเบ, เบžเบงเบเป€เบ‚เบปเบฒเบชเบฒเบกเบฒเบ”เบ–เบทเบเบเบปเบเป€เบงเบฑเป‰เบ™:

object_files = $(source_files:.c=.o)
object_files = $(source_files:c=o) # เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™, เป€เบžเบฒเบฐเบงเปˆเบฒ . เบšเปเปˆเปเบกเปˆเบ™เบžเบดเป€เบชเบ”

Whitespace in เบ•เบปเบงเปเบ›

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบžเบทเป‰เบ™เบ—เบตเปˆเบซเบงเปˆเบฒเบ‡เบขเบนเปˆเปƒเบ™เบ•เบปเบงเปเบ›, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡ (เบ›เบฐเบˆเบธเบšเบฑเบ™) เบ›เบดเบ”เบเบฒเบ™เปƒเบŠเป‰เบ‡เบฒเบ™ rc-style
เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ (เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ "makepp_simple_concatenation=1") เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบŠเป‰ syntax เปเบšเบšเบ™เบตเป‰:

null =
T = -o $(null)

เบซเบผเบท, เบ”เป‰เบงเบเบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ:

T = -o $()

เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบ•เบปเบงเปเบ› "T" เบกเบต "-o" เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡.

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

เบเปเบฅเบฐเบ™เบตเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบฑเบเบˆเบฐเป€เบเบตเบ”เบ‚เบถเป‰เบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบŠเบฒเบŠเบปเบ™เบžเบฐเบเบฒเบเบฒเบกเปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ”เบฝเบงเบเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™
เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเบ—เบตเปˆเบšเปเปˆเปƒเบŠเป‰ syntax เบ„เปเบฒเบชเบฑเปˆเบ‡ Unix เบ›เบปเบเบเบฐเบ•เบด. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เบปเบ™เบซเบ™เบถเปˆเบ‡เป€เบซเบฑเบ™
เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เปƒเบ™ makefiles:

ifeq ($(ARCH), เบญเบฑเบ”เบชเบฐเบˆเบฑเบ™)
O := /OUTPUT=
เบญเบทเปˆเบ™
null :=
O := -o $(null)
เบชเบดเป‰เบ™เบชเบธเบ”

%.o : %.c
$(COMPILER) $(input) $(O)$(output)

เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰เบเบฑเบš makepp เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบ—เป‰เป†, เปเบ•เปˆเป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบžเบปเบšเบงเปˆเบฒเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒ
makefiles เปเบกเปˆเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบซเบผเบฒเบเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ•เบปเบงเปเบ›เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบซเบ™เป‰เบญเบ
เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡,

ifeq ($(ARCH), เบญเบฑเบ”เบชเบฐเบˆเบฑเบ™)
%.o : %.c
$(WEIRD_COMPILER) $(input) /OUTPUT=$(output)
เบญเบทเปˆเบ™
%.o : %.c
$(CC) -c $(input) -o $(output)
เบชเบดเป‰เบ™เบชเบธเบ”

Whitespace เบšเปเปˆเป€เบ„เบตเบเบ–เบทเบเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบขเบนเปˆเปƒเบ™เบŠเบทเปˆเบ•เบปเบงเปเบ›, เบžเบฝเบ‡เปเบ•เปˆเบขเบนเปˆเปƒเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบžเบงเบเบกเบฑเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™
เบˆเบฒเบเบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบšเบฒเบ‡เบญเบฑเบ™.

เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ” Variables
เบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปเบกเปˆเบ™เบ•เบปเบงเปเบ›เบ—เบตเปˆเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ„เปˆเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ”
เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เปƒเบ™. Makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบ•เบปเบงเปเบ›เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเบ—เบตเปˆเบญเบทเปˆเบ™เป†
เบชเบฐโ€‹เบšเบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบฑเบ™เบกเบตเบฅเบฐเบซเบฑเบ”เบฅเบฑเบšเบซเบ™เป‰เบญเบ, เบŠเบทเปˆเบเบฒเบงเบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆ
เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เปเบ—เบ™. (เบชเปเบฒเบฅเบฑเบš makefiles เบกเปเบฅเบฐเบ”เบปเบเบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบเบฑเบš redefine เบŠเบทเปˆเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เป„เบ”เป‰
เบ„เปเบฒเบ™เบดเบเบฒเบกเปƒเบ™ makefile overrides เบ„เบงเบฒเบกเบซเบกเบฒเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเป€เบงเบปเป‰เบฒ
"target = abc" เปƒเบ™ makefile เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™ "$(target)" เบชเบฐเป€เบซเบกเบตเบˆเบฐเบ‚เบฐเบซเบเบฒเบเป„เบ› "abc", เปเบฅเบฐเบˆเบฐเบšเปเปˆ.
เบเบฒเบงเป€เบ—เบปเปˆเบฒเบเบฑเบš $@.)

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

output
เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ
$@ เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบง, เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ makepp เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบš
เบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบ™เบตเป‰เปเบกเปˆเบ™ เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ” เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰

y.tab.c y.tab.h : parser.y
$(YACC) -o $(output) $(YFLAGS) $(input)

"$(output)" เบˆเบฐเบกเบตเบ„เปˆเบฒ y.tab.c. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆเบ•เบปเบงเปเบ› magic เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ›เบฑเบ™เบˆเบดเบ‡
เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบœเปˆเบฒเบ™เบ”เบฑเบ”เบชเบฐเบ™เบตเป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡. เบญเบฑเบ™เบ™เบตเป‰เบ™เบฑเบšเบˆเบฒเบ 1 เบซเบผเบท เบ–เบญเบเบซเบผเบฑเบ‡
เบˆเบฒเบ -1. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ "$(output 2)" เบซเบผเบท "$(output -1)" เบˆเบฐเบกเบตเบ„เปˆเบฒ y.tab.h.

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

ab: # เปเบ—เป‰เป†: เบเบปเบ”เบฅเบฐเบšเบฝเบšเบซเบ™เบถเปˆเบ‡เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ a เปเบฅเบฐ b
เปเบ•เบฐ $@

cd: # error: mpp เบˆเบปเปˆเบกเบงเปˆเบฒเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡ d
เปเบ•เบฐ $(เบญเบญเบ)

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš
เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบ
เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบ„เบทเบเบฑเบ™เบเบฑเบš "$(เป€เบ›เบปเป‰เบฒเปเบฒเบ)" เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเปœเบถเปˆเบ‡
เป€เบ›เบปเป‰เบฒโ€‹เบซเบกเบฒเบ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, "$(outputs)" เบˆเบฐเป€เบ›เบฑเบ™ y.tab.c y.tab.h. เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เบœเปˆเบฒเบ™เป„เบ”เป‰
เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ”เบฑเบ”เบชเบฐเบ™เบต, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ "$(outputs 2 1)" เบˆเบฐเป€เบ›เบฑเบ™ y.tab.h y.tab.c.

เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช
เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™
$< เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡เบ—เบณเบญเบดเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบš. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ™เบตเป‰

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

"$(input)" เบˆเบฐเป€เบ›เบฑเบ™เบŠเบทเปˆเบ‚เบญเบ‡ .c เป„เบŸเบฅเปŒ, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบญเบฑเบ™เปƒเบ” .h เป„เบŸเบฅเปŒ makepp
เบ„เบปเป‰เบ™เบžเบปเบš. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบฅเบฐเบšเบธเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบซเบผเบฒเบเบเบงเปˆเบฒเปœเบถเปˆเบ‡เบญเบฑเบ™, เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”
index: "$(input $(INDEX))" เปเบกเปˆเบ™ INDEXth dependency.

dependencies
เบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™
$^ เบ—เบฑเบ‡เปเบปเบ”เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบ‚เบญเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบ, เบšเปเปˆเบฅเบงเบกเป€เบญเบปเบฒ .h เป„เบŸเบฅเปŒเบ—เบตเปˆเบ„เบปเป‰เบ™เบžเบปเบšเป‚เบ”เบ
makepp_scanning เบ›เบฐเบเบญเบšเบกเบต.

เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš

myprog.o : *.o
$(CC) $(CFLAGS) $(inputs) -o $(output)

"$(inputs)" เบˆเบฐเป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ .o เบ—เบฑเบ‡เปเบปเบ”เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต. เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเป„เบ”เป‰เบชเบฐเป€เบžเบฒเบฐเบ•เบปเบงเป€เบˆเบปเป‰เบฒเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™
เบ•เป‰เบญเบ‡เบเบฒเบ™เป‚เบ”เบเบเบฒเบ™เบœเปˆเบฒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ”เบฑเบ”เบชเบฐเบ™เบต. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบฅเบฐเบšเบธเป„เบŸเบฅเปŒเบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡,
เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เป€เบญเบปเบฒโ€‹เปƒเบซเป‰โ€‹เป€เบ‚เบปเบฒโ€‹เป€เบˆเบปเป‰เบฒโ€‹เปƒเบ™ "$(inputs 2 3 4)" (เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบ”เป‰เบงเบโ€‹เบ•เบปเบงโ€‹เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เป€เบเบตเบ™โ€‹เป„เบ›โ€‹.
เบชเบฑเบ™เบเบฒ).

sorted_dependencies
sorted_inputs
$+ เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบฑเบ‡เปเบปเบ”เบ‚เบญเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบ, เปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเบฅเบณเบ”เบฑเบš, เบ”เป‰เบงเบเบเบฒเบ™เบฅเบถเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบŠเป‰เบณเบเบฑเบ™เบญเบญเบ.
เป€เบ—เบปเปˆเบฒเบเบฑเบš "$(sort $(inputs))".

change_dependencies
change_inputs
$? เบ„เบงเบฒเบกเป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ‚เบญเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเปเบˆเป‰เบ‡
เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบช (เป€เบŠเบฑเปˆเบ™, เบญเบฑเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบฅเบฐเบšเบธเป„เบงเป‰เปƒเบ™ makefile), เบšเปเปˆเป„เบ”เป‰เบ„เบปเป‰เบ™เบžเบปเบš implicitly
เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบˆเบฒเบเบเบฒเบ™เบชเบฐเปเบเบ™ (เป€เบŠเบฑเปˆเบ™: เป„เบŸเบฅเปŒ .h).

เบ™เบตเป‰เปเบกเปˆเบ™เปƒเบŠเป‰เบ—เบปเปˆเบงเป„เบ›เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

libmine.a : $(MODULES): build_check ignore_action
$(AR) ru $@ $?

เป€เบŠเบฑเปˆเบ™, ar เบ–เบทเบเบšเบญเบเปƒเบซเป‰เบ›เปˆเบฝเบ™เปเบ—เบ™เบžเบฝเบ‡เปเบ•เปˆเป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. (เบซเบกเบฒเบเป€เบซเบ”
"ignore_action" เบชเป‰เบฒเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบš. เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบฅเบฐเบšเบธเบญเบฑเบ™เบ™เบตเป‰, makepp เบˆเบฐเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบˆเบฐเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบกเบฑเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ–เป‰เบฒเบšเปเปˆเบกเบตเบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเปƒเบชเบกเบตเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡, the
เบชเบฐเบ•เบดเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบˆเบฐเป€เบ›เบฑเบ™ "ar ru libmine.a" เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เปเบกเปˆเบ™
เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเบ—เบตเปˆเบ—เปˆเบฒเบ™เปเบฅเปˆเบ™เบกเบฑเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™ "ignore_action" makepp เบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบกเบฑเบ™. เปƒเบ™โ€‹เบ™เบตเป‰
เบเปเบฅเบฐเบ™เบต, เบกเบฑเบ™เบšเปเปˆเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบ, เปเบ•เปˆเบเบฑเบšเบ„เปเบฒเบชเบฑเปˆเบ‡เบญเบทเปˆเบ™เป†, เบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเบกเบตเบšเบฑเบ™เบซเบฒ. เป€เบšเบดเปˆเบ‡
makepp_build_check เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบš "ignore_action".)

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

เบ•เบปเป‰เบ™เบเปเบฒเป€เบ™เบตเบ”
$* เบฅเบณเบ•เบปเป‰เบ™เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบš (เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒ '%' เบเบปเบ‡เบเบฑเบ™เบญเบฑเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก). เบญเบตเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ–เป‰เบฒเบ™เบตเป‰
เบšเปเปˆเปเบกเปˆเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบฎเบนเบšเปเบšเบš, เบชเบปเปˆเบ‡เบ„เบทเบ™เบŠเบทเปˆเป„เบŸเบฅเปŒเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบ (ie, เบกเบฑเบ™เป€เบ›เบฑเบ™
เป€เบ—เบปเปˆเบฒเบเบฑเบš "$(basename $(input))".

เบ™เบตเป‰เปเบกเปˆเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เปƒเบ™เบ”เป‰เบฒเบ™เบซเบฅเบฑเบ‡. เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบชเบฐเบšเบฑเบšเป€เบเบปเปˆเบฒเบ‚เบญเบ‡ make the
เบงเบดเบ—เบตเบ”เบฝเบงเบ—เบตเปˆเบˆเบฐเบšเบญเบเบงเบดเบ—เบตเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เปƒเบ”เป† .c เป„เบŸเบฅเปŒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™ .o เป„เบŸเบฅเปŒเปเบกเปˆเบ™เบ„เป‰เบฒเบเบ„เบท
เบ™เบตเป‰:

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

เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‚เบตเป‰เบ•เบปเบงเบฐเบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบš. เบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เปเบšเบš GNU-make
เบเบปเบ”โ€‹เบฅเบฐโ€‹เบšเบฝเบšโ€‹เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ™เบตเป‰โ€‹:

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

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

#
# เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ .c เบ”เป‰เบงเบเป€เบ„เบทเปˆเบญเบ‡เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบžเบดเป€เบชเบ”เบšเบฒเบ‡เบ›เบฐเป€เบžเบ”:
#
%.c : %.k
$(preprocessor) $(input) > $(output)

#
# เบฅเบงเบšเบฅเบงเบกเป„เบŸเบฅเปŒ .c เป€เบ›เบฑเบ™เป„เบŸเบฅเปŒ .o:
#
%.o : %.c
$(CC) $(CFLAGS) -c $(input) -o $(output)

#
# เบ—เบธเบ‡เบเบฒเบ™เบฎเบงเบšเบฎเบงเบกเปเบšเบšเบชเบฐเบซเบผเบฑเบšเบžเบดเป€เบชเบ”เบชเบณเบฅเบฑเบšเป„เบŸเบฅเปŒ .c เบ—เบตเปˆเบกเบฒเบˆเบฒเบ
# เบˆเบฒเบเป„เบŸเบฅเปŒ .k:
#
$(foreach:%.k=%.o): $(foreach:%.k=%.c): foreach *.k
$(CC) $(SPECIAL_K_FLAGS) -c $(input) -o $(output)

เป€เบšเบดเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš foreach clause เปƒเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบฅเบฐเบ•เบปเบงเบขเปˆเบฒเบ‡.

$/ เบญเบฑเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปˆเบฒเบ„เบปเบ‡เบ—เบตเปˆ, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™ "/", เบซเบผเบทเบขเบนเปˆเปƒเบ™ Windows เป€เบ”เบตเบก "\". เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบกเบฑเบ™, เบ–เป‰เบฒ
เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™ portableโ€‹, เป€เบŠเบฑเปˆเบ™โ€‹: เบซเบ™เบถเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹:

เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ‚เป‰เบญเบ:
.$/myprog >$(เบœเบปเบ™เบœเบฐเบฅเบดเบ”)

เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบŠเบทเปˆโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบœเปˆเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เป‚เบ•เป‰โ€‹เบ–เบฝเบ‡โ€‹เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ Windows เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบˆเบฑเบ”โ€‹เบเบฒเบ™ Unixโ€‹
syntax เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™.

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ Variables
เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบ™เบ—เบธเบเบงเบดเบ—เบตเบ—เบฒเบ‡เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡ (เบเบปเบเป€เบงเบฑเป‰เบ™เบ–เป‰เบฒเบฅเบฐเบšเบธเป„เบงเป‰เป€เบ›เบฑเบ™เบขเปˆเบฒเบ‡เบญเบทเปˆเบ™) เป€เบžเบทเปˆเบญเบ”เบฑเบ”เปเบ›เบ‡
bahaviour เบ‚เบญเบ‡ makepp. เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบžเบงเบเบกเบฑเบ™เปเบกเปˆเบ™เบšเปเปˆเป„เบ”เป‰เบเปเบฒเบ™เบปเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”.

MAKEPP_DEBUG
เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบปเปˆเบ‡เบญเบญเบเบญเบฑเบ™เบ™เบตเป‰เบ”เป‰เบงเบเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒ makepp, เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚เบซเบผเบฒเบเบ‚เบถเป‰เบ™
เบ‚เปเป‰เบกเบนเบ™. เบ™เบตเป‰เปเบกเปˆเบ™ "RULE_SOURCE" เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบญเบฑเบ™เบ™เบตเป‰เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบžเบฒเบเปƒเบ•เป‰
makeppinfo, mppi เปเบฅเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›เปเบฅเบฐเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบžเบฒเบเปƒเบ•เป‰
makepplog, mppl. เบญเบฑเบ™เบ™เบตเป‰เบเบฑเบ‡เบˆเบฐเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เบ–เป‰เบฒ makepp เปเบปเบ”เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเบณ เบซเบผเบท hangs,
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เปเบกเปˆเบ™เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบ—เบตเปˆเบชเบดเป‰เบ™เบชเบธเบ”:

A = $A # เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เบœเบปเบ™เบเบฒเบ™เป€เบฅเบทเปˆเบญเบ™เป€เบงเบฅเบฒ, เบ•เป‰เบญเบ‡เบเบฒเบ™ :=
B = $C
C = $B

MAKEPP_LN_CP
เป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบ—เบถเบเบžเบฒเบเปƒเบ•เป‰ &ln.

makepp_percent_subdir
เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ (เป€เบŠเบฑเปˆเบ™: 1) เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบต "%" เปƒเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบ เบซเบผเบทเบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ
เปƒเบ™เบ—เบปเปˆเบงเบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบต.

makepp_require_phony
เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ (เป€เบŠเบฑเปˆเบ™: 1) เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™เบ„เบงเบฒเบกเบซเบผเบปเบ‡เป„เบซเบผเบ—เบตเปˆเบšเปเปˆเบŠเบฑเบ”เป€เบˆเบ™ (เป€เบŠเบฑเปˆเบ™เบงเปˆเบฒเบเบปเบ”เบฅเบฐเบšเบฝเบš
เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบœเบฐเบฅเบดเบ”เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™). เบ•เบปเบงเปเบ›เบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบˆเบดเบ‡เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เป€เบ–เบดเบ‡
เบ›เป‰เบญเบ‡เบเบฑเบ™เบ•เปˆเบญเบ‡เป‚เบชเป‰เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเบ—เบตเปˆเปเบ•เบเบซเบฑเบ, เปเบ•เปˆเบงเปˆเบฒเบˆเบฐเบ—เปเบฒเบฅเบฒเบเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบซเบผเบฑเบ‡
makefiles sloppy.

makepp_signature_C_flat
เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบ—เบฒเบ‡โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบฅเบฒเบโ€‹เป€เบŠเบฑเบ™ C. เบ•เบฑเป‰เบ‡โ€‹เบ„เปˆเบฒโ€‹เบ™เบตเป‰โ€‹เป€เบ›เบฑเบ™โ€‹เบกเบนเบ™โ€‹เบ„เปˆเบฒโ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡ (เป€เบŠเบฑเปˆเบ™ 1โ€‹) เป€เบžเบทเปˆเบญโ€‹เบ›เบดเปˆเบ™โ€‹เบ›เบปเบงโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹
เปเบซเบผเปˆเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เปเบ›, ie เป€เบชเบฑเป‰เบ™เปƒเบซเบกเปˆเบ—เบฑเบ‡เบซเบกเบปเบ” (เบเบปเบเป€เบงเบฑเป‰เบ™เบ›เบฐเบกเบฒเบ™ preprocessor เบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™) เปเบกเปˆเบ™
เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบทเบเบฑเบšเบŠเปˆเบญเบ‡เบซเบงเปˆเบฒเบ‡ เปเบฅเบฐเบ„เบณเบชเบฑเปˆเบ‡ "#line" เปเบกเปˆเบ™เบ–เบทเบเบฅเบฐเป€เบฅเบตเบ.

makepp_simple_concatenation
เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ™เบตเป‰เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ (เป€เบŠเบฑเปˆเบ™: 1) เป€เบžเบทเปˆเบญเบ›เป‰เบญเบ‡เบเบฑเบ™ "เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เปเบšเบš rc".

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

VPATH
เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบ™เบตเป‰เป€เบ›เบฑเบ™เบšเบฒเบ‡เบ„เปˆเบฒเป‚เบ”เบ implicitly เป€เบญเบตเป‰เบ™เบงเปˆเบฒ "vpath % value".

เบเบณ เบ™เบปเบ”เป„เบงเป‰เบเปˆเบญเบ™ Variables
Makepp เบเบณเบ™เบปเบ”เบ•เบปเบงเปเบ›เบˆเบณเบ™เบงเบ™เปœเบถเปˆเบ‡เป„เบงเป‰เบฅเปˆเบงเบ‡เปœเป‰เบฒ, เป€เบŠเบดเปˆเบ‡เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบฅเบปเบšเบฅเป‰เบฒเบ‡เป„เบ”เป‰:

AR เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "ar".

ARFLAGS
เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "rv".

AS เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "เป€เบ›เบฑเบ™".

CC เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบžเบปเบšเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบšเบฑเบ™เบ”เบฒ "gcc", "egcc", "pgcc", "c89" เบซเบผเบท "cc", เบซเบผเบทเปƒเบ™ Windows
เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, "cl" เบซเบผเบท "bcc32".

เบ›เป‰เบฒเบเบเบณเบเบฑเบš
เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบ–เป‰เบฒ "$(CC)" เป€เบ›เบฑเบ™ GNU compiler "-g -Wall", เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบญเบ‡ Windows.
เบฅเบงเบšเบฅเบงเบกเบšเปเปˆเบกเบตเบซเบเบฑเบ‡, เบญเบทเปˆเบ™ "-g".

CurdIR
เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆ Makefile เบ›เบฐเบˆเบธเบšเบฑเบ™เบขเบนเปˆ.

CXX เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบžเบปเบšเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบšเบฑเบ™เบ”เบฒ "g++", "c++", "pg++", "cxx", "C" "C" เบซเบผเบท "aCC", เบซเบผเบทเบขเบนเปˆเปƒเบ™
Windows เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™ "cl" เบซเบผเบท "bcc32".

CXXFLAGS
เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบ–เป‰เบฒ "$(CXX)" เป€เบ›เบฑเบ™ GNU compiler "-g -Wall", เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบญเบ‡ Windows.
เบฅเบงเบšเบฅเบงเบกเบšเปเปˆเบกเบตเบซเบเบฑเบ‡, เบญเบทเปˆเบ™ "-g".

F77 เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบžเบปเบšเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบšเบฑเบ™เบ”เบฒ "f77", "g77" เบซเบผเบท "fort77".

FC เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "$(F77)".

LD เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "ld".

lex เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™เปƒเบ™เบšเบฑเบ™เบ”เบฒ "lex" เบซเบผเบท "flex".

LIBTOOL
เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "libtool".

เป€เบฎเบฑเบ”
เบ•เบปเบงเปเบ›เบ™เบตเป‰เบกเบตเบชเบญเบ‡เบ„เปˆเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เบ‚เบถเป‰เบ™เบเบฑเบšเบเบฒเบ™เบกเบตเบซเบผเบทเบšเปเปˆเบ‚เบญเบ‡
"--traditional-recursive-make". Makepp เบฎเบฑเบšเบฎเบนเป‰เป€เบงเบฅเบฒเบ—เบตเปˆเบ•เบปเบงเปเบ›เบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปเบฅเบฐ
เบ›เบดเบ”เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบเปˆเบญเบ™เบ—เบตเปˆเบเบฒเบ™เป€เบญเบตเป‰เบ™เบ„เบทเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เบˆเบดเบ‡. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™
undesirable เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบ„เปˆเบญเบเป†เบเปเบฒเบˆเบฑเบ”เบกเบฑเบ™, เบชเบฐเบ™เบฑเป‰เบ™เบ—เปเบฒเบญเบดเบ”เบ›เปˆเบฝเบ™เบเบฒเบ™เป‚เบ—เป€เบ›เบฑเบ™ a
makepp เบชเบฐเป€เบžเบฒเบฐ "$((MAKE))" เป€เบŠเบดเปˆเบ‡เบˆเบฐเบšเปเปˆเบ›เบดเบ”เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”. เบ—เปˆเบฒเบ™เบšเปเปˆเบ„เบงเบ™เบ•เบฑเป‰เบ‡เบกเบฑเบ™
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบ—เปเบฒเบฅเบฒเบ recursion smart เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบฎเบฑเบ”เบงเบฝเบเบ›เบฐเบกเบฒเบ™.

MAKECMDGOALS
เบ•เบปเบงเปเบ›เบ™เบตเป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เปเบ•เปˆเบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰เป‚เบ”เบ makepp. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบญเบšเบ–เบฒเบกเบกเบฑเบ™เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒ
เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เป„เบ”เป‰เบ–เบทเบเบฎเป‰เบญเบ‡เบ‚เป.

เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบšเปเปˆเบงเปˆเบฒเป€เบ›เบปเป‰เบฒเปเบฒเบเบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบเบฑเบšเบœเบนเป‰เปƒเบŠเป‰ (เบซเบผเบทเบเบฒเบ™เป€เบญเบตเป‰เบ™เบ„เบทเบ™) เบ—เบตเปˆเบชเบฐเปœเบญเบ‡เปƒเบซเป‰.
เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒเป€เบกเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบ implicitly.

ifneq $(เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบžเบดเป€เบชเบ”-เป€เบ›เบปเป‰เบฒเปเบฒเบ, $(MAKECMDGOALS))
# เป€เบ›เบปเป‰เบฒเปเบฒเบเบžเบดเป€เบชเบ”เปเบกเปˆเบ™เปœเบถเปˆเบ‡เปƒเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™
เบญเบทเปˆเบ™ ifeq $(MAKECMDGOALS)
# เบšเปเปˆเบกเบตเป€เบ›เบปเป‰เบฒเปเบฒเบเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™
เบชเบดเป‰เบ™เบชเบธเบ”

MAKEFLAGS (เบชเบปเปˆเบ‡เบญเบญเบเปเบฅเป‰เบง)
เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบ—เบตเปˆ makepp เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. เบœเบนเป‰เบ—เบตเปˆเบกเบตเบˆเบปเบ”เบซเบกเบฒเบเบชเบฐเบšเบฑเบšเบ”เบฝเบง
เปเบšเบšเบŸเบญเบกเปเบกเปˆเบ™เบฅเบงเบกเบเบฑเบ™เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป‚เบ”เบเบšเปเปˆเบกเบต "-" เบŠเบฑเป‰เบ™เบ™เปเบฒ (เบชเบฐเบซเบงเบฑเบ™เบฎเบนเป‰เบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡ gmake เป€เบฅเบทเบญเบ
เบ–เบดเป‰เบก "-").

เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™
เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "เบ‚เปเป‰เบกเบนเบ™".

MAKEPPFLAGS (เบชเบปเปˆเบ‡เบญเบญเบเปเบฅเป‰เบง)
เบญเบฑเบ™เบ™เบตเป‰เบ–เบทเบเบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ”เบฝเบงเบเบฑเบ™เบเบฑเบš MAKEFLAGS, เปเบ•เปˆเบงเปˆเบฒเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบ•เบปเบงเปเบ›เบ™เบตเป‰เบขเบนเปˆเปƒเบ™
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡ makepp.

_MAKEPPFLAGS (เบชเบปเปˆเบ‡เบญเบญเบเปเบฅเป‰เบง)
เบ•เบปเบงเป€เบฅเบทเบญเบเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ makepp เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบ‚เบญเบ‡ POSIX/gmake, เป€เบŠเบดเปˆเบ‡ makepp
เบ–เบทเบเป€เบญเบตเป‰เบ™. เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเปเบ›เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ makefile เบกเปเบฅเบฐเบ”เบปเบเบšเปเปˆเบชเบฒเบกเบฒเบ”เบ—เปเบฒเบฅเบฒเบเป„เบ”เป‰
เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบเบปเบเป€เบฅเบตเบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ MAKEFLAGS. เบ™เบตเป‰โ€‹เปเบกเปˆเบ™โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบกเบตโ€‹
"--traditional-recursive-make".

MAKEPP_VERSION
เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ makepp เบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™เบเบฑเบš. เบ–เป‰เบฒเบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบงเบตเบŠเบฑเบ™เป€เบšเบ•เป‰เบฒ, เบกเบฑเบ™เบˆเบฐเบกเบต a
hyphen เบ•เบดเบ”เบ•เบฒเบกเบ”เป‰เบงเบ YYMMDD เบšเบงเบเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบš "ifdef"
เป€เบžเบทเปˆเบญเป€เบŠเบทเปˆเบญเบ‡เบชเบดเปˆเบ‡เบเปเปˆเบชเป‰เบฒเบ‡เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ makepp เบˆเบฒเบเบœเบนเป‰เบœเบฐเบฅเบดเบ”เบญเบทเปˆเบ™เป†.

เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบ„เปˆเบฒเบ”เบฝเบงเบเบฑเบ™เบชเบฐเปเบ”เบ‡เป‚เบ”เบ "makepp --version"

PWD เบ™เบฒเบกเปเบเบ‡เบชเปเบฒเบฅเบฑเบš "CURDIR".

RM เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: "rm -f". เบ™เบตเป‰เปเบกเปˆเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบชเปเบฒเบฅเบฑเบš Makefiles เบกเปเบฅเบฐเบ”เบปเบ. เบชเปเบฒเบฅเบฑเบšเบ„เบปเบ™เปƒเบซเบกเปˆเบกเบฑเบเปƒเบŠเป‰
เบ„เปเบฒเบชเบฑเปˆเบ‡ builtin &rm เป‚เบ”เบเบเบปเบ‡. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบเบปเบ”เบฅเบฐเบšเบฝเบšเบชเบฐเบญเบฒเบ” phony, เป€เบšเบดเปˆเบ‡
เบ„เปเบฒเบชเบฑเปˆเบ‡ "makeppclean -r" เปเบ—เบ™.

เบฎเบฒเบ
เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบžเบตเปˆเบ™เป‰เบญเบ‡เบเบฑเบšเบฎเบฒเบเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, ie เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ•เบทเปˆเบกเบญเบตเบเปƒเบ™
เป€เบŠเบดเปˆเบ‡เบ—เปˆเบฒเบ™เบกเบต "RootMakeppfile.mk)". เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบกเบต, เบ•เบปเบงเปเบ›เบ™เบตเป‰เปเบกเปˆเบ™
เบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ

SHELL
เบ•เบปเบงเปเบ›เบ™เบตเป‰เบ–เบทเบเป€เบ„เบปเบฒเบฅเบปเบšเบžเบฝเบ‡เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™ "เบชเบปเปˆเบ‡เบญเบญเบ" เบกเบฑเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบกเบฑเบ™เปเบกเปˆเบ™ Shell
เป€เบŠเบดเปˆเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบเบฐเบ—เปเบฒเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เป‚เบ”เบเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบžเบดเป€เบชเบ”เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบกเบฑเบ™ (เบ—เปเบฒเบกเบฐเบ”เบฒ
เบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบเบปเบ‡). เปƒเบ™ Windows Strawberry เบซเบผเบท ActiveState Perl, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบต
Shell เบ„เป‰เบฒเบเบ„เบท Unix, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบ•เบปเบงเปเบ› SHELL เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เบ„เปˆเบฒเบ—เบตเปˆเบฅเบปเบ‡เบ—เป‰เบฒเบเบ”เป‰เบงเบ "sh" เปเบ—เบ™.
เบซเบผเบท "sh.exe" เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐ เป‚เบ—เบซเบฒ makepp.

เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบžเบปเบšเบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปƒเบ™เบšเบฑเบ™เบ”เบฒ "/usr/xpg4/bin/sh" (เป€เบŠเบฑเปˆเบ™: Solaris) เบซเบผเบท "/sbin/xpg4/sh"
(เป€เบŠเบฑเปˆเบ™: Reliant Unix) เบซเบผเบท "/ เบ–เบฑเบ‡ / sh".

YACC
เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™: เบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™เปƒเบ™เบšเบฑเบ™เบ”เบฒ "bison -y" เบซเบผเบท "yacc".

Variables เปเบฅเบฐ Perl
เบ„เปˆเบฒเบ•เบปเบงเปเบ›เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เป€เบ›เบฑเบ™ Perl เบ›เบปเบเบเบฐเบ•เบด, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เบˆเบฒเบ
เบฅเบฐเบซเบฑเบ” Perl เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบเบฒเบ™เบซเบกเบนเบ™เปƒเบŠเป‰เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒ; เป€เบšเบดเปˆเบ‡ makepp_extending
เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”.

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

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

เบ”เป‰เบงเบเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบเบปเบ‡เบ—เปˆเบฒเบ™เบเบฑเบ‡เบ‚เป‰เบฒเบกเบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบ•เบปเบงเปเบ›เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบ›เบฑเบ™เบ›เบฐเป€เบžเบ”
"=" เบซเบผเบท ";=". เบ•เบปเบงเปเบ›เบžเบดเป€เบชเบ”เป€เบŠเบฑเปˆเบ™ "$(CC)" เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบˆเบปเบ™เบเปˆเบงเบฒเบžเบงเบเบกเบฑเบ™เป€เบ›เบฑเบ™
เบเบฒเบ™โ€‹เบกเบญเบšโ€‹เบซเบกเบฒเบโ€‹เปƒเบซเป‰. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เปƒเบ™เบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบต, เบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเป€เบซเบฑเบ™เบ„เบธเบ™เบ„เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™.

เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบกเบฑเบ™เบ”เบตเบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเปƒเบซเป‰ makepp เบเปเบฒเบ™เบปเบ”เบ„เปˆเบฒเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰
เบ•เบปเบงเปเบ› "makeperl", เป€เบŠเบดเปˆเบ‡เบ•เบปเบงเปเบ›เป„เบ”เป‰เบ–เบทเบเบ›เบฐเป€เบกเบตเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบฅเบฐเบซเบฑเบ” Perl เบˆเบฐเป„เบ”เป‰เบฎเบฑเบš.
เปเบ›เบงเปˆเบฒ:

makeperl { $$current_value = '$(MAKEFILE_VAR)' }

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเปเบ›เปƒเบ™ makefile perl blocks เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฑเบ™เบฅเบธเป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบ•เบปเบงเปเบ› Perl
$makefile เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

perl { $current_value = $makefile->expand_variable( 'MAKE_VAR' ) }

เบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฐเป€เบซเบกเบตเป„เบ”เป‰เบฎเบฑเบšเบงเบฑเบ”เบ–เบธ makefile เบœเปˆเบฒเบ™เป€เบ›เบฑเบ™ argument เบ—เบตเบชเบญเบ‡ $_[1]:

เบเปˆเบญเบ f_f { $current_value = $_[1]->expand_variable( 'MAKE_VAR' ) }

เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบญเบตเป‰เบ™เบžเบฒเบเปƒเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบš, เบšเปˆเบญเบ™เบ—เบตเปˆเบงเบฑเบ”เบ–เบธ makefile เปเบกเปˆเบ™
เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เบœเปˆเบฒเบ™ "$Mpp::Subs::rule->{MAKEFILE}":

sub c_cmd { $current_value = $Mpp::Subs::rule->{MAKEFILE}->expand_variable( 'MAKE_VAR' ) }

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


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

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

  • 1
    เบชเบฐเบญเบฒเบ”เป€เบฅเบดเบ
    เบชเบฐเบญเบฒเบ”เป€เบฅเบดเบ
    script Kotlin เบ—เบตเปˆ nukes เบเปเปˆเบชเป‰เบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”
    cache เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™ Gradle/Android.
    เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบกเบทเปˆเบญ Gradle เบซเบผเบท IDE เปƒเบซเป‰เบ—เปˆเบฒเบ™
    เบฅเบปเบ‡. เบชเบฐเบ„เบฃเบดเบšเป„เบ”เป‰เบ–เบทเบเบ—เบปเบ”เบชเบญเบšเปเบฅเป‰เบง
    macOS, เปเบ•เปˆ ...
    เบ”เบฒเบงโ€‹เป‚เบซเบฅเบ”โ€‹เบ—เปเบฒโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฐโ€‹เบญเบฒเบ”โ€‹เป€เบฅเบดเบโ€‹
  • 2
    เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
    เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
    เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
    เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบฅเบฐเบซเบฑเบ” Checkstyle Java
    เบœเบนเป‰เบเบงเบ”เบชเบญเบšเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Eclipse IDE. เป„เบ”เป‰
    plug-in เปƒเบซเป‰เบ„เปเบฒเบ„เบถเบ”เบ„เปเบฒเป€เบซเบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบˆเบดเบ‡เบเบฑเบš
    เบœเบนเป‰เปƒเบŠเป‰เบเปˆเบฝเบงเบเบฑเบš viol ...
    เบ”เบฒเบงเป‚เบซเบฅเบ”เบ›เบฅเบฑเบเบญเบดเบ™ Eclipse Checkstyle
  • 3
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player เป€เบ›เบฑเบ™เบœเบนเป‰เบ™เบชเบทเปˆเบกเบงเบ™เบŠเบปเบ™เบŸเบฃเบต
    เบŠเบญเบšโ€‹เปเบงโ€‹, เบชเปˆเบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบญเบตเบ‡โ€‹เปƒเบชเปˆ WMP เปเบฅเบฐ VLCโ€‹. เป„เบ”เป‰
    เบœเบนเป‰เบ™เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบฎเบนเบšเปเบšเบš minimalist, เบกเบต
    เบซเบผเบฒเบโ€‹เบโ€‹เปˆโ€‹เบงเบฒโ€‹เบชเบดเบšโ€‹เบชเบตโ€‹เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹, เปเบฅเบฐโ€‹เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹
    b
    เบ”เบฒเบงเป‚เบซเบฅเบ” AstrOrzPlayer
  • 4
    movistartv
    movistartv
    Kodi Movistar+ TV es un ADDON para XBMC/
    Kodi que permite disponer de un
    decodificador de los servicios IPTV de
    Movistar integrado en uno de los
    เบชเบนเบ™โ€‹เบเบฒเบ‡โ€‹เบชเบทเปˆโ€‹เบกเบงเบ™โ€‹เบŠเบปเบ™โ€‹เบกเบฒ ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” movistartv
  • 5
    เบฅเบฐเบซเบฑเบ” :: เบ—เปˆเบญเบ™เป„เบกเป‰
    เบฅเบฐเบซเบฑเบ” :: เบ—เปˆเบญเบ™เป„เบกเป‰
    เบฅเบฐเบซเบฑเบ”::Blocks เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ”เบŸเบฃเบต,
    เบ‚เป‰เบฒเบกเป€เบงเบ—เบต C, C++ เปเบฅเบฐ Fortran IDE
    เบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เป€เบžเบทเปˆเบญเบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”
    เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เบŠเบปเบกโ€‹เปƒเบŠเป‰โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹. เบกเบฑเบ™เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเปƒเบซเป‰เบซเบผเบฒเบ
    เบ‚เบฐเบซเบเบฒเบ...
    เบ”เบฒเบงเป‚เบซเบฅเบ”เบฅเบฐเบซเบฑเบ”::Blocks
  • 6
    เบ—เปˆเบฒเบกเบเบฒเบ‡
    เบ—เปˆเบฒเบกเบเบฒเบ‡
    เบ—เปˆเบฒเบกเบเบฒเบ‡ เบซเบผเบท Advanced Minecraft Interface
    เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ / เบเบฒเบ™โ€‹เบ•เบดเบ”โ€‹เบ•เบฒเบกโ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เป€เบ›เบฑเบ™โ€‹เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เป€เบžเบทเปˆเบญโ€‹
    เบชเบฐเปเบ”เบ‡เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡ Minecraft
    เป‚เบฅเบ, เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบกเบฑเบ™เบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡. เบกเบฑเบ™
    เบชเบฒโ€‹เบกเบฒเบ” ...
    เบ”เบฒเบงโ€‹เบ™โ€‹เปŒโ€‹เป‚เบซเบฅเบ”โ€‹เปƒเบ™โ€‹เบ—เปˆเบฒเบกโ€‹เบเบฒเบ‡โ€‹
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

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

Ad