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

Ad


ืกืžืœ OnWorks

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

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

ื–ื•ื”ื™ ื”ืคืงื•ื“ื” 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


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

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

  • 1
    ื ื™ืงื•ื™ ืขืžื•ืง
    ื ื™ืงื•ื™ ืขืžื•ืง
    ืชืกืจื™ื˜ ืงื•ื˜ืœื™ืŸ ืฉื›ื•ืœื• ื‘ื ื•ื™ ื’ืจืขื™ื ื™ื
    ืžื˜ืžื•ื ื™ื ืžืคืจื•ื™ืงื˜ื™ื ืฉืœ Gradle/Android.
    ืฉื™ืžื•ืฉื™ ื›ืืฉืจ Gradle ืื• ื”-IDE ืžืืคืฉืจื™ื ืœืš
    ืžื˜ื”. ื”ืชืกืจื™ื˜ ื ื‘ื“ืง ืขืœ
    macOS, ืื‘ืœ...
    ื”ื•ืจื“ ื ื™ืงื•ื™ ืขืžื•ืง
  • 2
    Eclipse Checkstyle Plug-in
    Eclipse Checkstyle Plug-in
    ื”ืคืœืื’ื™ืŸ Eclipse Checkstyle
    ืžืฉืœื‘ ืืช ืงื•ื“ ื”-Java Checkstyle
    ืื•ื“ื™ื˜ื•ืจ ืœืชื•ืš Eclipse IDE. ื”
    ืชื•ืกืฃ ืžืกืคืง ืžืฉื•ื‘ ื‘ื–ืžืŸ ืืžืช ืœ
    ื”ืžืฉืชืžืฉ ืขืœ ื”ืคืจื”...
    ื”ื•ืจื“ ืืช ื”ืคืœืื’ื™ืŸ Eclipse Checkstyle
  • 3
    AstrOrzPlayer
    AstrOrzPlayer
    AstrOrz Player ื”ื•ื ื ื’ืŸ ืžื“ื™ื” ื—ื™ื ืžื™
    ืชื•ื›ื ื”, ื—ืœืงื” ืžื‘ื•ืกืกืช ืขืœ WMP ื•-VLC. ื”
    ืฉื—ืงืŸ ื”ื•ื ื‘ืกื’ื ื•ืŸ ืžื™ื ื™ืžืœื™ืกื˜ื™, ืขื
    ื™ื•ืชืจ ืžืขืฉืจื” ืฆื‘ืขื™ ื ื•ืฉื, ื•ื™ื›ื•ืœื™ื ื’ื
    ื‘ ...
    ื”ื•ืจื“ ืืช AstrOrzPlayer
  • 4
    movistartv
    movistartv
    Kodi Movistar+ TV es un ADDON ืขื‘ื•ืจ XBMC/
    Kodi que permite disponer de un
    decodificador de los servicios IPTV de
    Movistar integrado en uno de los
    mediacenters ืžื...
    ื”ื•ืจื“ ืืช movistartv
  • 5
    ืงื•ื“ :: ื—ืกื™ืžื•ืช
    ืงื•ื“ :: ื—ืกื™ืžื•ืช
    Code::Blocks ื”ื•ื ืงื•ื“ ืคืชื•ื— ื‘ื—ื™ื ื,
    ื—ื•ืฆื” ืคืœื˜ืคื•ืจืžื•ืช C, C++ ื•-Fortran IDE
    ื ื‘ื ื” ื›ื“ื™ ืœืขื ื•ืช ืขืœ ื”ืฆืจื›ื™ื ื”ืชื•ื‘ืขื ื™ื™ื ื‘ื™ื•ืชืจ
    ืฉืœ ื”ืžืฉืชืžืฉื™ื ืฉืœื”. ื–ื” ื ื•ืขื“ ืœื”ื™ื•ืช ืžืื•ื“
    ืžืจื—ื™ื‘ ...
    ืงื•ื“ ื”ื•ืจื“ื”::ื‘ืœื•ืงื™ื
  • 6
    ื‘ื™ืŸ
    ื‘ื™ืŸ
    ื‘ื™ืŸ ืžืžืฉืง Minecraft ืื• ืžืชืงื“ื
    ื•ืžืขืงื‘ ืื—ืจ ื ืชื•ื ื™ื/ืžื‘ื ื” ื”ื•ื ื›ืœื™ ืœ
    ืœื”ืฆื™ื’ ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ืžื™ื™ื ืงืจืืคื˜
    ื”ืขื•ืœื, ืžื‘ืœื™ ืœื™ืฆื•ืจ ืื•ืชื• ื‘ืคื•ืขืœ. ื–ื”
    ืคื—ื™ืช ...
    ื”ื•ืจื“ ื‘ื™ืŸ
  • ืขื•ื“ ยป

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

Ad