ããã¯ãUbuntu OnlineãFedora OnlineãWindows ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒããŸã㯠MAC OS ãªã³ã©ã€ã³ ãšãã¥ã¬ãŒã¿ãŒãªã©ã®è€æ°ã®ç¡æãªã³ã©ã€ã³ ã¯ãŒã¯ã¹ããŒã·ã§ã³ã® XNUMX ã€ã䜿çšããŠãOnWorks ç¡æãã¹ãã£ã³ã° ãããã€ããŒã§å®è¡ã§ããã³ãã³ã makepp_variables ã§ãã
ããã°ã©ã ïŒ
NAME
makepp_variables -- makepp ã§å€æ°ã䜿çšããæ¹æ³
DESCRIPTION
?: $*ã
$+ã
$/ã
$<ã
$?ã
$@ã
$^ã
=,
!=ã
&=ã
+ =ã
:=ã
;=,
?=ã A: ARã
ã¢ãŒãã©ã°ã
ãšããŠã C: CCã
CFãã©ã°ã
"changed_dependency",
å€æŽãããå ¥åã
ã¯ã«ãã£ãŒã«ã
CXXã
CXXãã©ã°ã D: ãäŸåé¢ä¿ãã
"äŸå"ã F: F77ã
FCã
ããã©ãŒãªãŒããã I: å ¥åã
å ¥åã L: LDã
ã¬ãã¯ã¹ã
ãªãããŒã«ã M: äœãã
MAKECMDGOALSã
ã¡ã€ã¯ãã©ãã°ã
ã¡ã€ã¯ã€ã³ãã©ã
MAKEPP_DEBUGã
ã¡ã€ã¯ãã©ãã°ã¹ã
_MAKEPPFLAGSã
MAKEPP_LN_CPã
"makepp_percent_subdirs",
"makepp_require_phony",
makepp_signature_C_ flatã
"makepp_simple_concatenation",
MAKEPP_VERSIONã O: "åºå"ã
ãåºåãã P: ããŒã«ã
é害è ã R: RMã
æ ¹ã S: ã·ã§ã«ã
"sorted_dependency",
ãœãŒããããå ¥åã
"å¹¹"ã T: ç®æšã
ã¿ãŒã²ããã V: VPATHã Y: YACC
éåžžãMakefile ã¯å€ãã®å Žæã§å€æ°ã䜿çšããŸãã 䜿çšããéèŠãªçç±ã® XNUMX ã€ã¯ã
å€æ°ã¯ãã¡ã€ã¯ãã¡ã€ã«å ã® XNUMX ã€ã®å Žæã«ã®ã¿æ å ±ãå«ãŸããããã«ããããã®ãã®ã§ãã
å€æŽãããå Žåã§ããæ å ±ã® XNUMX ã€ã®ã³ããŒãå€éšã«æµåºããå±éºã¯ãããŸããã
åæã
å€æ°åã§ã¯å€§æåãšå°æåãåºå¥ãããŸãã çè«çã«ã¯ãå€æ°åã¯ããŸããŸãªååããäœãããšãã§ããŸãã
ãã£ã©ã¯ã¿ãŒã§ããããã以å€ã®ããšãããå Žåãmakepp ã¯ãããããããç解ã§ããªãã§ãããã
è±æ°åãã_ããã-ãã
åã¡ã€ã¯ãã¡ã€ã«ã«ã¯ç¬èªã®å€æ°ã»ããããããXNUMX ã€ã®ã¡ã€ã¯ãã¡ã€ã«ã«å€æ°ãèšå®ãããšã
ä»ã®ã¡ã€ã¯ãã¡ã€ã«ã®å€ã«ã¯åœ±é¿ããŸããã å€æ°ãèšå®ãããå Žåã¯ã
å€ãã® Makefile ãããå Žåãããããã® Makefile ã«å ±éã®å®çŸ©ãå«ããã®ãæåã®æ¹æ³ã§ãã
ãã¡ã€ã« (include ã¹ããŒãã¡ã³ããåç §) ã䜿çšãããããã°ããŒãã«ãå€æ°ã䜿çšããŸãã
å€æ° è²æž¡
å€æ°ã¯ãããã€ãã®ç°ãªãæ¹æ³ã§å€ãä»®å®ã§ããŸãã
· Makefile å ã§å€æ°ãèšå®ã§ããŸãã ããŸããŸãªæ¹æ³ããããŸã
ãã; äžèšåç §ã
· å€æ°ã®å€ã¯ã次ã®ããã«ã³ãã³ã ã©ã€ã³ã§æå®ã§ããŸãã
makepp CFLAGS=-O2 my_program
è€æ°ã® Makefile ãããŒããããå ŽåãCFLAGS å€æ°ã¯ãã¹ãŠã® Makefile ã«äŒæãããŸãã
ã¡ã€ã¯ãã¡ã€ã«ã ã³ãã³ãã©ã€ã³ã§èšå®ãããå€æ°ã¯ã次ã®èšå®ãèªåçã«ãªãŒããŒã©ã€ãããŸãã
ããããã® Makefile å ã®å€æ°ã
å¿ èŠã«å¿ããŠãmakefile ã§ã³ãã³ã ã©ã€ã³èšå®ãæ瀺çã«ãªãŒããŒã©ã€ãããå¿ èŠããããŸãã
ãã®ç®çã¯ããŠãŒã¶ãŒã®èŠæ±ãç¡èŠããããšã§ã¯ãªãããããå€æŽããæ¹æ³ã§ãã
ãoverrideã修食åã¯ãä»£å ¥ã¹ããŒãã¡ã³ãã®åã«çœ®ãããšãã§ããŸãã ããããã®å Žåã«ã¯ã
ããŒã¯ãŒã ã¹ããŒãã¡ã³ãã§ã¯é åºãéèŠã§ãããã®ããããªãŒããŒã©ã€ã ããªã¢ã³ãã¯
åžžã«ä»¥äžã«è¡šç€ºãããŸãã ãoverrideã修食åã¯ã次ã®å²ãåœãŠã«ã®ã¿é©çšãããŸãã
ãååšãããã®åŸã®å€æ°ãžã®ä»£å ¥ã«ã¯åœ±é¿ããŸããã
· ç°å¢ã«å€æ°ãèšå®ãããŠããå Žåãmakepp å€æ°ãšããŠåç §ã§ããŸãã
éåžžãã¡ã€ã¯ãã¡ã€ã«å ã®å€æ°ãžã®ä»£å ¥ã¯ãã¡ã€ã¯ãã¡ã€ã«ããã®èšå®ããªãŒããŒã©ã€ãããŸãã
ãã ããã-eããŸãã¯ã--environment-overridesãã䜿çšããŠãããå€æŽã§ããŸãã
ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã
å€æ°ã¯ã次ã®ãããªããã€ãã®ä»£å ¥åŒã®ããããã䜿çšããŠä»£å ¥ãããŸãã
X = 1
ã¢ãžã¥ãŒã« := abcd
CC ?= gcc
CFLAGS += -å£
VAR ãå®çŸ©ãã
å€æ°è¡ 1
å€æ°è¡ 2
çµäºå®çŸ©
ãšã¯ã¹ããŒã PATH := $(PWD):$(PATH)
global MYPROJECT.INFO = ãã¹ãŠã®ã¡ã€ã¯ãã¡ã€ã«ã«è¡šç€ºãããæ å ±
å€ã®ååŸã®ç©ºçœã¯åžžã«åé€ãããŸãã
ä»£å ¥æŒç®åãç°ãªãã°ãæå³ãå€å°ç°ãªããŸãã
ç°¡åãªæ¡åŒµã§ å²ãåœãŠ æŒç®å
=
å€æ° = ããã¹ãæåå
ãªãŒããŒã©ã€ã VARIABLE = ããã¹ãæåå
ããã¯ãmake ã®ãã¹ãŠã®å®è£ ããµããŒãããéåžžã®ä»£å ¥ã¹ããŒãã¡ã³ãã§ãã ã®
å³èŸºã®åŒã¯ãã$(VARIABLE)ãã®å€ãè©äŸ¡ããããŸã§è©äŸ¡ãããŸããã
å®éã«ã©ããã§äœ¿ãããŠããŸãã ãããã£ãŠã次ã®ããã«ãããš:
X = 1
Y = $(X)
X = 2
ãã®åŸãã¡ã€ã¯ãã¡ã€ã«ã®åŸã®ã$(Y)ãã¯ã2ããšè©äŸ¡ãããŸãã
äžè¬ã«ãã=ãã®ä»£ããã«ã:=ã (以äžãåç §) ã䜿çšããŸãã
ããäºæž¬å¯èœãªå€æ°è©äŸ¡ãæäŸããŸãã ãã ããå¿ èŠãªå ŽåããããŸã
å€æ°ã®è©äŸ¡ã延æããŸãã ãŸããã¡ã€ã¯ãã¡ã€ã«ãäœæããå Žåã¯ã次ã®ããã«ããå¿ èŠããããŸãã
GNU make 以å€ã® make ã®ããŒãžã§ã³ãšã®äžäœäºææ§ãããå ŽåãäœããããŸããã
éžæè¢: ã=ãã®ã¿ã䜿çšã§ããŸãã
:=
å€æ° := åŒ
VARIABLE := expr ããªãŒããŒã©ã€ãããŸã
ããã¯ãå³åŽãè©äŸ¡ãããããšãé€ããŠããVARIABLE = exprããšåãã§ãã
ä»»åã®ãšãã«äžåºŠã ãã ãããã£ãŠããã
X := 1
Y := $(X)
X := 2
ãã®åŸãã¡ã€ã¯ãã¡ã€ã«ã®åŸåã®ã$(Y)ãã¯ã1ããšè©äŸ¡ãããŸããããã¯ãã$(X)ããããã§ãã£ãããã§ãã
ã$(Y)ããå®çŸ©ããããšãã
;=
å€æ° ;= åŒ
å€æ°ããªãŒããŒã©ã€ã ;= expr
ããã¯ãå³åŽãè©äŸ¡ãããããšãé€ããŠããVARIABLE := exprããšåãã§ãã
æåã®äœ¿çšæã®ã¿ã§ããã®åŸã¯èšæ¶ãããŸãã ããã¯é«äŸ¡ãªãã®ã«åœ¹ç«ã¡ãŸã
ã³ãã³ãã¯åžžã«åãå€ãè¿ããŸããã次ã®å Žåã«ã¯å®è¡ããããªãã³ãã³ãã§ãã
ç¡é¢ä¿ãªã¿ãŒã²ãããæ§ç¯ãã:
VAR1 ;= $(Perl ã®é«äŸ¡ãªèšç®)
VAR2 ;= $(ã·ã§ã«å€éšã³ãã³ã)
å€ã Makefile ã¯éåžžããããå°ãªããšã XNUMX åã ãè¡ãããã«ãããã§ã:=ãã䜿çšããããšã«æ³šæããŠãã ããã
ãã ãããã®æŒç®åã䜿çšãããšãçŸåšãããå®è¡ããŠããªãå Žåã§ãããããå®è¡ããªãããšãã§ããŸãã
å€ãå¿ èŠã§ãã è€æ°ã®ãã£ã¬ã¯ããªã§å€ãåãå Žåã次ã®ããšãã§ããŸãã
以äžã§èª¬æãããã°ããŒãã«ãã䜿çšããŠãããããã«æé©åããŸãã
ãã ããããã¯è©äŸ¡ã®é åºã匷å¶ããè³¢ãæ¹æ³ãæå³ãããã®ã§ã¯ãããŸããã ãã
ãã®ããã«å®çŸ©ãããå€æ°ã«ã¯å¥ã®å€æ°ã®å€ãå«ãŸããŠããããã®å¥ã®å€æ°ã®å€ã
ã¿ãŒã²ããåºæã®å€ããããæåã®å±éã¯ãã®ã¿ãŒã²ããçšã§ããã次ã«
ã¿ãŒã²ããåºæã®å€ã¯ãä»ã®ãã¹ãŠã®ã³ã³ããã¹ãã«ãåæ§ã«é©çšãããŸãã ããã¯ãã°ã§ããã
å°æ¥ä¿®æ£ãããããšãé¡ã£ãŠããŸãã
+=
å€æ° += åŒ
VARIABLE += expr ããªãŒããŒã©ã€ãããŸã
å€æ°ã®åã®å 容ã«æååãã¹ããŒã¹ã§åºåã£ãŠè¿œå ããŸãã ããã
å€æ°ã«ã¯äºåã«ã:=ããå²ãåœãŠãããŠãããå³åŽãè©äŸ¡ãããŸãã
è¿œå ããåã«ã
&=
å€æ° &= åŒ
VARIABLE &= expr ããªãŒããŒã©ã€ãããŸã
å€æ°ã®åã®å 容ã®åã«æååãã¹ããŒã¹ã§åºåã£ãŠè¿œå ããŸãã
å€æ°ã以åã«ã:=ãã§å²ãåœãŠãããŠããå Žåãå³åŽã¯æ¬¡ã®ããã«ãªããŸãã
è¿œå ããåã«è©äŸ¡ãããŸãã
ããšãã°ããŠãŒã¶ãŒãä»ã«äœãå ¥åããŠããCFLAGSããä¿èšŒãã XNUMX ã€ã®æ¹æ³ãšããŠã
åžžã«ã-Wallãã§å§ãŸãã®ã¯æ¬¡ã® XNUMX è¡ã§ãã
CFLAGS = -O2 # ã³ãã³ãã©ã€ã³ã§ãªãŒããŒã©ã€ããããå¯èœæ§ããããŸã
override CFLAGS &= -Wall # ç¡æ¡ä»¶ã«å é ã«è¿œå
å€ã Makefile ã§ã¯éåžžã次ã®ãããªããšãè¡ãå¿ èŠããããŸããããããã«ã¯æ¬¡ã®ãããªåŽé¢ããããŸããã
ç¡éã®ååž°ãé²ãããã«åã匷å¶çã« ":=" ã«ããå¹æ:
å€æ° := expr $(å€æ°)
?=
å€æ° ?= åŒ
override VARIABLE ?= expr # 圹ã«ç«ããªããåæ³
å€æ°ã®å€ãèšå®ããŸãããã ããå€æ°ãåã®æ¹ã§æå®ãããŠããªãå Žåã«éããŸãã
makefileãã³ãã³ãã©ã€ã³ããŸãã¯ç°å¢å ã§ã äžèšã®èª²é¡ã¯ã
ãšãŸã£ããåã
ifndef å€æ°
å€æ° = åŒ
ENDIF
!=
VARIABLE != ã·ã§ã«ã³ãã³ã
VARIABLE != ã·ã§ã«ã³ãã³ããäžæžãããŸã
ã·ã§ã« ã³ãã³ããå®è¡ããã³ãã³ãã®æšæºåºåãå«ãå€æ°ãèšå®ããŸãã
ããã¯ãŸã£ããåãã§ã
å€æ° := $(ã·ã§ã«ã³ãã³ã)
ãã«ãã©ã€ã³ variables
ãdefineãã¹ããŒãã¡ã³ãã¯ãäžèšã®åçŽãªã¹ããŒãã¡ã³ããšåçã®è€æ°è¡ã§ãã ã®
å€æ°ã®åŸã®æŒç®åã¯ãªãã·ã§ã³ã§ãã æ¬ èœããŠããå Žåã¯ããdefine VARIABLEããšåçã§ãã
="ãã&=ããšã+=ãæŒç®åã¯ãããã§ãããæ¥çãããšããç¹ã§å°ãç°ãªããŸãã
å€ãå€ã«ã¯ã¹ããŒã¹ã§ã¯ãªãæ¹è¡ãå ¥ããŸãã 以å€ã®ãã®ããã£ãŠã¯ãªããŸãã
ã¹ããŒãã¡ã³ãã®åŸã«ã³ã¡ã³ããè¿œå ããŸããã€ãŸããå€ã¯æ¬¡ã®è¡ããå§ãŸããŸãã
å€æ°ãå®çŸ©:=
å€æ°ã®å€ã®æåã®è¡
å€æ°ã®å€ã® XNUMX è¡ç®
å€æ°ã®å€ã® XNUMX è¡ç®
ãšã³ãã
VARIABLE ã®å®çŸ©ãäžæžããã
...
çµäºå®çŸ©
ãdefineãã®åã®ããŒã¯ãŒãã¯ããexportããŸãã¯ãglobalãã®ããããã®çµã¿åããã«ãªããŸãã
"ãªãŒããŒã©ã€ã"ã
å€æ°ã®å€ã«æ¹è¡ãå«ããå¿ èŠãããå Žåã¯ããdefineãã¹ããŒãã¡ã³ãã次ã®ããã«äœ¿çšããå¿ èŠããããŸãã
ã衚瀺ãããŸã (ãŸãã¯ãPerl ã§å€ãçŽæ¥å²ãåœãŠãããšãã§ããŸã)ã (ãendefãã¯
GNU make ãšã®äºææ§ã ãenddefãã䜿çšããããšãã§ããŸããïŒããã¯äž»ã«æ¬¡ã®å Žåã«åœ¹ç«ã¡ãŸãã
ãå®åã³ãã³ã ã·ãŒã±ã³ã¹ããããšãã°æ¬¡ã®ãããªãã®:
COMPILE_C_PROGRAM ãå®çŸ©ãã
@&echo "$(input) ãã³ã³ãã€ã«ããŠããŸã"
@$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(å ¥å) -o $(åºå)
ãšã³ãã
次ã«ããã®è€æ°è¡ã®å€æ°ãããã€ãã®ã«ãŒã«ã§æ¬¡ã®ããã«äœ¿çšã§ããŸãã
ïŒ .oïŒïŒ ãc
$(COMPILE_C_PROGRAM)
$(ARCH)/%.o : $(ARCH)/%.c
$(COMPILE_C_PROGRAM)
å€ãã®å Žåãæ¹è¡ã®ä»£ããã«ã»ãã³ãã³ã䜿çšããŠãåãå¹æãåŸãããããšã«æ³šæããŠãã ããã
ã·ã§ã«ã¯ãããã³ãã³ãåºåãæåãšããŠã解éããããã§ãã äŸãã°ã
COMPILE_C_PROGRAM = @echo "$(input) ãã³ã³ãã€ã«äž"; \
$(CC) $(CFLAGS) $(CPPFLAGS) $(INCLUDES) -c $(å ¥å) -o $(åºå)
ã»ãã³ãã³ã Perl ã«ããã匷å¶çã«ã·ã§ã«ã«æž¡ãããšãé€ããŠãåãå¹æããããŸãã
ã³ãã³ããçŽæ¥å®è¡ãã代ããã«ãããå¹ççã«å®è¡ã§ããŸãã ãããããå ¥ããå¿ èŠããããŸã
ç¬èªã®è¡ã«çµã¿èŸŒãŸããŠãããããå€éšãšã³ãŒã«åãæ¿ããå¿ èŠããããŸãã
ã»ãã³ãã³ã±ãŒã¹ã
ãdefineãå ã§å±éããå Žåãã€ãŸããdefine X :=ããŸãã¯
ãã§ã«ã:=ãããdefine X &=ããããã³ãdefine X +=ãã§ãã£ãå€æ°ã ãã®å Žåã
ã$(shell command ...)ããŸãã¯çµã¿èŸŒã¿ã®ã$(&command ...)ãã¯æ¹è¡ã次ã®ããã«å€æããŸããã
ã¹ããŒã¹
ãšã¯ã¹ããŒã variables ããž ãµãããã»ã¹
VAR ããšã¯ã¹ããŒã ...
ãšã¯ã¹ããŒã VAR = å€
ãšã¯ã¹ããŒã VAR += å€ãäžæžããã
æåã®åœ¢åŒã¯ããµãããã»ã¹ã«ãšã¯ã¹ããŒãããããã«æå®ãããå€æ°ãä»»æã®å€ã§ããŒã¯ããŸãã
ãã®å Žåãå€æ°ã¯æ¬¡ã®ããã«ãªããŸãã XNUMX çªç®ã®åœ¢åŒã¯ XNUMX ã€ã®å€æ°ã«ã®ã¿é©çšãããŸããã
ããã«å€ãå²ãåœãŠãŸãã ä»£å ¥ã®ãã¹ãŠã®ããªãšãŒã·ã§ã³ãèš±å¯ãããŸãã
åæ variables è¶ã㊠ã¡ã€ã¯ãã¡ã€ã«
ã°ããŒãã« VAR ...
ã°ããŒãã« VAR = å€
ã°ããŒãã« VAR &= å€ãäžæžããã
æåã®åœ¢åŒã¯ãæå®ãããå€æ°ããã¹ãŠã® Makefile ã«å¯ŸããŠã°ããŒãã«ãšããŠããŒã¯ããŸãã ãããã®ãããããããã°
ãã§ã«å€ããã£ãå Žåããã®å€ã¯ makefile ã®ããŒã«ã«å€æ°ããã°ããŒãã«å€æ°ã«ç§»åãããŸãã
äžã ãã ãããã®ã¹ããŒãã¡ã³ãã衚瀺ãããæç¹ã§ãä»ã®ã¡ã€ã¯ãã¡ã€ã«ã«ãã§ã«
ãããã®ããããã®å€ãæå®ãããŠããªãå Žåããããã®ã¡ã€ã¯ãã¡ã€ã«ã¯ã°ããŒãã« ã¡ã€ã¯ãã¡ã€ã«ãèªèããŸããã
XNUMX çªç®ã®åœ¢åŒã¯ XNUMX ã€ã®å€æ°ã«ã®ã¿é©çšãããããã«å€ãæ£ããå²ãåœãŠãŸãã
ãã¡ããžã ä»£å ¥ã®ãã¹ãŠã®ããªãšãŒã·ã§ã³ãèš±å¯ãããŸãã ã:=ãã¯ããã«å±éãããããšã«æ³šæããŠãã ãã
ããŒã«ã«ã®ã¡ã€ã¯ãã¡ã€ã«ã®å€ã«å€æŽããŸãã éã«ãã=ãå€æ°ã¯æ¬¡ã®ããã«å±éãããŸãã
䜿çšæã®å€ã§ãã
makepp ã¯ä»»æã®å Žæã« makefile ãããŒãããå¯èœæ§ããããããã°ããŒãã«å€æ°ã¯æ±ããé£ããå ŽåããããŸãã
ã«ãŒã«ãã¡ã€ã¯ãã¡ã€ã«ãããŒããããŠããªãã¿ãŒã²ããããã«ãããå¿ èŠãçããå Žåã
ãã®ããã RootMakepp ãã¡ã€ã« ãããŠãã¹ãŠãæ瀺çã«ããŒãããã«ã¯
ãã®ä»ããload-makefileãã§å€æ°ãå€æŽãŸãã¯äœ¿çšãããã®ã
ã°ããŒãã« GLIBLIBS ;= $(shell pkg-config --libs glib-2.0)
ãŸããããªãã®ãããžã§ã¯ãã¯ãã€ãä»ã®ãããžã§ã¯ããšäžç·ã«æ§ç¯ãããå¯èœæ§ãããããšã«ã泚æããŠãã ããã ãã®ãã
ãããžã§ã¯ãåãåžžã«ã°ããŒãã«å€æ°åã®äžéšã«ããããšãæšå¥šãããçç±ã
ã¿ãŒã²ããåºæã® å²ãåœãŠ
ã¿ãŒã²ãã: å€æ° = æåå
ã¿ãŒã²ãã: å€æ° := æåå
ã¿ãŒã²ãã: VARIABLE += æååããªãŒããŒã©ã€ãããŸã
å€æ°ã®ã¿ãŒã²ããåºæã®å€ãèšå®ããŸãã ã¿ãŒã²ããåºæã®å€ãæå¹ã§ã ã®
æå®ãããã¿ãŒã²ãããçæããã¢ã¯ã·ã§ã³å ã ããã¯äž»ã«æ¬¡ã®ãããªç®çã§äœ¿çšãããŸã
ãã®ïŒ
CFLAGS := -O2
my_prog: file1.o file2.ospecial_file.o
ç¹æ®ãã¡ã€ã«.o : CFLAGS := -g
%.o: %.c
$(CC) $(CFLAGS) -c $(å ¥å) -o $(åºå)
ããã§äœãèµ·ããããšãããšããã¹ãŠã®ã.cããã¡ã€ã«ãæé©å (ã-O2ã) ã§ã³ã³ãã€ã«ãããŸãã 以äžã¯é€ã
ãspecial_file.cãããããã° ã¢ãŒã (ã-gã) ã§ã³ã³ãã€ã«ãããŸãã ããã¯äŸ¿å©ãªæ¹æ³ã§ã
å°æ°ã®ãã¡ã€ã«ã«ã®ã¿ç°ãªãã³ã³ãã€ã« ãªãã·ã§ã³ãæå®ããŸãã
ãã®ãããªã¿ãŒã²ããåºæã®å€æ°ã®å²ãåœãŠã¯ãã«ãŒã«ã®ã¢ã¯ã·ã§ã³ã«ã®ã¿é©çšãããŸãã 圌ã
ã«ãŒã«ã®ã¿ãŒã²ãããŸãã¯äŸåé¢ä¿ãè©äŸ¡ããå Žåã¯ç¡å¹ã§ãã ã«ãŒã«ãªã
è€æ°ã®ã¿ãŒã²ãããããå Žåãã¿ãŒã²ããåºæã®å€æ°ã®å²ãåœãŠã¯ã
æåã® ç®æšã ãŸããmakepp ã®ã¿ãŒã²ããåºæã®å€æ°ãè¥å¹²ç°ãªãããšã«ã泚æããŠãã ããã
GNU make ãšã¯ãèšåããã XNUMX ã€ã®ãã¡ã€ã«ã®ã«ãŒã«ã«ã®ã¿é©çšãããä»ã®ãã¡ã€ã«ã«ã¯é©çšãããªããšããç¹ã§ç°ãªããŸãã
ãã®åä»»è ã®ããããã
ã¯ã€ã«ãã«ãŒãå±éã¯ã¿ãŒã²ããã«å¯ŸããŠå®è¡ãããããã次ã®ãããªããšãã§ããŸãã
test_*.o : CFLAGS += -DTEST
GNU make ãšã®äºææ§ã®ããã«ãã*ãã®ä»£ããã«ã%ãã䜿çšããããšãã§ããŸãã
å€æ° 眮æ
Makepp ã®å€æ°çœ®æã«ãŒã«ã¯ä»ã® Makepp ã®å€æ°çœ®æã«ãŒã«ãšäŒŒãŠããŸãããè¥å¹²ç°ãªããŸãã
ãã匷åãªã ãã¹ãŠã®ã¡ãŒã«ãŒãšåæ§ã«ãã$(CC)ããŸãã¯ã${CC}ãã¯ã©ã¡ãã
å¯å€CCã ãªãã©ã«ã®ãã«èšå·ãå¿ èŠãªå Žåã¯ã次ã®ããã« XNUMX ã€ã®ãã«èšå· ($$) ãå ¥åããŸãã
ãã®ïŒ
ã¿ãŒã²ãã: dep1 dep2 dep3 dep4
&rm -f $(åºå)
$(inputs) ã®ãã¡ã€ã«ã®å Žå; do cat $$file >> $(åºå); çµãã
ããã«ãmakepp ã«ã¯ã$[VARIABLE]ãæ§æããããä»ã®æ§æãšåãããšãè¡ããŸãã
XNUMX ã€ã§ãããmakepp ãä»ã®ãã®ãååŸããåã«ã ããã«ãããå®å šãªã«ãŒã«ã«äœ¿çšã§ããããã«ãªããŸã
ããã³/ãŸãã¯æ¡ä»¶æ:
ãã©ã±ããã«ãŒã«ãå®çŸ© =
ifdef SOME_VAR
ãã©ã±ããïŒ
&echo ããã¯ã«ãŒã«ã§ã -o $(åºå)
ENDIF
çµäºå®çŸ©
$[ãã©ã±ããã«ãŒã«]
ã©ãžã³ã³ã¹ã¿ã€ã« 眮æ
ããã©ã«ãã§ã¯ãmakepp 㯠rc ã¹ã¿ã€ã«ã®çœ®æã䜿çšããŸã (ããã¯ã
rcã·ã§ã«ïŒã ãããæããã説æããäŸã¯æ¬¡ã®ãšããã§ãã
ã¢ãžã¥ãŒã« = abcd
mylib.a : module_dir/$(MODULES).o $(OTHER_OBJECTS)
$(CXX) $(äŸåé¢ä¿) -o $(ã¿ãŒã²ãã)
MODULES å ã®ååèªã«ã¯æ¥é èŸãmodule_dir/ããä»å ãããæ¥å°ŸèŸã.oããä»å ãããŸãã
ååèªã«ä»ãå ããããŸãã
åèªã®ãªã¹ããããã¹ãã«å ¥ããªããŠããrc ã¹ã¿ã€ã«ã®çœ®æã䜿çšããããšãã§ããŸãã
å€æ°; æ§æã¯ã$( word1 word2)ãã§ãã æ¬åŒ§ãš
æåã®èšèã ãããã£ãŠãäžèšã®äŸã¯æ¬¡ã®ããã«æžãããšãã§ããŸãã
mylib.a : module_dir/$( abcd).o $(OTHER_OBJECTS)
$(CXX) $(äŸåé¢ä¿) -o $(ã¿ãŒã²ãã)
å€æ°ã¯ããã®äžã«è€æ°ã®åèªãå«ãŸããå Žåã«ã®ã¿ rc ã¹ã¿ã€ã«ã®çœ®æãè¡ããŸãã
äžèšã§èšããšäŒçµ±çãªäœãã®ããã§ãã æ®å¿µãªãããå€æ°ã空ã®å Žåã¯ã
察ç«ã åŸæ¥ã®äœæã§ã¯ãåçŽã«ç©ºã®æååã«å±éããŸãã ããããããªããèãããšãã
ãªã¹ããšããŠè¡šç€ºããå Žåãå€ç¬ãªã-Iããäžããã®ã§ã¯ãªããã-I$(DIRLIST)ããæ¶å»ããå¿ èŠããããŸãã ã®
解決çã¯ãã¹ããŒã¹ã§å§ãŸããªã¹ãã«ã©ããããããšã§ããã-I$( $(DIRLIST))ããšãããšã
ãªã¹ãå ã®åèªãšåãæ°ã®ãªãã·ã§ã³ã§ãã
åãåèªã«è€æ°ã®å€æ°ãå ¥ããŠåèªã®é åã«å±éããå Žåãrc ã¹ã¿ã€ã«
眮æã¯å®éã«ã¯ãã«ã«ãç©ãåãåãã®ã§ã次ã®ãããªå Žåã«ã¯æ¬¡ã®ãããªããšãã§ããŸãã
ããªãã欲ããïŒ
DIR = s1 s2
ã¢ãžã¥ãŒã« = abc
æ¥å°ŸèŸ = .o .c
ãã¡ã€ã« := $(DIRS)/$(ã¢ãžã¥ãŒã«)$(ãµãã£ãã¯ã¹)
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 ã¹ã¿ã€ã«ã®çœ®æã¯ãä»»æã®åŒçšç¬Šãäžžãäžåãåè§åœ¢ã§åæ¢ããŸãã
æ¬åŒ§ãããã³ã, : ; = # @ãã®ããããã ããã¯é©ãã¹ãããšãããããªãããšã«æ³šæããŠãã ããã
æ瀺çãªãªã¹ãã ãã¹ãŠã®ãã£ã¬ã¯ããªã§ã¯ã€ã«ãã«ãŒãã䜿çšããŠããããŒãæ€çŽ¢ããããšããŸãã
倧æåã§å§ãŸã:
æªã := [AZ]*/**/*.$( hpp h) # [AZ]*/**/*.hpp */**/*.h
è¯ã := $( [AZ]*/**/*.)$( hpp h) # [AZ]*/**/*.hpp [AZ]*/**/*.h
rc ã¹ã¿ã€ã«ã®çœ®æãéªéã«ãªãå ŽåããŸãã¯å é ãŸãã¯æ«å°Ÿã«æååãä»ããå¿ èŠãããå Žå
make å€æ°ã«ç©ºçœãè¿œå ããå Žåã¯ã次ã®ããã«èšå®ããããšã§ rc ã¹ã¿ã€ã«ã®çœ®æããªãã«ã§ããŸãã
å€æ°ãmakepp_simple_concatenation=1ãã ã³ãã³ãã§ã°ããŒãã«ã«ãªãã«ããããšãã§ããŸã
è¡ãŸãã¯ç°å¢å€æ°ãšããŠã ãŸãã¯ãã¡ã€ã¯ãã¡ã€ã«ããšã«å€æ°ãèšå®ããŠã
ããªãã®ã¡ã€ã¯ãã¡ã€ã«ã ããã¯ã¡ã€ã¯ãã¡ã€ã«ã®å é ä»è¿ã§è¡ãå¿ èŠããããŸããããããªããšã次ã®ãããªåé¡ãçºçããå¯èœæ§ããããŸãã
rc ã¹ã¿ã€ã«ã®çœ®æãäžéšã®è©äŸ¡ã«äœ¿çšãããä»ã®è©äŸ¡ã«ã¯äœ¿çšãããªããšããé¢çœãç¶æ³ã§ãã
(ä»£å ¥åã«è©äŸ¡ããããã¹ãŠã®åŒã¯ rc ã¹ã¿ã€ã«ã®çœ®æã䜿çšããŸãã
åŒã®åŸã«è©äŸ¡ãããããšã¯ãããŸããã ã§ã®åŒã®è©äŸ¡ã®æããã
makefile ã¯è€éã§ãããã¹ããŒãã¡ã³ãã®é åºããèŠãŠå¿ ãããæããã§ãããšã¯éããŸããã
makefile ã§ã¯ãã§ããã ãæ©ããmakepp_simple_concatenationããèšå®ããããšãæåã§ãã)
XNUMX ã€ã®ã¿ãŒã²ããã ãã«èšå®ããããšãã§ããŸãã
ã¿ãŒã²ãã: makepp_simple_concatenation = 1
ç®æšïŒ
&echo before_first$(LIST)after_last -o $(åºå)
ã$[VARIABLE]ãã¯ã$(VARIABLE)ããããå ã«è©äŸ¡ããããããrc- 㧠XNUMX ã€ãçµåããŸãã
æ瀺çã«ã©ããããªãéãã眮æã§ã¯æåŸ ã©ããã®çµæãåŸãããŸããã
ãªã¹ãïŒ
A = è ¹éš
N = 1 2
æªã := $(A)$[N]
è¯ã := $(A)$( $[N])
æåŸã®è¡ã¯æ¬¡ã®ããã«èªã¿åãããŸã
æªã := $(A)1 2 # a1 b1 2
è¯ã := $(A)$( 1 2) # a1 a2 b1 b2
眮æ åèæç®
眮æåç §ã®åœ¢åŒã¯ã$(VAR:A=B)ãã§ããA ã¯äžèŽãããã¿ãŒã³ãB ã¯äžèŽãããã¿ãŒã³ã§ãã
眮ãæãããã¿ãŒã³ã 眮æåç §ã¯ã
ããããã¹ããæ©èœã äŸãã°ïŒ
ãœãŒã¹ãã¡ã€ã« = ac bc cc dc
ãªããžã§ã¯ããã¡ã€ã« = $(ãœãŒã¹ãã¡ã€ã«:%.c=%.o)
ã$(object_files)ãããao bo co doãã«èšå®ããŸãã ã%ãã¯ç¹æ®æåã«äžèŽããŸã
ä»»æã®æååã A ãš B ã®äž¡æ¹ãã%ãã§å§ãŸãå Žåã眮ãæãããšãã«ããããã±ãŒã¹
æ¥å°ŸèŸã¯çç¥ã§ããŸãã
ãªããžã§ã¯ããã¡ã€ã« = $(ãœãŒã¹ãã¡ã€ã«:.c=.o)
object_files = $(source_files:c=o) # åãã§ãã ç¹å¥ã§ã¯ãªã
ç©ºçœ in variables
å€æ°å ã®ç©ºçœãå¶åŸ¡ããå¿ èŠãããå Žåã¯ã(çŸåšã¯) rc-style ãç¡å¹ã«ããå¿ èŠããããŸãã
(ãmakepp_simple_concatenation=1ããèšå®ããããšã§) 眮æãã次ã®ãããªæ§æã䜿çšããŸãã
ãã« =
T = -o $(null)
ãŸãã¯ã空ã®è©äŸ¡ã䜿çšããŸãã
T = -o $()
ãããè¡ããšãå€æ° "T" ã«ã¯ "-o" ãšããã«ç¶ãã¹ããŒã¹ãå«ãŸããŸãã
空çœãåŠçãããã®çš®ã®ææ³ã¯æšå¥šãããŸããã å€æ°ãå¿ èŠãªå Žå
Makefile ã«ã¹ããŒã¹ãå«ããã«ã¯ãäœãããããšããŠããã®ãçå£ã«èããå¿ èŠããããŸãã
ã¹ããŒã¹ãåŠçããå¿ èŠãããå Žåã¯ãéåžžãPerl ã³ãŒãã
makefile ã䜿çšããŠãããåŠçãã (ãperl_beginããŸãã¯ãsubãã¹ããŒãã¡ã³ãã䜿çš)ããŸãã¯ãããåŠçãã
ã«ãŒã«ã®ã¢ã¯ã·ã§ã³å ã®ã·ã§ã«ã¹ããŒãã¡ã³ãå ã
ãã®ãããªã±ãŒã¹ã¯éåžžã人ã ãåãã«ãŒã«ãç°ãªããã®ã«äœ¿çšããããšãããšãã«çºçããŸãã
å žåç㪠Unix ã³ãã³ãæ§æã䜿çšããªãã¢ãŒããã¯ãã£ã ããšãã°ãæã 人ã¯èŠã
Makefile ã«ã¯æ¬¡ã®ãããªãã®ããããŸã:
ifeq ($(ARCH),å¥åŠãªã¢ãŒã)
O := /åºå=
ã»ãã«
null :=
O := -o $(null)
ENDIF
ïŒ .oïŒïŒ ãc
$(ã³ã³ãã€ã©ãŒ) $(å ¥å) $(O)$(åºå)
æ¬åœã«ããããå Žåã¯ãmakepp ã䜿çšããŠãããè¡ãããšãã§ããŸãããããããã
å€æ°ãããŸãè€éã§ãªãå Žåãmakefile ã¯å€§å¹ ã«èªã¿ããããªããŸãã
眮æãäŸ:
ifeq ($(ARCH),å¥åŠãªã¢ãŒã)
ïŒ .oïŒïŒ ãc
$(WEIRD_COMPILER) $(å ¥å) /OUTPUT=$(åºå)
ã»ãã«
ïŒ .oïŒïŒ ãc
$(CC) -c $(å ¥å) -o $(åºå)
ENDIF
å€æ°åã«ã¯ç©ºçœã䜿çšã§ããŸãããå€æ°ã®å€ã«ã®ã¿äœ¿çšã§ããŸãã ããã¯éããŸã
ããã€ãã® make å®è£ ããã
ãªãŒãããã㯠Variables
èªåå€æ°ã¯ãã«ãŒã«ã«å¿ããŠç°ãªãå€ãåãå€æ°ã§ãã
Makepp ã¯ãä»ã®èªåå€æ°ã®ã»ãšãã©ããµããŒãããŠããŸãã
make use ã®ããŒãžã§ã³ã ããã«ãã»ãšãã©ã®å Žåãé£è§£ã§ãªãé·ãååãä»ããããŠããŸãã
代ããã«äœ¿çšã§ããŸãã (ãããã®ååãåå®çŸ©ããã¬ã¬ã·ãŒ Makefile ã®å Žåã
Makefile å ã®å®çŸ©ã¯ããã©ã«ãã®æå³ããªãŒããŒã©ã€ãããŸãã ããšãã°ã次ã®ããã«èšãå Žå
ã¡ã€ã¯ãã¡ã€ã«å ã§ãtarget = abcããšãããšãã$(target)ãã¯åžžã«ãabcãã«å±éãããå±éãããŸããã
ãã¯ã $@ ãšåçã§ãã)
以äžã¯ãmakepp ããµããŒããããã¹ãŠã®èªåå€æ°ã®å®å šãªãªã¹ãã§ãã
åºå
ã¿ãŒã²ãã
$@ çŸåšã®ã«ãŒã«ã®ã¿ãŒã²ããã å®éãmakepp ã¯è€æ°ã®ã¿ãŒã²ããããµããŒãããŠããããã
ã©ã®ãããªã«ãŒã«ã§ãã£ãŠãããã㯠æåã® ç®æšã ããšãã°ã次ã®ã«ãŒã«ã§ã¯
y.tab.c y.tab.h : parser.y
$(YACC) -o $(åºå) $(YFLAGS) $(å ¥å)
ã$(output)ãã«ã¯å€ãå«ãŸããŸã yã¿ãcã ãããã®ããžãã¯å€æ°ã¯å®éã«ã¯
é¢æ°ã§ã¯ãåŒæ°ãšããŠã€ã³ããã¯ã¹ãæž¡ãããšãã§ããŸãã ãã㯠1 ããæ°ããããéæ¹åã«æ°ããŸã
-1ããã ãããã£ãŠãã$(output 2)ããŸãã¯ã$(output -1)ãã«ã¯å€ãå«ãŸããŸãã yã¿ãh.
ãã®å€æ°ã® XNUMX ã€ã®åœ¢åŒã¯ãã¹ãŠåãå€ãæã¡ãŸããã次ã®ç¹ã«éãããããŸãã
ãã«ãã¿ãŒã²ãã ã«ãŒã«ã®è§£éã å€ãã¹ã¿ã€ã«ã®æå·å $@ ã䜿çšãããšã
makepp ã¯ããããææ°ã®ã«ãŒã«ã§ã¯ãªããå€ãã¹ã¿ã€ã«ã®ã«ãŒã« ã»ãããšããŠè§£éããŸãã
ããããã¹ãŠã®ã¿ãŒã²ãããäžåºŠã«çæããŸãã
ab: # å®é: a ãš b ã«ãããã XNUMX ã€ã®ã«ãŒã«
$@ãã¿ãã
cd: # ãšã©ãŒ: mpp ã¯ããã d ããã«ãããªãã£ããšäžå¹³ãèšããŸã
$(åºå)ãã¿ãã
outputs
ã¿ãŒã²ãã
çŸåšã®ã«ãŒã«ã®ãã¹ãŠã®ã¿ãŒã²ããã è€æ°ããå Žåãé€ããã$(target)ããšåã
ç®æšã äžèšã®äŸã§ã¯ãã$(outputs)ã㯠y.tab.c y.tab.h ã«ãªããŸãã æž¡ãããšãã§ããŸã
ã€ã³ããã¯ã¹ ãªã¹ããªã®ã§ãã$(outputs 2 1)ã㯠y.tab.h y.tab.c ã«ãªããŸãã
äŸåé¢ä¿
$< ã«ãŒã«ã®æåã®æ瀺çãªäŸåé¢ä¿ã ããšãã°ããã®ã«ãŒã«ã§ã¯
ïŒ .oïŒïŒ ãc
$(CC) $(CFLAGS) -c $(å ¥å) -o $(åºå)
ã$(input)ããååã«ãªããŸãã .c ãã¡ã€ã«ã¯äœã§ãã£ãŠã .h ãã¡ã€ã«
çºèŠããã è€æ°ã®äŸåé¢ä¿ãæå®ããå Žåã¯ã
Index: "$(input $(INDEX))" 㯠INDEX çªç®ã®äŸåé¢ä¿ã§ãã
äŸåé¢ä¿
å ¥å
$^ ã¿ãŒã²ããã®ãã¹ãŠã®æ瀺çãªäŸåé¢ä¿ (ãããé€ã) .h ã«ãã£ãŠçºèŠããããã¡ã€ã«
ã€ã³ã¯ã«ãŒãã® makepp_scanningã
ããšãã°ãã«ãŒã«ã§ã¯
myprog.o : *.o
$(CC) $(CFLAGS) $(å ¥å) -o $(åºå)
ã$(inputs)ãã¯ãã£ã¬ã¯ããªå ã®ãã¹ãŠã® .o ãã¡ã€ã«ã«ãªããŸãã ããªãã¯ããªããéžæã§ãããã®ã ããéžã¶ããšãã§ããŸã
ã€ã³ããã¯ã¹ãªã¹ããæž¡ãããšã§å¿ èŠã«ãªããŸãã ç°ãªãçš®é¡ã®ãã¡ã€ã«ãæ瀺çã«æå®ãããšã
ã$(inputs 2 3 4)ãã®ããã«ããããéžæã§ããŸãïŒãã ããã¯ã€ã«ãã«ãŒãã䜿çšãããšãããã¯ããã»ã©é£ãããããŸããïŒ
ææãªïŒã
ãœãŒããããäŸåé¢ä¿
ãœãŒããããå ¥å
$+ ã¿ãŒã²ããã®ãã¹ãŠã®äŸåé¢ä¿ããœãŒãé ã«äžŠã¹ãéè€ãåé€ããŸãã
ã$(sort $(inputs))ããšåçã
å€æŽãããäŸåé¢ä¿
å€æŽãããå ¥å
$? å€æŽãããã¿ãŒã²ããã®äŸåé¢ä¿ã ããã«ã¯æ瀺çãªãã®ã®ã¿ãå«ãŸããŸã
æé»çã«æ€åºãããªãäŸåé¢ä¿ (ã€ãŸããã¡ã€ã¯ãã¡ã€ã«ã«ãªã¹ããããã®)
ã¹ãã£ã³ã«ããäŸåé¢ä¿ (.h ãã¡ã€ã«ãªã©)ã
ããã¯éåžžã次ã®ãããªã³ãã³ãã§äœ¿çšãããŸãã
libmine.a : $(MODULES) : build_checkignore_action
$(AR) ã $@ $?
ããªãã¡ ar å€æŽãããã¢ãžã¥ãŒã«ã®ã¿ã亀æããããã«æ瀺ãããŸãã (泚æããŠãã ãã
ãignore_actionããã«ã ãã§ã㯠ã«ãŒã«ã ãããæå®ããªãå Žåãmakepp ã¯åŒ·å¶çã«
å€æŽããããã³ã«å®è¡ãããã¢ã¯ã·ã§ã³ã äŸåé¢ä¿ãå€æŽãããŠããªãå Žåã
ã¢ã¯ã·ã§ã³æååã¯ãar ru libmine.aãã«ãªããŸãããããã¯ãããã以åã®ãã®ãšã¯ç°ãªããŸãã
ååå®è¡ãããšããªã®ã§ããignore_actionããªãã§ã¯ makepp ããããå®è¡ããŸãã ãã®äžã§
ãã®å Žåã¯ç¡å®³ã§ãããä»ã®ã³ãã³ãã䜿çšãããšåé¡ãçºçããå¯èœæ§ããããŸãã èŠã
ãignore_actionãã®è©³çŽ°ã«ã€ããŠã¯ãmakepp_build_check ãåç §ããŠãã ããã)
ãã®ããã«ã¢ãŒã«ã€ããæ§ç¯ããããšã¯ããã«ãã®éãå°ãªããªããããè¯ãèãã§ã¯ãããŸããã
ä¿¡é Œæ§ã®ããã ããã®åé¡ã¯ãã¢ãŒã«ã€ããæ§ç¯ããå Žåã«ã次ã®ãããããåé€ããŠããŸãããšã§ãã
MODULES ã®ãªã¹ãããã¢ãžã¥ãŒã«ãéžæãããšãã¢ãžã¥ãŒã«ã¯ã¢ãŒã«ã€ãå ã«æ®ããŸãã
ãã±ãã
å¹¹
$* ãã¿ãŒã³ ã«ãŒã«å ã®èªå¹¹ (ã€ãŸããã%ããäžèŽãããã®)ã ãããã¯ãããã§ããã°ã
ã¯ãã¿ãŒã³ ã«ãŒã«ã§ã¯ãªããæ¡åŒµåãªãã®ãã¡ã€ã«åãè¿ããŸã (ã€ãŸãã
ã$(basename $(input))ããšåçã§ãã
ããã¯äž»ã«äžäœäºææ§ã®ããã§ãã ããšãã°ãå€ãããŒãžã§ã³ã® make ã§ã¯ã
ã³ã³ãã€ã«æ¹æ³ãäŒããå¯äžã®æ¹æ³ .c ãã¡ã€ã«ã察å¿ãã .o ãã¡ã€ã«ã¯æ¬¡ã®ããã§ãã
ãã®ïŒ
.coïŒ
$(CC) $(CFLAGS) -c $*.c -o $*.o
ããã¯ã«ãŒã«ã®æžãæ¹ãšããŠã¯äžé©åã§ãã GNU-make ã¹ã¿ã€ã«ã䜿çšããæ¹ãã¯ããã«æ確ã§ã
ãã¿ãŒã³ã«ãŒã«ã¯æ¬¡ã®ããã«ãªããŸãã
ïŒ .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 $(åºå)
詳现ãšäŸã«ã€ããŠã¯ãã«ãŒã«ã® foreach å¥ã«é¢ããããã¥ã¡ã³ããåç §ããŠãã ããã
$/ ããã¯åºæ¬çã«å®æ°ã§ãã/ããŸãã¯ãã€ãã£ã Windows ã§ã¯ã\ãã§ãã å¿ èŠã§ããã°ã
ããã°ã©ã ã移æ€å¯èœã«èµ·åãããå Žåãããšãã°çŸåšã®ãã£ã¬ã¯ããªã«ãã«ãããããã°ã©ã ãèµ·åãããå Žå:
ç§ã®åºå:
.$/myprog >$(åºå)
åŒæ°ãšããŠæž¡ããããã¡ã€ã«åã«ã€ããŠã¯ãWindows ã Unix ãåŠçã§ãããããããã»ã©å¿ èŠãããŸããã
ããã®æ§æã
ãªãã·ã§ã³ Variables
äžèšã§èª¬æãããã¹ãŠã®æ¹æ³ã§ããããèšå®ã (å¥éèšèŒãããŠããå Žåãé€ã)ãå€æŽããããšãã§ããŸãã
ãã±ããã®è¡åã ããã©ã«ãã§ã¯ããããã¯ãã¹ãŠæªå®çŸ©ã§ãã
MAKEPP_DEBUG
makepp ãåŒã³åºãåã«ããã true å€ã§ãšã¯ã¹ããŒããããšãããå€ãã®ãããã°ãå¯èœã«ãªããŸã
æ å ±ã ããã¯ããããæå¹ã§ããéã«æ§ç¯ããããã¡ã€ã«ã®ãRULE_SOURCEãã§ãã
makeppinfoãmppiãããã³å€æ°å±éãšã«ãŒã« ãããã³ã°ã«é¢ãã詳现
makepplogãmpplã ããã«ãããmakepp ãã¡ã¢ãªäžè¶³ãŸãã¯ãã³ã°ãããã©ããã衚瀺ãããŸãã
åãå€æ°ãééãªãå±éããŠããããã§ãã
A = $A # é 延è©äŸ¡ãå¿ èŠ :=
B = $C
C = $B
MAKEPP_LN_CP
&ln ã®äžã®æ³šãåç §ããŠãã ããã
makepp_percent_subdirs
ã¿ãŒã²ãããŸãã¯äŸåé¢ä¿ã«ã%ããäžèŽããããã«ããã«ã¯ããããäœããã® true å€ (1 ãªã©) ã«èšå®ããŸãã
è€æ°ã®ãã£ã¬ã¯ããªã«ãŸãããã
makepp_require_phony
æé»çãªåœããé²ãããã«ããããäœããã®çã®å€ (1 ãªã©) ã«èšå®ããŸã (ã€ãŸããã«ãŒã«ã
ã¿ãŒã²ãããçæããã«æåããŸã)ã ãã®å€æ°ã¯ããã©ã«ã㧠true ã§ããå¿ èŠããããŸãã
äŸåé¢ä¿ãã§ãŒã³ã®ç Žæãé²ããŸããããããããšäžäœäºææ§ã倱ãããŸãã
ããããªã¡ã€ã¯ãã¡ã€ã«ã
makepp_signature_C_ flat
ãã㯠C ã«çœ²åããããã®ãªãã·ã§ã³ã§ãããããäœããã® true å€ (1 ãªã©) ã«èšå®ãããšã
ãœãŒã¹ã¯ãã©ããåãããŠããŸããã€ãŸãããã¹ãŠã®æ¹è¡ (ããªããã»ããµ ã¹ããŒãã¡ã³ãã®åšå²ãé€ã) ã¯
空çœæåãšåæ§ã«æ±ãããã#lineããã£ã¬ã¯ãã£ãã¯ç¡èŠãããŸãã
makepp_simple_concatenation
ãrc ã¹ã¿ã€ã«ã®çœ®æããé²ãã«ã¯ããããäœããã® true å€ (1 ãªã©) ã«èšå®ããŸãã
ããŒ
ããããmakepp ã§ã¹ã¯ãªãããå®è¡ããããã«äœ¿çšããŠããæ£ç¢ºãª Perl ã«èšå®ã§ããŸãã
ã¹ã€ãŒããéžæããŠãšã¯ã¹ããŒãããŸãã ããã¯ãåã Perl ã§ãµãã¹ã¯ãªãããå®è¡ããã®ã«åœ¹ç«ã¡ãŸãã ããã¯
äž»ã«ãã¹ã ã¹ã€ãŒããã€ã³ã¹ããŒã«ãååž°çãã«ãã«åœ¹ç«ã¡ãŸãã
VPATH
ãã®å€æ°ãäœããã®å€ã«èšå®ãããšãæé»çã«ãvpath % valueããåŒã³åºãããŸãã
äºåå®çŸ©æžã¿ Variables
Makepp ã¯ããã€ãã®å€æ°ãäºåå®çŸ©ããŠããããããã¯ãªãŒããŒã©ã€ãã§ããŸãã
AR ããã©ã«ãïŒ ãããŒããã
ã¢ã«ãã©ã°ã¹
ããã©ã«ãïŒ ãrvãã
AS ããã©ã«ãïŒ "ãšããŠ"ã
CC ããã©ã«ãïŒ ãgccãããegccãããpgccãããc89ãããŸãã¯ãccãã®äžã§æåã«èŠã€ãã£ããã®ããŸã㯠Windows äžã§èŠã€ãã£ããã®
ããã«ãclããŸãã¯ãbcc32ãã
CFãã©ã°
ããã©ã«ãïŒ ã$(CC)ãã GNU ã³ã³ãã€ã©ã-g -Wallãã®å Žåãããã XNUMX ã€ã® Windows ã³ã³ãã€ã©ã®ããããã®å Žå
ã³ã³ãã€ã©ã¯äœãããŸããããã以å€ã®å Žåã¯ã-gãã§ãã
ã«ãŒãã£ã«
çŸåšã® Makefile ãååšãããã£ã¬ã¯ããªã
CXX ããã©ã«ãïŒ ãg++ãããc++ãããpg++ãããcxxãããCãããCãããŸãã¯ãaCCãã®äžã§æåã«èŠã€ãã£ããã®ããŸãã¯
Windows ã§ã¯ããã«ãclããŸãã¯ãbcc32ãã䜿çšãããŸãã
CXXãã©ã°
ããã©ã«ãïŒ ã$(CXX)ãã GNU ã³ã³ãã€ã©ã-g -Wallãã®å Žåãããã XNUMX ã€ã® Windows ã³ã³ãã€ã©ã®ããããã§ããå Žå
ã³ã³ãã€ã©ã¯äœãããŸããããã以å€ã®å Žåã¯ã-gãã§ãã
F77 ããã©ã«ãïŒ ãf77ãããg77ãããŸãã¯ãfort77ãã®äžã§æåã«èŠã€ãããŸããã
FC ããã©ã«ãïŒ ã$(F77)ãã
LD ããã©ã«ãïŒ ãLDãã
LEX ããã©ã«ãïŒ ãlexããŸãã¯ãflexãã®äžã§æåã«èŠã€ãããŸããã
ã©ã€ãã©ãªããŒã«
ããã©ã«ãïŒ ããªãããŒã«ãã
MAKE
ãã®å€æ°ã«ã¯ã次ã®æ¡ä»¶ãååšãããã©ããã«å¿ã㊠XNUMX ã€ã®ç°ãªãå€ããããŸãã
ã--traditional-recursive-makeãã Makepp ã¯ãã®å€æ°ããã€äœ¿çšãããããèªèãã
å®éã«ååž°ãè¡ãããåã§ãã£ãŠããäžéšã®æ©èœããªãã«ããŸãã ããã¯å¯èœã§ã
åŸã ã«æé€ããŠããéã¯æãŸãããªãã®ã§ãæåã«é話ã
makepp åºæã®ã$((MAKE))ããããã¯æ©èœããªãã«ããŸããã èšå®ããŠã¯ãããŸãã
ããã¯ç§ãã¡ã®è³¢ãååž°åé¿çãå£ããŠããŸãããã§ãã
MakeCMDGOALS
ãã®å€æ°ã¯èšå®ãããŠããŸãããmakepp ã«ãã£ãŠäœ¿çšãããŸããã 次ã®å Žåã«ã®ã¿ãã¯ãšãªãå®è¡ããŠäœããå®è¡ã§ããŸãã
ããã¿ãŒã²ãããèŠæ±ãããã
ããã©ã«ãïŒ ãŠãŒã¶ãŒ (ãŸãã¯ååž°çåŒã³åºã) ãæå®ããæ瀺çãªã¿ãŒã²ããã
ããã©ã«ãã®ã¿ãŒã²ãããæé»çã«æ§ç¯ããå Žåã¯ç©ºã§ãã
ifneq $(ãã£ã«ã¿ãŒç¹æ®ã¿ãŒã²ãã, $(MAKECMDGOALS))
# ç¹å¥ãªã¿ãŒã²ããã¯çŸåšã®æ瀺çãªã¿ãŒã²ããã® XNUMX ã€ã§ã
else ifeq $(MAKECMDGOALS)
# æ瀺çãªã¿ãŒã²ããã¯ãããŸãã
ENDIF
ã¡ã€ã¯ãã©ãã°ã¹ (ãšã¯ã¹ããŒã)
makepp ãåŒã³åºããšãã«äœ¿çšããæšæºãªãã·ã§ã³ã äžæåãããã®
ãã©ãŒã ã¯å é ã« "-" ãä»ããã«å é ã§çµåãããŸã (gmake ããªãéžæããã®ãã¯å€©ã«ç¥ãããŠããŸã)
ã-ããåé€ããŸã)ã
ã¡ã€ã¯æ å ±
ããã©ã«ãïŒ ãã¡ã€ã¯ã€ã³ãã©ãã
MAKEPPFLAGS (ãšã¯ã¹ããŒã)
ããã¯ããã®å€æ°ãååšããå Žåã«éããMAKEFLAGS ãšåãå€ã«èšå®ãããŸãã
makeppã®ç°å¢ã
_MAKEPPFLAGS (ãšã¯ã¹ããŒãæžã¿)
POSIX/gmake äºææ§ã«å¿ èŠãª makepp åºæã®ãªãã·ã§ã³ãmakepp ãšã®äºææ§ã¯å¿ èŠã§ãã
ãšåŒã°ããŠããŸããã ãããã¯å¥ã®å€æ°ã«ãããããåŸæ¥ã® Makefile ã¯å£ããŸããã
MAKEFLAGS ã®èšå®ã解é€ãããšäºææ§ãåŸãããŸãã ããã¯ã®ã¿ã§èšå®ãããŸã
ã--traditional-recursive-makeãã
MAKEPP_VERSION
å®è¡ããŠãã makepp ã®ããŒãžã§ã³ã ããŒã¿çã®å Žåã¯ã
ãã€ãã³ã®åŸã« YYMMDD ãšãã®ä»ã®å éšããŒã¿ãç¶ããŸãã ããããifdefãã«äœ¿çšã§ããŸã
makepp åºæã®æ§é ãä»ã® make ããé ãããã
ããã©ã«ãïŒ ãmakepp --versionãã§è¡šç€ºãããå€ãšåã
PWD ãCURDIRãã®å¥åã
RM ããã©ã«ãïŒ ãrm -fãã ããã¯ã¬ã¬ã·ãŒ Makefile ã察象ãšããŠããŸãã æ°ãããã®ã«ã¯ãã§ããã°äœ¿çšããŠãã ãã
çµã¿èŸŒã¿ã® &rm ã³ãã³ããçŽæ¥äœ¿çšããŸãã åœã®ã¯ãªãŒã³ãªã«ãŒã«ãäœæãããå Žåã¯ã以äžãåç §ããŠãã ããã
代ããã«ãmakeppclean -rãã³ãã³ãã䜿çšããŠãã ããã
ROOT
ãã«ã ã·ã¹ãã ã®ã«ãŒããã€ãŸãããã«äžã®ãã£ã¬ã¯ããªãžã®çžå¯Ÿãã¹ã
ããã«ã¯ãRootMakeppfile(.mk)ãããããŸãã æã£ãŠããªãå Žåããã®å€æ°ã¯
空ã®ã
SHELL
ãã®å€æ°ã¯ãããšã¯ã¹ããŒããããå Žåã«ã®ã¿å°éãããŸãã ãã®å Žåã¯ã·ã§ã«ã§ã
ããã¯ãäœããã®ç¹æ®æå (ãã¬ãŒã³) ãå«ãéçµã¿èŸŒã¿ã¢ã¯ã·ã§ã³ãå®è¡ããããã«äœ¿çšãããŸãã
çŽæ¥å®è¡ããããã®)ã Windows Strawberry ãŸã㯠ActiveState Perl ã䜿çšããŠããå Žå
Unix 颚ã®ã·ã§ã«ã®å Žåã¯ã代ããã« SHELL å€æ°ããshãã§çµããå€ã«èšå®ããå¿ èŠããããŸãã
ãŸãã¯ãsh.exeã ãã±ããã«é»è©±ããããŸãã
ããã©ã«ãïŒ ã/usr/xpg4/bin/shã(Solaris ãªã©) ãŸãã¯ã/sbin/xpg4/shãå ã§æåã«èŠã€ãã£ããã®
(äŸ: Reliant Unix) ãŸã㯠"/bin/sh".
YACC
ããã©ã«ãïŒ ãbison -yããŸãã¯ãyaccãã®äžã§æåã«èŠã€ãããŸããã
Variables & ããŒã«
å€æ°å€ã¯éåžžã® Perl ã¹ã«ã©ãŒãšããŠä¿åããããããå€æ°å€ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã
è€éãªæäœãè¡ãå¿ èŠãããå Žå㯠Perl ã³ãŒãã makepp_extending ãåç §
詳现ã«ã€ããŠã¯ã
Perl ããã°ããŒãã«å€æ°ã«ã¢ã¯ã»ã¹ããã«ã¯ãå€æ°ã«ãMpp::globalããšããæ¥é èŸãä»ããŸãã
ããã±ãŒãžã å®éã«ã¯ãçŸåšã®ã¡ã€ã¯ãã¡ã€ã«ã«ãŸã ååšããªãå€æ°ã§ããã°ã
ãã®ããã±ãŒãžå ã® assign to ã¯ããã以éãã¡ããã©çºè¡ããããã«ã°ããŒãã«ã«ãªããŸãã
ããã«å¯Ÿãããã°ããŒãã«ãã¹ããŒãã¡ã³ãã
ãã ãããã®çŽæ¥ã¢ã¯ã»ã¹ã§ã¯ãšã©ãŒãçºçãããããªããŸãã ãŠãŒã¶ãŒããããã®å€æ°ããªãŒããŒã©ã€ãããå¯èœæ§ããããŸã
ã³ãã³ãã©ã€ã³ãŸãã¯ç°å¢ãéããŠã ãã®åã«ããŒããããä»ã®ã¡ã€ã¯ãã¡ã€ã«
å€æ°ãã°ããŒãã«ãŸãã¯ã¿ãŒã²ããåºæã«ããå¯èœæ§ããããŸãã ãã®ãããªå Žåãããªãã¯ããããŸãã
å€æ°ã®å€ãèŠã€ããããä»£å ¥ãããšãã«ãã®ããããã£ãåãé€ããŠããŸãå¯èœæ§ããããŸã
(ã¿ãŒã²ããã®è©³çŽ°ãé€ããããªãŒããŒã©ã€ãã修食åãšåçã§ãã)
çŽæ¥ã¢ã¯ã»ã¹ãããšããããã®å€æ°ã®å±éããã€ãã¹ããŸã (å€æ°ã®åã次ã®å Žå)ã
ã=ããŸãã¯ã;=ãã ã$(CC)ãã®ãããªç¹æ®å€æ°ã¯ãé¢æ°ãšããŠéå§ãããæçµçã«ã¯é¢æ°ã«ãªããŸãã
ã«å²ãåœãŠãããã ãããã£ãŠãå€ãã®å Žåããã®äŸ¡å€ãããããŸããã
ãããã®çç±ãããmakepp ã«æ£ããå€ã決å®ãããæ¹ãè¯ãã§ãããã 䜿çšã§ããŸã
ãmakeperlãããªã¢ã³ããPerl ã³ãŒããååŸãããåã«å€æ°ãè©äŸ¡ãããŸãã
解é:
makeperl { $$current_value = '$(MAKEFILE_VAR)' }
Makefile Perl ãããââã¯ã«å€æ°ãå¿ èŠãªå Žåããã㯠Perl å€æ°ãä»ããŠå®çŸãããŸãã
$makefile ã¯æ¬¡ã®ããã«ãªããŸãã
perl { $current_value = $makefile->expand_variable( 'MAKE_VAR' ) }
é¢æ°ã¯åžžã«ã1 çªç®ã®åŒæ° $_[XNUMX] ãšããŠæž¡ããã makefile ãªããžã§ã¯ããååŸããŸãã
sub f_f { $current_value = $_[1]->expand_variable( 'MAKE_VAR' ) }
ã³ãã³ãã¯ã«ãŒã« ã¢ã¯ã·ã§ã³å ã§åŒã³åºãããããšã«ãªã£ãŠãããã¡ã€ã¯ãã¡ã€ã« ãªããžã§ã¯ãã¯
ã$Mpp::Subs::rule->{MAKEFILE}ãããã¢ã¯ã»ã¹å¯èœ:
sub c_cmd { $current_value = $Mpp::Subs::rule->{MAKEFILE}->expand_variable( 'MAKE_VAR' ) }
onworks.net ãµãŒãã¹ã䜿çšããŠãªã³ã©ã€ã³ã§ makepp_variables ã䜿çšãã