ืืืื ืืคืงืืื makepp_variables ืฉื ืืชื ืืืจืืฅ ืืกืคืง ืืืืจืื ืืืื ืื ืฉื OnWorks ืืืืฆืขืืช ืืืช ืืชืื ืืช ืืขืืืื ืืืงืืื ืืช ืืืจืืืืช ืฉืื ื, ืืืื Ubuntu Online, Fedora Online, ืืืืืืืจ ืืงืืื ืฉื Windows ืื ืืืืืืืจ ืืงืืื ืฉื MAC OS
ืชึธืึฐื ึดืืช:
ืฉืึตื
makepp_variables -- ืืืฆื ืืืฉืชืืฉ ืืืฉืชื ืื ื-makepp
ืชืืืืจ
?: $*,
$+,
$/,
$<,
$?,
$@,
$^,
=,
!=,
&=,
+=,
:=,
;=,
?=, A: AR,
ARFLAGS,
ืืคื ืฉ, C: ืึถืจึถื ืึธืฉืึธืจ,
CLLAGS,
"changed_dependencies",
ืฉืื ืืืื_ืื ืืกืืช,
ืงืืจืืืจ,
CXX,
CXXFLAGS, D: "ืชืืืช",
"ืชืืืช", F: F77,
FC,
"ืืื ืืื", I: ืงืื,
ืชืฉืืืืช, L: LD,
ืืงืก,
LIBTOOL, M: ืขืฉื,
MAKECMDGOALS,
MAKEFLAGS,
MAKEINFO,
MAKEPP_DEBUG,
MAKEPPFLAGS,
_MAKEPPFLAGS,
MAKEPP_LN_CP,
"makepp_percent_subdirs",
"makepp_require_phony",
makepp_signature_C_flat,
"makepp_simple_concatenation",
MAKEPP_VERSION, O: "ืชึฐืคืึผืงึธื",
"ืคืืืื", P: PERL,
PWD, R: RM,
ืฉืืจืฉ, S: ืฆืืฃ,
"ืกืืืืจ_ืชืืืช",
ืืกืืืจ_ืชืฉืืืืช,
"ืึถืึทืข", T: ืืขื,
ืืขืืื, V: VPATH, Y: YACC
Makefiles ืืฉืชืืฉืื ืืืจื ืืื ืืืฉืชื ืื ืืืงืืืืช ืจืืื. ืกืืื ืืืช ืืฉืืื ืืฉืืืืฉ
ืืฉืชื ืื ืื ืืืืืื ืฉืืืืข ืืืื ืจืง ืืืงืื ืืื ืืงืืืฅ makefile, ืื
ืฉืื ืืฉืชื ื, ืืื ืกืื ื ืฉืฉื ื ืขืืชืงื ืืืืืข ืืืฆืื ืืื
ืกืื ืืจืื.
ืฉืืืช ืืฉืชื ืื ืื ืชืืืื ืจืืฉืืืช. ืืชืืืืจืื, ืฉืืืช ืืฉืชื ืื ืืืืืื ืืืืืช ืืืจืืืื ืืจืืื
ืืืืืืช, ืืื ืกืืืจ ืืื ืื ืฉ-makepp ืื ืืืื ืืืจืืฃ ืืช ืื ืื ืชืขืฉื ืืฉืื ืืืื
ืชืืืื ืืืคืื ืืืจืืื, "_", ื-"-".
ืืื makefile ืืฉ ืงืืืฆื ืืฉืื ืฉื ืืฉืชื ืื, ืืืืืจืช ืืฉืชื ื ืืงืืืฅ makefile ืืื ืืืื
ืืื ืืฉืคืขื ืขื ืืขืจื ืฉืื ืืฉืื makefile ืืืจ. ืื ืืชื ืจืืฆื ืืืืืืจ ืืฉืชื ืื
ืงืืฆื makefile ืจืืื, ืืืจื ืืืืื ืืืืชืจ ืืขืฉืืช ืืืช ืืื ืฉืื ืืื ืืื ืืืืื ืืืืจืืช ืืฉืืชืคืืช
ืงืืืฅ (ืจืื ืืฆืืจืช include) ืื ืืฉืชืืฉ ืืืฉืชื ืื "ืืืืืืืื".
ืึดืฉืึฐืชึทื ึถื ืืฉืืื
ืืฉืชื ื ืืืื ืืื ืื ืขืจื ืืืื ืืจืืื ืฉืื ืืช:
ยท ื ืืชื ืืืืืืจ ืืฉืชื ื ืืชืื makefile. ืืฉื ื ืืกืคืจ ืืจืืื ืฉืื ืืช ืืขืฉืืช
ืึถื; ืจืื ืืืื.
ยท ื ืืชื ืืฆืืื ืขืจื ืฉื ืืฉืชื ื ืืฉืืจืช ืืคืงืืื, ืื:
makepp CFLAGS=-O2 my_program
ืื ื ืืขื ืืืชืจ ืืงืืืฅ makefile ืืื, ืืืฉืชื ื CFLAGS ืืืคืฅ ืืื ื-
makefiles. ืืฉืชื ืื ืืืืืืจืื ืืฉืืจืช ืืคืงืืื ืขืืงืคืื ืืืืืืืืช ืื ืืืืจื ืฉื
ืืืฉืชื ื ืืื ืืื ืื-makefiles.
ืื ืืืื ืฆืืจื ืื ืคืขื, ื-makefile ืืืื ืืชืืจื ืืขืงืืฃ ืืืคืืจืฉ ืืช ืืืืจืืช ืฉืืจืช ืืคืงืืื.
ืืืืื ื ืืื ืื ืืืชืขืื ืืื ืฉืืืฉืชืืฉ ืืืงืฉ, ืืื ืืจื ืืฉื ืืช ืืืช.
ืืฉืื ืื "ืขืงืืฃ" ืขืฉืื ืืืงืืื ืื ืืฆืืจืช ืืงืฆืื. ืืื ืืืงืจื ืฉื
ืืฆืืจืืช ืืืืืช ืืคืชื, ืืกืืจ ืืฉืื, ืืื ืืกืืื ืืื ืฉืืจืืื ื ืืืืืคื ืืื
ืชืืื ืืืฆื ืืืื. ืืฉืื ืื "ืขืงืืฃ" ืื ืจืง ืขื ืื ืืืงืฆืืืช ืฉืืื
ืงืืื ืืืื ื ืืฉืคืืข ืขื ืืงืฆืืืช ืืืืืจืืช ืืืชืจ ืืืฉืชื ื.
ยท ืื ืืฉืชื ื ืืืืืจ ืืกืืืื, ื ืืชื ืืืชืืืืก ืืืื ืืืฉืชื ื makepp.
ืืืจื ืืื ืืงืฆืืืช ืืืฉืชื ืื ืืชืื makefile ืขืืงืคืืช ืืืืจืืช ืื-
ืกืืืื, ืืื ืืชื ืืืื ืืฉื ืืช ืืืช ืืืืฆืขืืช "-e" ืื "--environment-overrides"
ืืคืฉืจืืช ืฉืืจืช ืืคืงืืื.
ืืฉืชื ืื ืืืงืฆืื ืขื ืืื ืืืื ืืืืืื ืืงืฆืื, ืืื ืื
X = 1
ืืืืืืื := abcd
CC ?= gcc
CFLAGS += -ืงืืจ
ืืืืืืจ VAR
var ืฉืืจื 1
var ืฉืืจื 2
enddef
ืืืฆืื PATH := $(PWD):$(PATH)
global MYPROJECT.INFO = ืืืืข ืฉื ืืชื ืืจืืืช ืืื ืงืืฆื ืืืืืงืืค
ืจืืื ืืื ืืืืื ืื ืืฉื ืกืืื ืขืจืืื ืชืืื ื ืืืง.
ืืืคืขืืื ืืืงืฆืื ืืฉืื ืื ืืฉ ืืฉืืขืืืืช ืฉืื ืืช ืืืงืฆืช.
ืคึผึธืฉืืึผื ืืฉืืื ืืคืขืืื
=
VARIABLE = ืืืจืืืช ืืงืกื
ืืขืงืืฃ ืืช VARIABLE = ืืืจืืืช ืืงืกื
ืืืื ืืฆืืจืช ืืืงืฆืื ืืจืืืื ืฉืื ืืืืืขืืช ืฉื ืชืืื. ื
ืืืืืื ืืฆื ืืืื ืืื ื ืืืขืจื ืขื ืฉืืขืจื ืฉื "$(VARIABLE)" ืืื
ืืืฉ ืืฉืืืืฉ ืืืคืฉืื. ืืคืืื, ืื ืชืขืฉื ืืช ืืคืขืืืืช ืืืืืช:
X = 1
Y = $(X)
X = 2
ืืื "$(Y)" ืืืืืจ ืืืชืจ ืืงืืืฅ ืืืืืงืืค ืืืขืจื ื-"2".
ืืืืคื ืืืื, ืืชื ืืืจื ืืื ืจืืฆื ืืืฉืชืืฉ ื-":=" (ืจืื ืืืื) ืืืงืื "=" ืื ืื
ืืกืคืง ืืขืจืืช ืืฉืชื ืื ืฆืคืืื ืืืชืจ. ืขื ืืืช, ืืฉ ืืงืจืื ืฉืืื ืืชื ืฆืจืื
ืืื ืืืืืช ืืช ืืขืจืืช ืืืฉืชื ื. ืืื ืื, ืื ืืชื ืืืชื makefile ืื ืืืื ืืืืืช
ืชืืื ืืืืืจ ืขื ืืจืกื ืืืฉืื ืฉื make ืืืื GNU make, ืื ืืื ืื
ืืืืจื: ืืชื ืืืื ืืืฉืชืืฉ ืจืง ื-=".
:=
ืืฉืชื ื := expr
ืืขืงืืฃ ืืฉืชื ื := expr
ืื ืืื ื-"VARIABLE = expr" ืคืจื ืืื ืฉืืฆื ืืืื ื ืืืขืจื
ืืืช ืืืชืืื ืืืื ืืืฉืืื. ืืคืืื ืื
X := 1
Y := $(X)
X := 2
ืืื "$(Y)" ืืืืืจ ืืืชืจ ืืงืืืฅ ืืืืืงืืค ืืืขืจื ื-"1" ืืืืืื ืฉืื ืื ืฉ-"$(X)" ืืื
ืืืฉืจ "$(Y)" ืืืืืจ.
;=
ืืฉืชื ื ;= expr
ืืขืงืืฃ ืืฉืชื ื ;= expr
ืื ืืื ื-"VARIABLE := expr" ืคืจื ืืื ืฉืืฆื ืืืื ื ืืืขืจื
ืจืง ืืืื ืืฉืืืืฉ ืืจืืฉืื ืืืืืจ ืืื ื ืืืจ. ืื ืฉืืืืฉื ืขืืืจ ืืงืจ
ืคืงืืืืช, ืืฉืจ ืชืืื ืืืืืจืืช ืืช ืืืชื ืืขืจื, ืื ืืื ื ืจืืฆื ืืืฆืข ืืชื
ืื ืืืช ืืขืืื ืื ืงืฉืืจืื:
VAR1 ;= $(ืืืฉืืืื ืืงืจืื perl)
VAR2 ;= $(ืคืงืืื ืืืฆืื ืืช ืฉื ืืขืืคืช)
ืฉืืื ืื ืฉ-makefiles ืืฉื ืื ืืฉืชืืฉื ืืืจื ืืื ื-":=" ืืื, ืืคืืืช ืืขืฉืืช ืืืช ืคืขื ืืืช ืืืื.
ืืื ืขื ืืืคืขืื ืืื ืืชื ืืืื ืืคืืื ืื ืืกืฃ ืื ืืขืฉืืช ืืช ืื, ืื ืืชื ืื ืขืืฉื ืืช ืื ืืจืืข
ืฆืจืื ืืช ืืขืจื. ืขืืืจ ืขืจืืื ืืืื ืืืกืคืจ ืกืคืจืืืช, ืืชื ืืืื
ืืฆืข ืืืคืืืืืืฆืื ื ืืกืคืช ืขื "ืืืืืื", ืื ืืื ืืืื.
ืขื ืืืช, ืื ืื ื ืืขื ืืืจื ืืืื ืืืคืืช ืกืืจ ืืขืจืื. ืื
ืืฉืชื ื ืืืืืืจ ืื ืืืื ืืช ืืขืจื ืฉื ืืฉืชื ื ืืืจ, ืืฉื ืืฉืชื ื ืืืจ
ืืฉ ืขืจื ืกืคืฆืืคื ืืืขื, ืืืืจืืื ืืจืืฉืื ื ืืื ืขืืืจ ืืืขื ืืื, ืืื ื-
ืขืจื ืืขื ืกืคืฆืืคื ืืืฉืืจ ืื ืขืืืจ ืื ืืืงืฉืจืื ืืืืจืื. ืื ืืื ื
ืืชืงืืื ืืชืืงื ืืขืชืื.
+=
ืืฉืชื ื += expr
ืืขืงืืฃ ืืฉืชื ื += expr
ืืืกืืฃ ืืช ืืืืจืืืช ืืชืืื ืืงืืื ืฉื ืืืฉืชื ื, ืืืคืจื ืืจืืื. ืื
ืืืฉืชื ื ืืืงืฆื ืืขืืจ ืขื ":=", ืืื ืืฆื ืืืื ื ืืืขืจื
ืืคื ื ืืืืกืคื.
&=
ืืฉืชื ื &= expr
ืืขืงืืฃ ืืฉืชื ื &= expr
ืืงืืื ืืช ืืืืจืืืช ืืชืืื ืืงืืื ืฉื ืืืฉืชื ื, ืืืคืจื ืืจืืื.
ืื ืืืฉืชื ื ืืืงืฆื ืืขืืจ ืขื ":=", ืื ืืฆื ืืืื ื ืืื
ืืืขืจื ืืคื ื ืืืืกืคื.
ืืืฉื ืืจื ืืืช ืืืืืื ืฉ"CFLAGS", ืื ืื ืฉืืืฉืชืืฉ ืืืื ืืืื ืืก,
ืชืืื ืืชืืื ื-"-Wall" ืื ืฉืชื ืืฉืืจืืช ืืืืืช:
CFLAGS = -O2 # ืืืื ื ืืืง ืืฉืืจืช ืืคืงืืื
ืืขืงืืฃ CFLAGS &= -Wall # ืืืงืฃ ืืจืืฉ ืืื ืชื ืื
ื-makefiles ืืฉื ืื ืืืจื ืืื ืืืืช ืฆืจืื ืืขืฉืืช ืืฉืื ืืื, ืฉืืฉ ืื ืืช ืืฆื
ืืฉืคืขื ืฉื ืืืืืฅ ืืกืื ื":=" ืืื ืืื ืืข ืืืจื ืืื ืกืืคืืช:
ืืฉืชื ื := expr $(VARIABLE)
?=
ืืฉืชื ื ?= expr
override VARIABLE ?= expr # ืืกืจ ืชืืขืืช, ืืื ืืืงื
ืืืืืจ ืืช ืืขืจื ืฉื ืืืฉืชื ื, ืื ืจืง ืื ืืืฉืชื ื ืื ืฆืืื ืงืืื ืืื
ื-makefile, ืืฉืืจืช ืืคืงืืื ืื ืืกืืืื. ืืืฉืืื ืืขืื ืืื
ืฉืืื ืืืืืง ื
ifndef ืืฉืชื ื
ืืฉืชื ื = expr
ื
!=
VARIABLE != ืคืงืืืช ืืขืืคืช
ืืขืงืืฃ ืคืงืืืช VARIABLE != ืคืื
ืืคืขืื ืืช ืคืงืืืช ื- shell ืืืืืืจ ืืช ืืืฉืชื ื ืื ืฉืืืื ืืช ืืคืื ืืกืื ืืจืื ืฉื ืืคืงืืื.
ืื ืืืืืง ืฉืืื ืขืจื ื
VARIABLE := $(ืคืงืืื shell)
ืจื ืงื ืืฉืชื ืื
ืืืฉืคื "ืืืืจ" ืืื ืืืงืืืื ืืจืืืช ืฉืืจืืช ืฉื ืืืฆืืจืืช ืืคืฉืืืืช ืืขืื. ื
ืืืคืจืืืจ ืืืจื ืืืฉืชื ื ืืื ืืืคืฆืืื ืื. ืื ืืกืจ, ืื ืฉืืื ืขืจื ื"ืืืืจ VARIABLE
=". ืืืืคืจืืืจืื "&=" ื-"+=" ืฉืื ืื ืืืงืฆืช ืืื, ืืื ืฉืื ืืืืืงืื ืืช ืื
ืืขืจื ืืืฉื ืขื ืงื ืืืฉ, ืืื ืจืืื. ืืกืืจ ืฉืืืื ืฉืื ืืืจ ืืืื ื
ืชืืืื ืืืจื ืืืฆืืจื, ืืืืืจ ืืขืจื ืืชืืื ืืฉืืจื ืืืื.
ืืืืจ ืืฉืชื ื :=
ืฉืืจื ืจืืฉืื ื ืฉื ืขืจื ืืืฉืชื ื
ืฉืืจื ืฉื ืืื ืฉื ืขืจื ืืืฉืชื ื
ืฉืืจื ืฉืืืฉืืช ืฉื ืขืจื ืืืฉืชื ื
endef
ืืขืงืืฃ ืืืืจืช VARIABLE
...
enddef
ืืืืืช ืืคืชื ืืคื ื "ืืืืืจ" ืืืืืืช ืืืืืช ืฉืืืืืื ืฉื "ืืืฆืื" ืื "ืืืืืื" ื
"ืขืงืืฃ".
ืื ืืชื ืฆืจืื ืฉืขืจื ืฉื ืืฉืชื ื ืืืื ืฉืืจืืช ืืืฉืืช, ืขืืื ืืืฉืชืืฉ ืืืฉืคื "ืืืืจ" ื
ืืืฆื (ืื ืฉืืชื ืืืื ืืืงืฆืืช ืืช ืืขืจื ืืฉืืจืืช ืืคืจื). ("endef" ื ืืืจ ืขืืืจ
ืชืืืืืช ืืืฆืจื GNU. ืืชื ืืืื ืื ืืืฉืชืืฉ ื-"enddef".) ืื ืฉืืืืฉื ืืขืืงืจ ืขืืืจ
"ืจืฆืคื ืคืงืืืืช ืืฉืืืจืื", ืืืฉื, ืืฉืื ืืื:
ืืืืจ COMPILE_C_PROGRAM
@&echo "ืงืืืคืืืฆืื ืฉื $(ืงืื)"
@$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(ืงืื) -o $(ืคืื)
endef
ืื ืืชื ืืืื ืืืฉืชืืฉ ืืืฉืชื ื ืืจืืื ืฉืืจืืช ืื ืืืื ืืืืื, ืืื ืื:
%.o : %.c
$(COMPILE_C_PROGRAM)
$(ARCH)/%o : $(ARCH)/%c
$(COMPILE_C_PROGRAM)
ืฉืืื ืื ืฉืืขืืชืื ืงืจืืืืช ืชืืืื ืืืฉืื ืืช ืืืชื ืืคืงื ืขื ืืื ืฉืืืืฉ ืื ืงืืื-ืคืกืืง ืืืงืื ืืฉืืจื ืืืฉื,
ืื ืืงืืืคื ืืคืจืฉืช ืืช ืื ืื ืืืืืื ืคืงืืื. ืืืืืื,
COMPILE_C_PROGRAM = @echo "ืงืืืคืืืฆืื ืฉื $(ืงืื)"; \
$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(ืงืื) -o $(ืคืื)
ืืืื ืืืชื ืืคืงื, ืคืจื ืืื ืฉืื ืงืืื-ืคืกืืง ืืืืฅ ืืช ืคืจื ืืืขืืืจ ืืืชื ืืงืืืคื,
ืืืงืื ืืืฆืข ืืช ืืคืงืืื ืืฆืืจื ืืฉืืจื ืืืขืืื ืืืชืจ. ืืชื ืื ืฆืจืื ืืฉืื ืื ืืื
ืืืื ื ืขื ืงื ืืฉืื, ืืืืืจ ืืชื ืฆืจืื ืืขืืืจ ืืื ืืืืฆืื ื ื-
ืืงืจื ื ืงืืื-ืคืกืืง.
ืืฉ ืืชืืืืช ืืืช ืืืฉืจ ืืชืจืืืื ืืชืื "ืืืืืจ", ืืืืืจ "ืืืืจ X :=" ืื ืขื a
ืืฉืชื ื ืฉืืืจ ืืื ":=", "define X &=" ื-"define X +=". ืืืงืจื ืื ื
"$(ืคืงืืื ืฉื ืืขืืคืช ...)" ืื "$(&command ...)" ืืืืื ืืช ืื ืืืคืื ืืช ืฉืืจืืช ืืืฉืืช ื
ืจืืืืื.
ืืฆืื ืืฉืชื ืื ื ืชืืืืื ืืฉื ื
ืืืฆืื VAR...
ืืืฆืื VAR = ืขืจื
ืืขืงืืฃ ืืช ืขืจื VAR += ืืืืฆืื
ืืืืคืก ืืจืืฉืื ืืกืื ืืช ืืืฉืชื ืื ืื ืชืื ืื ืืืืฆืื ืืชืืืืื ืืฉื ื, ืืื ืขืจื
ืืืฉืชื ื ืืฉ ืื. ืืฆืืจื ืืฉื ืืื, ืืืื ืจืง ืขื ืืฉืชื ื ืืื, ืื ืืกืฃ
ืืงืฆื ืขืจื ืืื. ืื ืืจืกืืืช ืืืงืฆืื ืืืชืจืืช.
ืฉืืชืืฃ ืืฉืชื ืื ืืจืืื makefiles
VAR ืืืืืื...
VAR ืืืืืื = ืขืจื
ืืขืงืืฃ ืืช ืขืจื VAR &= ืืขืืืื
ืืืืคืก ืืจืืฉืื ืืกืื ืืช ืืืฉืชื ืื ืื ืชืื ืื ืืืืืืืืื ืืื ื-makefiles. ืื ืืืฉืื ืืื
ืืืจ ืืื ืขืจื, ืืขืจื ืืื ืืืขืืจ ืืืืฉืชื ื ืืืงืืื makefile ืืืฉืชื ื ืืืืืืื
ืืื. ืขื ืืืช, ืื, ืืืื ืืืฆืืจื ืืื, ืืื makefile ืืืจ ืืืจ ืืื ื
ืขืจื ืขืืืจ ืื ืืื ืืื, ืื ืืงืืฆืื ืืืื ืื ืืจืื ืืช ืืืืืืื.
ืืฆืืจื ืืฉื ืืื, ืืืื ืจืง ืขื ืืฉืชื ื ืืื, ืืงืฆื ืื ืืกืฃ ืืืืช ืขืจื
ืจึธืืึนืง. ืื ืืจืกืืืช ืืืงืฆืื ืืืชืจืืช. ืฉืื ืื ืฉ":=" ืืชืจืื ืืื
ืืขืจืืื ื-makefile ืืืงืืื. ืืืืคื ืืฉืชื ื "=" ืืชืจืืื ื-
ืขืจืืื ืื ืงืืืช ืืฉืืืืฉ.
ืืฉืชื ืื ืืืืืืืื ืืืืืื ืืืืืช ืืกืืืืื ืืืชืืืืืืช, ืืืืืื ืฉ-makepp ืขืฉืื ืืืขืื ืงืืฆื makep ืืื
ืกืืจ, ืืื ืฉืขืืื ืืฆืืจื ืืื ืืช ืืืจื ืืืฉืื ืฉืขืืืจื ืื ื ืืขื ืืื ืื makefile.
ืืกืืื ืื ืืืืืฅ ืืืืืืง ื RootMakeppfile ืืืื ืืืขืื ืืช ืืืื ืืืคืืจืฉ
ืืืจืื ืฉืืฉื ืื ืื ืืฉืชืืฉืื ืืืฉืชื ื ืขื "load-makefile".
ืืืืืื GLIBLIBS ;= $(shell pkg-config --libs glib-2.0)
ืืื ืื, ืฉืื ืื ืฉืืคืจืืืงื ืฉืื ืขืฉืื ืืื ืืื ืืืืื ืืช ืืื ืขื ืคืจืืืงืืื ืืืจืื. ืืื
ืืกืืื ืืื ืฉืืืืืฅ ืชืืื ืืืคืื ืืช ืฉื ืืคืจืืืงื ืืืืง ืืื ืฉื ืืฉืชื ื ืืืืืื.
ืกืคืฆืืคื ืืืืจื ืืงืฆืืืช
ืืขื: VARIABLE = ืืืจืืืช
target: VARIABLE := ืืืจืืืช
ืืขื: ืืขืงืืฃ ืืืจืืืช += VARIABLE
ืืืืืจ ืขืจื ืกืคืฆืืคื ืืืขื ืฉื ืืืฉืชื ื. ืงืืื ืขืจื ืกืคืฆืืคื ืืืขื ืจืง
ืืคืขืืื ืืฉืจ ืืืืฆืจืช ืืช ืืืืจื ืื ืชืื ื. ืื ืืฉืืฉ ืืขืืงืจ ืืืืจืื ืืื
ืึถื:
CFLAGS := -O2
my_prog: file1.o file2.o special_file.o
special_file.o : CFLAGS := -g
%.o: %.c
$(CC) $(CFLAGS) -c $(ืงืื) -o $(ืคืื)
ืื ืฉืงืืจื ืืื ืืื ืฉืื ืงืืฆื ".c" ืืืจืืื ืขื ืืืคืืืืืืฆืื ("-O2") ืืื
"special_file.c", ืืฉืจ ืืืืืจ ืืืฆื ื ืืคืื ืืืืื ("-g"). ืืืื ืืจื ื ืืื ืืขืฉืืช ืืืช
ืฆืืื ืืคืฉืจืืืืช ืงืืืคืืืฆืื ืฉืื ืืช ืขืืืจ ืืกืคืจ ืงืืฆืื ืืืื.
ืืงืฆืืืช ืฉื ืืฉืชื ืื ืกืคืฆืืคืืื ืืืืจื ืืื ืื ืืืืช ืจืง ืขื ืืคืขืืืืช ืฉื ืืืื; ืึตื
ืืื ื ืืชืืงืฃ ืืขืช ืืขืจืืช ืืืขืืื ืื ืืชืืืช ืฉื ืืื. ืื ืืื
ืืฉ ืืืชืจ ืืืขื ืืื, ืืงืฆืืืช ืืฉืชื ืื ืกืคืฆืืคืืืช ืืืขื ื ืืงืืืช ืจืง ืื-
ืจืืฉืื ืึทืขึทื. ืฉืื ืื ืื ืฉืืืฉืชื ืื ืืกืคืฆืืคืืื ืืืขื ืฉื makepp ืฉืื ืื ืืืงืฆืช
ื-GNU make's ืืื ืฉืื ืืืื ืจืง ืขื ืืืื ืขืืืจ ืืงืืืฅ ืืืื ืฉืืืืืจ, ืืื ืขื
ืื ืืื ืืงืืืืื.
ืืจืืืช ืชืืืื ืืืืืื ืืืืฆืขืช ืขื ืืืขื, ืื ืืชื ืืืื ืืขืฉืืช ืืฉืื ืืื:
test_*.o : CFLAGS += -DTEST
ืืฆืืจื ืชืืืืืช ืขื ืืืชื GNU, ื ืืชื ืืืฉืชืืฉ ื-"%" ืืืงืื "*".
ืึดืฉืึฐืชึทื ึถื ืืืืคื
ืืืื ืืืืืคื ืืืฉืชื ืื ืฉื Makepp ืืืืื ืืืื ืฉื ืืฆืจื ืื ืืืจืื, ืืื ืืืืืช ืื
ืืืง ืืืชืจ. ืืื ืืื ืืืฆืจื ืื, "$(CC)" ืื "${CC}" ืฉื ืืื ืืืืฆืืื ืืช ืืขืจื ืฉื ื-
ืืฉืชื ื CC. ืื ืืชื ืฆืจืื ืกืืื ืืืืจ ืืืืืื, ืืื ืก ืกืืื ืืืืจ ืืคืื ($$), ืืื
ืึถื:
ืืขื: dep1 dep2 dep3 dep4
&rm -f $(ืคืื)
ืขืืืจ ืงืืืฅ ื-$(ืื ืืกืืช); do cat $$file >> $(ืคืื); ืืืฆืข
ืื ืืกืฃ ื-makepp ืืฉ ืชืืืืจ "$[VARIABLE]", ืฉืขืืฉื ืืช ืืืชื ืืืืจ ืืื ืืฉื ื
ืฉื ืืื, ืืื ืืคื ื ืฉืืืืงืค ืืจืืง ืื ืืืจ ืืืจ. ืื ืืืคืฉืจ ืืืฉืชืืฉ ืื ืขืืืจ ืืืืื ืืืืื
ื/ืื ืชื ืืื:
ืืืืจ Bracket_rule =
ifdef SOME_VAR
ืกืึนืึตืจ:
&echo ืื ืืื -o $(ืคืื)
ื
enddef
$[bracket_rule]
ืืกืื ืื rc ืืืืคื
ืืืจืืจืช ืืืื, makepp ืืฉืชืืฉ ืืืืืคื ืืกืื ืื rc (ื ืงืจื ืื ืืืืืื ืฉืืื ืืื ืืืืฅ ืขื ืืื
ืืขืืคืช rc). ืื ืืืืืฉ ืืฆืืจื ืืืืื ืืืืชืจ ืขื ืืื ืืืืื:
MODULES = abcd
mylib.a : module_dir/$(MODULES).o $(OTHER_OBJECTS)
$(CXX) $(dependencies) -o $(target)
ืืงืืืืืช "module_dir/" ืืืฆืืืช ืืคื ื ืื ืืืื ื-MODULES, ืืืกืืืืช ".o" ืืื
ืืฆืืจืฃ ืืื ืืืื.
ืืชื ืืืื ืื ืืืฉืชืืฉ ืืืืืคื ืืกืื ืื rc ืืคืืื ืืื ืืืื ืืก ืืช ืจืฉืืืช ืืืืืื ืืชืื a
ืึดืฉืึฐืชึทื ึถื; ืืชืืืืจ ืืื "$( word1 word2)". ืฉืืื ืื ืืจืืื ืืื ืืกืืืจืืื ื-
ืืืื ืจืืฉืื ื. ืื ืืืืืื ืฉืืืขืื ืืืืชื ืืืืื ืืืืืชื ืื:
mylib.a : module_dir/$( abcd).o $(OTHER_OBJECTS)
$(CXX) $(dependencies) -o $(target)
ืืฉืชื ื ืืืชื ืืืืคื ืืกืื ืื rc ืจืง ืืืฉืจ ืืฉ ืื ืืืชืจ ืืืืื ืืืช.
ืืืืื ืืืช ืื ืืื ืชืืฆืจืช ืืกืืจืชืืช. ืืืื, ืืืฉืจ ืืืฉืชื ื ืจืืง, ืืฉ ื
ืกึฐืชึดืืจึธื. ืืฆืจื ืื ืืกืืจืชืืื ืคืฉืื ืืจืืืืื ืืืชื ืืืืจืืืช ืืจืืงื. ืืื ืืฉืืืฉืืื ืขื
ืื ืืชืืจ ืจืฉืืื, ืืืืช ืจืืฆื ืฉ-"-I$(DIRLIST)" ืืืขืื, ืื ืืชื "-I ืืืื". ื
ืืคืชืจืื ืืื ืืขืืืฃ ืืืชื ืืจืฉืืื ืฉืืชืืืื ืืจืืื: "-I$( $(DIRLIST))" ื ืืชื ืื
ืืืืืง ืืื ืืจืื ืืคืฉืจืืืืช, ืืื ืฉืืฉ ืืืืื ืืจืฉืืื.
ืื ืชืฉืื ืืื ืืฉืชื ืื ืืืืชื ืืืื ืฉืืชืจืืืื ืืืขืจืืื ืฉื ืืืืื, ืืกืื ืื rc
ืืืืคื ืืืขืฉื ืืืงืืช ืืช ืืืืฆืจ ืืงืจืืืืื ื, ืื ืืชื ืืืื ืืขืฉืืช ืืฉืื ืืื ืื
ืืชื ืจืืฆื:
DIRS = s1 s2
MODULES = abc
SUFFIXES = .o .c
ืงืืฆืื := $(DIRS)/$(ืืืืืืื)$(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 ื ืขืฆืจืช ืืื ืฆืืืื, ืื ืขืืื, ืืชืืืชื ืื ืืจืืืข
ืกืืืจืืื, ืืื ืืื ื", : ; = # @". ืฉืืื ืื ืฉืื ืขืฉืื ืืืืืช ืืคืชืืข, ืืฉืื ืฆืจืื
ืจืฉืืื ืืคืืจืฉืช. ื ื ืื ืฉืืชื ืจืืฆื ืืืคืฉ ืืืชืจืืช ืืคื ืชื ืืืื ืืื ืืกืคืจืืืช
ืืชืืื ืืืืช ืืืืื:
BAD := [AZ]*/**/*.$( hpp h) # [AZ]*/**/*.hpp */**/*.h
GOOD := $( [AZ]*/**/*.)$( hpp h) # [AZ]*/**/*.hpp [AZ]*/**/*.h
ืื ืืืืืฃ ืืกืื ืื rc ืืคืจืืข, ืื ืื ืืชื ืฆืจืื ืืืืืื ืื ื ืืจืจ
ืจืืื ืืื ืืืฉืชื ื ื-make ืฉืื, ืืื ืชืืื ืืืื ืืช ืืืืืคื ืืกืื ืื rc ืขื ืืื ืืืืจื
ืืืฉืชื ื "makepp_simple_concatenation=1". ืืชื ืืืื ืืืืืช ืืืชื ืืืืคื ืืืืืื ืืคืงืืื
ืงื ืื ืืืฉืชื ื ืกืืืื. ืื ืขื ืืกืืก ืืื ืงืืืฅ ืขื ืืื ืืืืจืช ืืืฉืชื ื ื
ื-makefile ืฉืื. ืืชื ืฆืจืื ืืขืฉืืช ืืืช ืืื ืืืืง ืืขืืืื ืฉื ื-makefile, ืืืจืช ืืชื ืขืืื ืืืืชืงื
ืืฆืืื ืืฆืืืงืื ืฉืืื ื ืขืฉื ืฉืืืืฉ ืืืืืคื ืืกืื ืื rc ืขืืืจ ืืขืจืืืช ืืกืืืืืช ืืื ืืืจืืช.
(ืื ืืืืืืืื ืฉืืืขืจืื ืืคื ื ืืืืื ืืฉืชืืฉื ืืืืืคืืช ืืกืื ืื rc, ืืืื
ืืืืืืื ืฉืืืขืจืื ืืืืจ ืื. ืืื ืืื ืืืขืจืื ืฉื ืืืืืืื ื
makefiles ืืื ืืกืืื ืืื ืชืืื ืืจืืจ ืืกืืจ ืืืฆืืจืืช ื-
makefile, ืขืืืฃ ืืืืืืจ "makepp_simple_concatenation" ืืืงืื ืืื ืืืคืฉืจ.) ืืชื ืืืื
ืืคืืื ืืืืจ ืืืชื ืจืง ืืืืจื ืืืช:
ืืขื: makepp_simple_concatenation = 1
ืึทืขึทื:
&echo before_first$(LIST)after_last -o $(output)
ืืืืืื ืฉ-"$[VARIABLE]" ืืืขืจื ืืืงืื ืืืชืจ ื-"$(VARIABLE)", ืฉืืืื ืืฉื ืืื ื- rc-
ืืืืคื ืื ืชืืชื ืืช ืืชืืฆืื ืฉืืชื ืขืฉืื ืืฆืคืืช, ืืื ืื ืชืขืืืฃ ืืืชื ืืืคืืจืฉ
ืจืฉืืื:
ื = ืื
N = 1 2
BAD := $(A)$[N]
ืืื := $(A)$( $[N])
ืืฉืืจืืช ืืืืจืื ืืช ื ืงืจืืืช ืืชืืจ
BAD := $(A)1 2 # a1 b1 2
GOOD := $(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) # ืืื, ืื . ืืื ื ืืืืื
ืืจืื ืืื in ืืฉืชื ืื
ืื ืืชื ืฆืจืื ืืฉืืื ืืจืืื ืืืื ืืืฉืชื ื, ืขืืื (ืืจืืข) ืืืฉืืืช ืืช ืกืื ืื rc
ืืืืคื (ืขื ืืื ืืืืจืช "makepp_simple_concatenation=1") ืืืืืจ ืืื ืืฉืชืืฉ ืืชืืืืจ ืืื ืื:
null =
T = -o $(null)
ืื, ืขื ืืขืจืื ืจืืงื:
T = -o $()
ืืืฉืจ ืืชื ืขืืฉื ืืืช, ืืืฉืชื ื "T" ืืืื "-o" ืืืืจืื ืจืืื.
ืกืื ืื ืฉื ืืื ืืงื ืืืืคืื ืืจืืื ืืื ืืื ื ืืืืืฅ. ืื ืืชื ืฆืจืื ืืฉืชื ืื
ื-makefile ืฉืื โโืืื ืืืืื ืจืืืืื, ืขืืื ืืืฉืื ืืจืฆืื ืืช ืขื ืื ืฉืืชื ืขืืฉื.
ืื ืืชื ืฆืจืื ืืืคื ืืจืืืืื, ืื ืืืจื ืืื ืืจืื ืืืชืจ ืืื ืืืื ืืก ืงืื Perl ืืชืื ืฉืื
makefile ืืืคื ืื (ืืืืฆืขืืช ืืืฆืืจืืช "perl_begin" ืื "ืชืช"), ืื ืืืคื ืื
ืืืฆืืจืืช ืืขืืคืช ืืคืขืืืืช ืฉื ืืืืื.
ืืงืจืื ืืื ืืืคืืขืื ืืืจื ืืื ืืืฉืจ ืื ืฉืื ืื ืกืื ืืืฉืชืืฉ ืืืืชื ืืืืื ืขืืืจ ืฉืื ืื
ืืจืืืืงืืืจืืช ืฉืืื ื ืืฉืชืืฉืืช ืืชืืืืจ ืคืงืืืืช Unix ืืืคืืกื. ืืืฉื, ืืคืขืืื ืจืืืื
ืืืจืื ืืื ืื ื-makefiles:
ifeq ($(ARCH),weirdarch)
O := /OUTPUT=
ืืืจ
null :=
O := -o $(null)
ื
%.o : %.c
$(COMPILER) $(input) $(O)$(output)
ืืชื ืืืื ืืขืฉืืช ืืช ืื ืขื makepp ืื ืืชื ืืืืช ืจืืฆื, ืืื ืืชื ืื ืจืื ืชืืื ืฉืื ืฉืื
makefiles ืงืจืืืื ืืืชืจ ืืืืื ื ืืืจืช ืื ืืฉ ืื ืืฉืชื ื ืคืืืช ืืกืืื
ืืืืคื, ืืืฉื,
ifeq ($(ARCH),weirdarch)
%.o : %.c
$(WEIRD_COMPILER) $(ืงืื) /OUTPUT=$(ืคืื)
ืืืจ
%.o : %.c
$(CC) -c $(input) -o $(output)
ื
ืจืืื ืืื ืืขืืื ืืื ื ืืืชืจ ืืฉืืืช ืืฉืชื ืื, ืจืง ืืขืจืืื ืฉืืื. ืื ืฉืื ื
ืืืื ืืืฉืืืื.
ืืื ื ืขื ืกืืืื ืืืืืืืืช ืืฉืชื ืื
ืืฉืชื ืื ืืืืืืืืื ืื ืืฉืชื ืื ืืื ืืืื ืขืจืืื ืฉืื ืื ืืืชืื ืืืืื ืืื
ืื ืืืขืจืืื ื. Makepp ืชืืื ืืจืื ืืืฉืชื ืื ืืืืืืืืืื ืืืจืื
ืืจืกืืืช ืฉื ืืขืฉืืช ืฉืืืืฉ. ืื ืืกืฃ, ืืฉ ืื ืฉืืืช ืคืืืช ืงืจืืคืืืื ืืืจืืืื ืืจืืื
ืฉืืชื ืืืื ืืืฉืชืืฉ ืื ืืืงืื. (ืขืืืจ ืงืืฆืื ืืืืจ ืงืืื ืฉืืืงืจื ืืืืืจืื ืืืืฉ ืืช ืืฉืืืช ืืืื, ื
ืืืืืจื ื-makefile ืขืืงืคืช ืืช ืืฉืืขืืช ืืจืืจืช ืืืืื. ืืืฉื, ืื ืืชื ืืืืจ
"target = abc" ืืงืืืฅ ื-makefile ืฉืื, ืืื "$(target)" ืชืืื ืืชืจืื ื-"abc", ืืื
ืืืชืจ ืืืืืช ืฉืืื ืขืจื ื$@.)
ืืืื ืจืฉืืื ืืืื ืฉื ืื ืืืฉืชื ืื ืืืืืืืืืื ืฉืชืืื ืืื makepp:
ืชืคืืงื
ืืขื
$@ ืืืขื ืฉื ืืืื ืื ืืืื. ืืืขืฉื, ืืื makepp ืชืืื ืืืกืคืจ ืืขืืื ืขืืืจ
ืื ืืื, ืื ื ืจืืฉืื ืึทืขึทื. ืืืฉื, ืืืื ืืื
y.tab.c y.tab.h : parser.y
$(YACC) -o $(ืคืื) $(YFLAGS) $(ืงืื)
"$(ืคืื)" ืืืื ืืช ืืขืจื y.tab.c. ืืื ืืฉืชื ื ืงืกื ืืื ืื ืืืขืฉื
ืคืื ืงืฆืืืช, ืืชื ืืืื ืื ืืืขืืืจ ืืื ืืงืก ืืืจืืืื ื. ืื ื ืืฉื ื-1 ืื ืืืืจื
ื - 1. ืื "$(ืคืื 2)" ืื "$(ืคืื -1)" ืืืืื ืืช ืืขืจื y.tab.h.
ืืขืื ืฉืืื ืฉืืืฉ ืืฆืืจืืช ืฉื ืืฉืชื ื ืื ืืฉ ืขืจื ืืื, ืืฉ ืืืื ื
ืคืจืฉื ืืช ืืืืงื ืจืืืื ืืืจืืช. ืื ืืชื ืืฉืชืืฉ ืืฉื ืืืฉืืฃ ืืกืื ืื ืืืฉื $@,
makepp ืืคืจืฉ ืืช ืื ืืืขืจืืช ืืืงืื ืืกืื ืื ืืฉื, ืืื ืืืืง ืืืืจื ื
ืืืืฆืจ ืืช ืื ืืืืจืืช ืืืื ืืืื ืืืช:
ab: # ืืืืช: ืืื ืืื ืื ืืื ืขืืืจ a ื-b
ืืข ื-$@
cd: # ืฉืืืื: mpp ืืชืืื ื ืฉืื ืื ื ืื ื ืืช d
ืืข ื-$(ืคืื)
ืคืืืื
ืืืจืืช
ืื ืืืืจืืช ืฉื ืืืื ืื ืืืื. ืืื ื-"$(target)" ืืื ืื ืื ืืฉ ืืืชืจ ืืืื
ืึทืขึทื. ืืืืืื ืฉืืืขืื, "$(ืคืืืื)" ืืืื y.tab.c y.tab.h. ืืชื ืืืื ืืขืืืจ ื
ืจืฉืืืช ืืื ืืงืก, ืื "$(ืคืืืื 2 1)" ืืืื y.tab.h y.tab.c.
ืืชืืืช
ืงืื
$< ืืชืืืช ืืืคืืจืฉืช ืืจืืฉืื ื ืฉื ืืืื. ืืืฉื, ืืืื ืื
%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืื) -o $(ืคืื)
"$(ืงืื)" ืืืื ืืฉื ืฉื .c ืงืืืฅ, ืืื ืงืฉืจ ืืื .h ืงืืฆืื makepp
ืืืื. ืื ืืชื ืืฆืืื ืืืชืจ ืืชืืืช ืืืช, ืืชื ืืืื ืืงืื ืืืชื ืขื ืืื ืืขืืจืช
index: "$(ืงืื $(INDEX))" ืืื ืืชืืืช ืฉื INDEX.
ืชืืืช
ืชืฉืืืืช
$^ ืื ืืชืืืช ืืืคืืจืฉืช ืฉื ืืืขื, ืื ืืืื .h ืงืืฆืื ืฉืืชืืื ืขื ืืื
makepp_scanning for include.
ืืืฉื, ืืืื
myprog.o : *.o
$(CC) $(CFLAGS) $(ืื ืืกืืช) -o $(ืคืื)
"$(ืื ืืกืืช)" ืืืื ืื ืงืืฆื ื-.o ืืกืคืจืื. ืืชื ืืืื ืืืืืจ ืจืง ืืช ืืื ืฉืืชื
ืจืืฆื ืขื ืืื ืืขืืจืช ืจืฉืืืช ืืื ืืงืก. ืื ืืชื ืืฆืืื ืืืคืืจืฉ ืกืืืื ืฉืื ืื ืฉื ืงืืฆืื,
ืืชื ืืืื ืืืืืจ ืืืชื ืืื ื"$(ืื ืืกืืช 2 3 4)" (ืืื ืขื ืชื ืืืื ืื ืื ืืื
ืึทืึฐืึดืืึท).
ืืืื_ืชืืืช
ืืืืื ืื_ืื ืืกืืช
$+ ืื ืืชืืืช ืฉื ืืืขื, ืืกืืจ ืืืืื, ืืฉืืืคืืืืืืช ืืืกืจื.
ืฉืืื ืขืจื ื-"$(ืืืื $(ืชืฉืืืืช))".
ืชืืืืืช_ืฉืื ืื
ืฉืื ื_ืื ืืกืืช
$? ืืชืืืช ืฉื ืืืขื ืฉืืฉืชื ื. ืื ืืืื ืจืง ืืคืืจืฉ
ืชืืืช (ืืืืืจ, ืืื ืฉืืชื ืืคืจื ืืงืืืฅ makefile), ืฉืื ืืชืืื ืืืจืืื
ืชืืืช ืืกืจืืงื (ืืืื ืงืืฆื .h).
ืื ืืฉืืฉ ืืืจื ืืื ืืคืงืืืืช ืืื ืืื:
libmine.a : $(ืืืืืืื) : build_check ignore_action
$(AR) ru $@ $?
ืืืืืจ, ar ื ืืืจ ืืืืืืฃ ืจืง ืืช ืืืืืืืื ืฉืืฉืชื ื. (ืฉืืื ืื ื
ืืื ืืืืงืช ืืื ืืื "ignore_action". ืื ืื ืชืฆืืื ืืืช, makepp ืืืืฅ ืืช
ืคืขืืื ืฉืชืชืืฆืข ืืื ืคืขื ืฉืืื ืืฉืชื ื. ืื ืื ืืฉืชื ื ืชืืืช, ื
ืืืจืืืช ืืคืขืืื ืชืืื "ar ru libmine.a" ืฉืืื ืื ืจืื ืฉืื ื ืืื ืฉืืืืชื
ืืคืขื ืืืืจืื ื ืฉืืจืฆืช ืืช ืื, ืื ืืื "ignore_action" makepp ืืืฆืข ืืช ืื. ืืื
ืืืงืจื, ืื ืื ืืืืง, ืืื ืขื ืคืงืืืืช ืืืจืืช, ืื ืืืื ืืืืืช ืืขืื. ืึดืจึฐืืึนืช
makepp_build_check ืืงืืืช ืคืจืืื ืขื "ignore_action".)
ืื ืืืช ืืจืืืื ืื ืืื ืืื ืื ืจืขืืื ืืื ืื ืื ืืคืืืช ืืช ืืื ืืื ืฉืื
ืึธืึดืื. ืืืขืื ืขื ืื ืืื ืฉืื ืืชื ืืื ื ืืช ืืืจืืืื, ืื ืืกืจ ืืื ืืื
ืืืืืืืื ืืจืฉืืืช ืืืืืืืื, ืืืืืืืื ืขืืืื ืืืื ืืืจืืืื ื
makepp
ืืืข
$* ืืืืข ืืืื ืืคืืก (ืืืืืจ, ืื ืืฉื ื ืื ื-'%' ืชืืื). ืืืืืืคืื, ืื ืื
ืืื ื ืืื ืืคืืก, ืืืืืจ ืืช ืฉื ืืงืืืฅ ืืื ืืกืืืืช (ืืืืืจ, ืื
ืฉืืื ืขืจื ื-"$(basename $(input))".
ืื ืืขืืงืจ ืืฉืืื ืชืืืืืช ืืืืืจ. ืืืืืื, ืืืจืกืืืช ืืฉื ืืช ืฉื make the
ืืืจื ืืืืืื ืืืืจ ืื ืืื ืืืจืืื ืื .c ืงืืืฅ ืืชืื ืืืชืืื .o ืืงืืืฅ ืืื ืืื
ืึถื:
.ืฉืืชืืฃ:
$(CC) $(CFLAGS) -c $*.c -o $*.o
ืื ืืจื ืขืืืื ืืืชืื ืืช ืืืื. ืืจืื ืืืชืจ ืืจืืจ ืืืฉืชืืฉ ืืกืื ืื ืฉื GNU
ืืืื ืืคืืก, ืืื ืื:
%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืื) -o $(ืคืื)
foreach
ืฉื ืืงืืืฅ ืื ืืืื ืืกืขืืฃ "foreach". ืืขืชืื ืจืืืงืืช ื ืขืฉื ืฉืืืืฉ ืืกืขืืคืื ืฉื "foreach",
ืืื ืื ืืกืื ืืืืื ืืืืชืจ ืฉื ืืื ืืคืืกืื ืฉ-makepp ืชืืื ืื. ื
ืืืืื,
#
# ืื ื ืงืืฆื .c ืขื ืกืื ืฉื ืืขืื ืงืื ืืืืื:
#
%.c : %.k
$(ืงืื ืืขืื) $(ืงืื) > $(ืคืื)
#
# ืืืืืจ ืงืืฆื .c ืืงืืฆื .o:
#
%.o : %.c
$(CC) $(CFLAGS) -c $(ืงืื) -o $(ืคืื)
#
# ืืืื ืืืืืจ ืืืืคืืื ืืืืืืื ืขืืืจ ืงืืฆื .c ืฉื ืืืจื
# ืืงืืฆื โ.k:
#
$(foreach:%k=%.o) : $(foreach:%k=%.c) :foreach *.k
$(CC) $(SPECIAL_K_FLAGS) -c $(ืงืื) -o $(ืคืื)
ืจืื ืืช ืืชืืขืื ืขื ืืกืขืืฃ ืืงืืื ืืืืืื ืืคืจืืื ื ืืกืคืื ืืืืืืืืช.
$/ ืืื ืืขืฆื ืงืืืข, ืื "/", ืื ื-Windows ืืงืืจื "\". ืืชื ืฆืจืื ืืช ืื, ืื
ืืชื ืจืืฆื ืืืคืขืื ืชืืื ืืช ืืฆืืจื ื ืืืืช, ืืืฉื ืืืช ืฉืื ืืช ืืกืคืจืืื ืื ืืืืืช:
ืคืื ืฉืื:
.$/myprog >$(ืคืื)
ืขืืืจ ืฉืืืช ืงืืฆืื ืฉืืืขืืจื ืืืจืืืื ืืื ืื ืื ืื ืื ืืืจืื ืืืืืื ืฉ-Windows ืืืื ืืืชืืืื ืขื Unix
ืชืืืืจ ืฉื.
ืืคืฉืจืืช ืืฉืชื ืื
ืืชื ืืืื ืืืืืืจ ืืืชื ืืื ืืืจืืื ืฉืืืกืืจ ืืขืื (ืืืขื ืื ืฆืืื ืืืจืช) ืืื ืืฉื ืืช
ืืืชื ืืืืช ืฉื ืืืืงื. ืืืจืืจืช ืืืื, ืืืื ืื ืืืืืจืื.
MAKEPP_DEBUG
ืื ืืชื ืืืืฆื ืืช ืื ืขื ืขืจื ืืืืชื ืืคื ื ืฉืืชื ืงืืจื ื-makepp, ืืชื ืืงืื ืืืชืจ ื ืืคืื ืืืืื
ืืืืข. ืืื "RULE_SOURCE" ืฉื ืงืืฆืื ืฉื ืื ื ืืืื ืฉืื ืืชืืงืฃ ืชืืช
makeppinfo, mppi ืืคืจืืื ืขื ืืจืืืช ืืฉืชื ืื ืืืชืืืช ืืืืื ืชืืช
makepplog, mppl. ืื ืื ืืจืื ืื ืื ืืืืืงืืค ื ืืืจ ืืืืืจืื ืื ื ืชืงืข,
ืื ืื ืืจืืื ืืื ืกืืฃ ืืช ืืืชื ืืฉืชื ืื:
A = $A # ืืขืจืื ื ืืืืช, ืฆืจืื :=
B = $C
C = $B
MAKEPP_LN_CP
ืจืื ืืช ืืืขืจื ืชืืช &ln.
makepp_percent_subdirs
ืืืืจ ืืช ืื ืืขืจื ืืืืชื ืืืฉืื (ืืื 1) ืืื ืฉืืืื "%" ืืืชืืื ืฉื ืืขืืื ืื ืชืืืช
ืขื ืคื ื ืืืชืจ ืืืืจืื ืืื.
makepp_require_phony
ืืืืจ ืืช ืื ืืขืจื ืืืืชื ืืืฉืื (ืืื 1) ืืื ืืื ืืข ืืืืฃ ืืจืืื (ืืืืืจ ืื ืืื
ืืฆืืื ืืื ืืืืฆืจ ืืช ืืืืจื ืฉืื). ืืฉืชื ื ืื ืฆืจืื ืืืืืช ื ืืื ืืืจืืจืช ืืืื, ื
ืืื ืืข ืฉืจืฉืจืืืช ืชืืืช ืฉืืืจืืช, ืืื ืื ืืฉืืืจ ืืช ืืชืืืืืช ืืืืืจ ืขื
ืงืืฆืื ืืจืืฉืืื.
makepp_signature_C_flat
ืืืื ืืคืฉืจืืช ืืืชืืื C. ืืืืจ ืืช ืื ืืขืจื ืืืืชื ืืืฉืื (ืืื 1) ืืื ืืืชืืืืก ืืืื
ืืงืืจืืช ืืฉืืืื, ืืืืืจ ืื ืืฉืืจืืช ืืืืฉืืช (ืืืขื ืืฆืืจืืช ืงืื-ืืขืื) ืื
ืืชืขืืืื ืืืืืจืืืช ืืื ืจืืื ืืื ื-"#line".
makepp_simple_concatenation
ืืืืจ ืืช ืื ืืขืจื ืืืืชื ืืืฉืื (ืืื 1) ืืื ืืื ืืข "ืืืืคื ืืกืื ืื rc".
ืคืจื
ืืชื ืืืื ืืืืืืจ ืืช ืื ืืคืจื ืืืืืืง ืฉืื ืืชื ืืฉืชืืฉ ืืื ืืืคืขืื ืืช ืืกืงืจืืคืืื ื-makepp
ืืืืื, ืืืืืฆื ืืืชื. ืื ืืืื ืืขืืืจ ืืืคืขืื ืกืงืจืืคืืื ืืฉื ื ืขื ืืืชื perl. ืื
ืฉืืืืฉื ืืขืืงืจ ืขืืืจ ืืืืืช ืืืืืงื, ืืืชืงื ื ืืื ืืื ืจืงืืจืกืืืืช.
VPATH
ืืืืจืช ืืฉืชื ื ืื ืืขืจื ืืืฉืื ืงืืจื ืืืืคื ืืจืืื ื-"vpath % value".
ืืืืืจ ืืจืืฉ ืืฉืชื ืื
Makepp ืืืืืจ ืืจืืฉ ืืื ืืฉืชื ืื, ืืืชื ืืชื ืืืื ืืขืงืืฃ:
AR ืืจืืจืช ืืืื: "ืืจ".
ARFLAGS
ืืจืืจืช ืืืื: "rv".
AS ืืจืืจืช ืืืื: "ืืคื ืฉ".
CC ืืจืืจืช ืืืื: ืืจืืฉืื ืฉื ืืฆื ืืื "gcc", "egcc", "pgcc", "c89" ืื "cc", ืื ื-Windows
ืื ืืกืฃ "cl" ืื "bcc32".
CFLAGS
ืืจืืจืช ืืืื: ืื "$(CC)" ืืื ืืืืจ GNU "-g -Wall", ืื ืื ืืื ืืฉื ื ื-Windows
ืืืืจืื ืืืื, ืืืจืช "-g".
CURDIR
ืืกืคืจืืื ืฉืื ื ืืฆื ื-Makefile ืื ืืืื.
CXX ืืจืืจืช ืืืื: ืืจืืฉืื ืฉื ืืฆื ืืื "g++", "c++", "pg++", "cxx", "C""C" ืื "aCC", ืื ื
Windows ืื ืืกืฃ "cl" ืื "bcc32".
CXXFLAGS
ืืจืืจืช ืืืื: ืื "$(CXX)" ืืื ืืืืจ GNU "-g -Wall", ืื ืื ืืื ืืฉื ื ื-Windows
ืืืืจืื ืืืื, ืืืจืช "-g".
F77 ืืจืืจืช ืืืื: ืืจืืฉืื ืฉื ืืฆื ืืื "f77", "g77" ืื "fort77".
FC ืืจืืจืช ืืืื: "$(F77)".
LD ืืจืืจืช ืืืื: "ld".
LEX ืืจืืจืช ืืืื: ืืจืืฉืื ืฉื ืืฆื ืืื "ืืงืก" ืื "ืคืืงืก".
LIBTOOL
ืืจืืจืช ืืืื: "libtool".
MAKE
ืืืฉืชื ื ืื ืฉื ื ืขืจืืื ืฉืื ืื, ืชืืื ืื ืืืืืชื ืื ืื
"--ืืกืืจืชื-ืจืงืืจืกืืื-ืขืฉื". Makepp ืืืื ืืชื ื ืขืฉื ืฉืืืืฉ ืืืฉืชื ื ืื ื
ืืืื ืืื ืชืืื ืืช, ืขืื ืืคื ื ืฉืืจืงืืจืกืื ืืชืจืืฉืช ืืคืืขื. ืื ืืืื ืืืืืช
ืื ืจืฆืื ืืืื ืฉืืชื ืืืกื ืืืชื ืืืืจืื, ืื ืชืืืื ืืืจ ืืช ืืฉืืืืช ื-a
makepp ืกืคืฆืืคื "$((MAKE))", ืืฉืจ ืื ืืืื ืชืืื ืืช. ืืชื ืื ืฆืจืื ืืืืืืจ ืืช ืื
ืื ืื ืฉืืืจ ืืช ืขืืืืช ืืจืงืืจืกืื ืืืืื ืฉืื ื.
MAKECMDGOALS
ืืฉืชื ื ืื ืืืืืจ ืื ืืื ื ืืฉืืืืฉ ืขื ืืื makepp. ืืชื ืืืื ืืืงืฉ ืืื ื ืืขืฉืืช ืืฉืื ืจืง ืื
ืืชืืงืฉื ืืืจื ืืกืืืืช.
ืืจืืจืช ืืืื: ืื ืืืงืื ืืคืืจืฉ ืฉืกืืคืง ืืืฉืชืืฉ (ืื ืงืจืืื ืจืงืืจืกืืืืช).
ืจืืง ืืขืช ืื ืืืช ืืขื ืืจืืจืช ืืืื ืืืืคื ืืจืืื.
ifneq $(ืืกื ื ืืขื ืืืืื, $(MAKECMDGOALS))
# special-target ืืื ืืื ืืืืขืืื ืืืคืืจืฉืื ืื ืืืืืื
else ifeq $(MAKECMDGOALS)
# ืืื ืืขืืื ืืคืืจืฉืื
ื
MAKEFLAGS (ืืืืฆืืื)
ืืืคืฉืจืืืืช ืืกืื ืืจืืืืช ืฉืืืชื ื ืงืจื makepp. ืืื ืฉืืฉ ืืื ืืืช ืืืช
ืืืืคืก ืืฉืืืืื ืืืชืืื ืืื "-" ืืืืื (ืืฉืืื ืืืืขืื ืืื gmake ืืืจื
ืืื ืืฉืืจืจ ืืช ื-"-").
MAKEINFO
ืืจืืจืช ืืืื: "makeinfo".
MAKEPPFLAGS (ืืืืฆืืื)
ืื ืืืืืจ ืืืืชื ืขืจื ืืื MAKEFLAGS, ืืื ืจืง ืื ืืฉืชื ื ืื ืงืืื ื
ืืกืืืื ืฉื makepp.
_MAKEPPFLAGS (ืืืืฆื)
ืืืคืฉืจืืืืช ืืกืคืฆืืคืืืช ืฉื makepp ืืืจืืฉืืช ืืชืืืืืช POSIX/gmake, ืืืชื makepp
ื ืงืจื. ืืื ื ืืฆืืื ืืืฉืชื ื ื ืคืจื ืื ืฉืงืืืฅ makefile ืืืืจ ืงืืื ืื ืืืื ืืืืฉืืจ
ืชืืืืืช ืขื ืืื ืืืืื ืืืืืจื ืฉื MAKEFLAGS. ืื ืืืืืจ ืจืง ืขื
"--ืืกืืจืชื-ืจืงืืจืกืืื-ืขืฉื".
MAKEPP_VERSION
ืืืจืกื ืฉื makepp ืฉืืชื ืคืืขื ืืืชื. ืื ืื ืืจืกืช ืืื, ืืืื ืื ื
ืืงืฃ ืืืืจืื YYMMDD ืืขืื ืืื ื ืชืื ืื ืคื ืืืืื. ืืชื ืืืื ืืืฉืชืืฉ ืืื ืขืืืจ "ifdef"
ืืืกืชืืจ ืืื ืื ืกืคืฆืืคืืื ืฉื makepp ืืืฆืจื ืื ืืืจืื.
ืืจืืจืช ืืืื: ืืืชื ืขืจื ืฉืืืฆื ืขื ืืื "makepp --version"
PWD ืืื ืื ื"CURDIR".
RM ืืจืืจืช ืืืื: "rm -f". ืื ืืืืขื ื-Makefiles ืืืืจ ืงืืื. ืืืืฉืื ืจืฆืื ืืืฉืชืืฉ
ืืคืงืืื ืืืืื ืืช &rm ืืฉืืจืืช. ืื ืืชื ืจืืฆื ืืืชืื ืืื ื ืงื ืืืืืฃ, ืชืกืชืื ืขื
ืืคืงืืื "makeppclean -r" ืืืงืื ืืืช.
ืฉืืจืฉ
ืื ืชืื ืืืืกื ืืฉืืจืฉ ืืขืจืืช ื-build ืฉืื, ืืืืืจ ืืกืคืจืืื ืืืชืจ ืืืขืื
ืฉืืฉ ืื "RootMakeppfile(.mk)". ืื ืืื ืื ืืื, ืืืฉืชื ื ืืื ืืื
ืจืืง.
SHELL
ืืฉืชื ื ืื ืืืื ืจืง ืื ืืชื "ืืืฆื" ืืืชื. ืืืงืจื ืืื ืื ืืืขืืคืช
ืืืฉืืฉ ืืืืฆืืข ืคืขืืืืช ืื ืืืื ืืช ืขื ืืืคื ืืืืื ืืืฉืื (ืจืืื
ืืื ืฉืืชืืฆืขืื ืืฉืืจืืช). ื-Windows Strawberry ืื ActiveState Perl, ืื ืืฉ ืื
ืืขืืคืช ืืืืืช ืืื ืืงืก, ืขืืื ืืืืืืจ ืืช ืืฉืชื ื ื-SHELL ืฉืื ืืขืจื ืืืกืชืืื ื-"sh"
ืื "sh.exe" ืืคื ื ืงืืจื makepp.
ืืจืืจืช ืืืื: ืืจืืฉืื ืฉื ืืฆื ืืื "/usr/xpg4/bin/sh" (ืืืฉื Solaris) ืื "/sbin/xpg4/sh"
(ืืืฉื Reliant Unix) ืื "/ Bin / sh".
YACC
ืืจืืจืช ืืืื: ืืจืืฉืื ื ืืฆื ืืื "ืืืกืื -y" ืื "yacc".
ืืฉืชื ืื ื ืคืจื
ืขืจืื ืืฉืชื ืื ืืืืืกื ืื ืืกืงืืจืื ืจืืืืื ืฉื Perl, ืื ืฉืชืืื ืืืฉืช ืืืืื ืืฉืืจืืช
ืงืื Perl ืื ืืชื ืฆืจืื ืืขืฉืืช ืืืชื ืื ืืคืืืฆืืืช ืืกืืืืืช; ืจืื makepp_extending
ืืงืืืช ืคืจืืื.
ืืืฉื ืืืฉืชื ืื ืืืืืืืื ื-Perl ืืืฉืืช ืขื ืืื ืืงืืืช "Mpp::global"
ืึฒืึดืืึธื. ืืืขืฉื ืื ืืฉืชื ื, ืฉืขืืืื ืื ืงืืื ืืงืืืฅ ื-makefile ืื ืืืื, ืืืฉืจ ืืชื
assign to ืืืืืื ืื ืชืืื ืืขืชื ืืืืืืืช, ืืืืื ืื ืขืชื ืื ืคืงืช ืืช
ืืฆืืจื "ืืืืืืืช" ืืื.
ืืืื ืืืฉื ืืฉืืจื ืื ืืืขืืช ืืฉืืืืืช! ืืืชืื ืฉืืืฉืชืืฉ ืืจืก ืืช ืืืฉืชื ืื ืืืื
ืืฉืืจืช ืืคืงืืื ืื ืืจื ืืกืืืื. ืืืื makefile ืืืจ ื ืืขื ืืคื ื ืื
ืืืชืื ืฉืืื ืืื ืืคื ืืช ืืืฉืชื ื ืืืืืืื ืื ืืืขื ืกืคืฆืืคื. ืืืงืจืื ืืื ืื ืชืขืฉื ืืืช
ืืืฆืื ืืช ืืขืจื ืฉื ืืืฉืชื ื, ืื ืืขืช ืืงืฆืืชื, ืขืืื ืืงืืช ืืื ื ืืช ืืืืคืืื ืฉืื
(ืฉืืื ืขืจื ืืฉืื ืื "ืขืงืืคื", ืืืขื ืคืจืื ืืขื).
ืขื ืืืฉื ืืฉืืจื ืืชื ืื ืขืืงืฃ ืืช ืืจืืืช ืืืฉืชื ืื ืืืื, ืื ืื ืืกืื
"=" ืื ";=". ืืฉืชื ืื ืืืืืืื ืืื "$(CC)" ืืชืืืืื ืืคืื ืงืฆืืืช, ืขื ืฉืื ืื
ืฉืืืงืฆื ื. ืื ืืืงืจืื ืจืืื ืื ืชืจืื ืืช ืืขืจื ืฉืืื.
ืืกืืืืช ืืื ืขืืืฃ ืืชืช ื-makepp ืืงืืืข ืืช ืืขืจื ืื ืืื. ืืชื ืืืื ืืืฉืชืืฉ ื
ืืจืืื ื "makeperl", ืฉืื ืืืฉืชื ื ืืืขืจื ืืคื ื ืฉืืงืื Perl ืืงืื
ืคืืจืฉืชื:
makeperl { $$current_value = '$(MAKEFILE_VAR)' }
ืื ืืชื ืฆืจืื ืืฉืชื ื ืืืืงืื ืฉื makefile perl ืื ืืืฉื ืืืืฆืขืืช ืืืฉืชื ื Perl
$makefile ืืืืคื ืืื:
perl { $current_value = $makefile->expand_variable( 'MAKE_VAR' ) }
ืคืื ืงืฆืืืช ืชืืื ืืงืืืืช ืืช ืืืืืืืงื makefile ืืืขืืจ ืืชืืจ ืืืจืืืื ื ืืฉื ื $_[1]:
sub 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