ÇÔ¼ö(functions)´Â ¿©·¯ºÐÀÌ makefile¾È¿¡¼, ÀÛ¾÷ÇÒ ÆÄÀϵéÀ» ¾Ë¾Æ³»°Å³ª ¾Æ´Ï¸é »ç¿ëÇÒ ¸í·ÉµéÀ» ¾Ë¾Æ³¾ ¼ö ÀÖµµ·Ï, ÅؽºÆ®¸¦ ó¸®ÇÏ´Â °ÍÀÌ´Ù. ÇÔ¼ö´Â dfn{ÇÔ¼ö È£Ãâ(function call)} ¾È¿¡¼ »ç¿ëÇÑ´Ù. ¿©±â¿¡¼ ÇÔ¼öÀÇ À̸§°ú ÇÔ¼ö°¡ ÀÛ¾÷ÇÒ ÅؽºÆ®(¸Å°³º¯¼ö(arguments) ¸¦ Á¦°øÇÑ´Ù. ÇÔ¼ö ó¸®ÀÇ °á°ú´Â makefileÀÇ ±× È£Ãâ À§Ä¡¿¡ »ðÀԵȴÙ. ¸¶Ä¡ º¯¼ö°¡ ´ëÀÔµÈ °Íó·³.
ÇÔ¼ö È£ÃâÀº º¯¼ö ÂüÁ¶¿Í ´á¾Ò´Ù. ÀÌ°ÍÀº ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °ÍÀÌ´Ù:
$(function arguments)
¶Ç´Â ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °ÍÀÌ´Ù:
${function arguments}
¿©±â¼ function´Â ÇÔ¼ö À̸§ÀÌ´Ù; make
ÀÇ ÀϺÎÀÎ À̸§µé ªÀº
¸®½ºÆ®ÀÇ Çϳª. »õ·Î¿î ÇÔ¼ö¸¦ Á¤ÀÇÇϱâ À§ÇÑ Áغñ´Â ¾ø´Ù.
arguments´Â ÇÔ¼öÀÇ ¸Å°³º¯¼öµéÀÌ´Ù. À̵éÀº ÇÔ¼ö¿Í Çϳª ÀÌ»óÀÇ °ø¹éÀ̳ª ÅÇÀ¸·Î ºÐ¸®µÇ¸ç, ÇÑ °³ ÀÌ»óÀÇ ¸Å°³º¯¼öµéÀÌ ÀÖÀ¸¸é ±×µéÀº ÄÞ¸Ó·Î ±¸ºÐµÈ´Ù. ±×·± °ø¹é¹®ÀÚ¿Í ÄÞ¸ÓµéÀº ¸Å°³º¯¼ö °ªÀÇ ÀϺΰ¡ µÇÁö ¾Ê´Â´Ù. ÇÔ¼ö È£ÃâÀ» µÑ·¯½Î´Â µ¥ »ç¿ëÇÑ ±¸ºÐÀÚµéÀº, °ýÈ£µéÀ̳ª Áß°ýÈ£µéÀº, ¦ÀÌ ¸Â´Â ²Ã·Î¸¸ ³ªÅ¸³¯ ¼ö ÀÖ´Ù; ´Ù¸¥ Á¾·ùÀÇ ±¸ºÐÀÚµéÀº ´Ü½ÅÀ¸·Î ³ªÅ¸³¯ ¼ö ÀÖ´Ù. ¸Å°³º¯¼öµé ÀÚ½ÅÀÌ ´Ù¸¥ ÇÔ¼ö È£ÃâµéÀ̳ª º¯¼ö ÂüÁ¶µéÀ» °¡Áø´Ù¸é ¸ðµç ÂüÁ¶µé¿¡ ´ëÇؼ µ¿ÀÏÇÑ Á¾·ùÀÇ ±¸ºÐÀÚµéÀ» »ç¿ëÇÏ´Â °ÍÀÌ °¡Àå Çö¸íÇÒ °ÍÀÌ´Ù; `$(subst a,b,${x})' ÀÌ ¾Æ´Ï¶ó `$(subst a,b,$(x))' ¸¦ ¾²ÀÚ. ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ Á» ´õ ¸íÈ®Çϱ⠶§¹®ÀÌ´Ù. ±×¸®°í ÇÑ°¡Áö Á¾·ùÀÇ ±¸ºÐÀÚ¸¸ÀÌ ÂüÁ¶ÀÇ ³¡À» ã±â À§Çؼ ¼·Î ºñ±³µÇ±â ¶§¹®ÀÌ´Ù.
°¢ ¸Å°³º¯¼ö ÅؽºÆ®´Â ¸Å°³º¯¼ö °ªÀ» ¸¸µå´Â º¯¼ö ´ëÀÔ°ú ÇÔ¼ö È£Ãâµé¿¡ ÀÇÇؼ 󸮵ȴÙ. ÀÌ°ÍÀÌ(ÀÌ °á°ú°¡) ÇÔ¼ö°¡ ÀÛµ¿ÇÏ´Â ´ë»ó ÅؽºÆ®ÀÌ´Ù. ´ëÀÔÀº ¸Å°³º¯¼öµéÀÌ ³ªÅ¸³ ¼ø¼´ë·Î ÇàÇØÁø´Ù.
ÄÞ¸Óµé°ú ÀÏÄ¡ÇÏÁö ¾ÊÀº °ýÈ£³ª Áß°ýÈ£µéÀº ¸Å°³º¯¼ö°¡ ÀÛ¼ºµÈ°Í°ú µ¿ÀÏÇÑ
ÅؽºÆ®·Î ³ªÅ¸³¯ ¼ö ¾ø´Ù; ¾Õ¿¡ ÀÖ´Â °ø¹éµéÀº ÀÛ¼ºµÈ °Í°ú °°Àº ù¹ø°
¸Å°³º¯¼öÀÇ ÅؽºÆ®·Î ³ªÅ¸³¯ ¼ö ¾ø´Ù. ÀÌ·± ¹®ÀÚµéÀº º¯¼ö ´ëÀÔÀ» ÅëÇؼ
¸Å°³º¯¼ö °ªµé·Î ³Ö¾îÁú ¼ö ÀÖ´Ù. ¸ÕÀú ±×°ÍÀÇ °ªµéÀÌ ÄÞ¸¶³ª °ø¹é
¹®ÀÚµé·Î ±¸ºÐµÈ º¯¼ö comma
¿Í space
¸¦ Á¤ÀÇÇÑ µÚ À̵é
º¯¼öµéÀ» ±×·± ¹®ÀÚµéÀÌ ÇÊ¿äÇÑ °÷¿¡, ´ÙÀ½°ú °°ÀÌ, ´ëÀÔÇÑ´Ù:
comma:= , empty:= space:= $(empty) $(empty) foo:= a b c bar:= $(subst $(space),$(comma),$(foo)) # bar is now `a,b,c'.
¿©±â¼ subst
ÇÔ¼ö´Â foo
ÀÇ °ª Àüü¿¡¼ °¢ ½ºÆäÀ̽º¸¦ ÄÞ¸Ó·Î
º¯°æÇÏ°í ±× °á°ú¸¦ ÀÌ °ª¿¡ ´ëÀÔÇÑ´Ù.
´ÙÀ½Àº ¹®ÀÚ¿µé¿¡ ´ëÇؼ ÀÛµ¿ÇÏ´Â ÇÔ¼öµéÀÌ´Ù:
$(subst from,to,text)
$(subst ee,EE,feet on the street)´Â `fEEt on the strEEt'¸¦ ´ëÀÔÇÑ´Ù.
$(patsubst pattern,replacement,text)
patsubst
ÇÔ¼ö È£Ãâ¿¡ ÀÖ´Â `%' ¹®ÀÚµéÀº ¾Õ¿¡ ¿ª½½·¡½¬
(`\')¸¦ ½á¼ ÀοëµÉ ¼ö ÀÖ´Ù. `%'¸¦ ÀοëÇßÀ» ¿ª½½·¡½¬µéÀº ´õ
¸¹Àº ¿ª½½·¡½¬µé¿¡ ÀÇÇؼ Àοë´çÇÒ ¼ö ÀÖ´Ù. `%' ¹®ÀÚµéÀ̳ª ´Ù¸¥
¿ª½½·¡½¬µéÀ» ÀοëÇÏ´Â ¿ª½½·¡½¬´Â ÆÐÅÏ¿¡¼, ÀÌ°ÍÀÌ ÆÄÀÏ À̸§µé°ú
ºñ±³µÇ°Å³ª ±×¾È¿¡ ´ëÀÔµÈ Áٱ⸦ °¡Áö±â Àü¿¡, Á¦°ÅµÈ´Ù. `%'
¹®ÀÚµéÀ» ÀοëÇÒ À§ÇèÀÌ ¾ø´Â ¿ª½½·¡½¬µéÀº ¾Æ¹«·± °£¼·µµ ÇÏÁö
¾Ê´Â´Ù. ¿¹¸¦ µé¾î¼ `the\%weird\\%pattern\\' ´Â `%' ¹®ÀÚ
¾Õ¿¡ `the%weird\' °¡ ÀÖ°í µÚ¿¡ `pattern\\' °¡ ÀÖ´Ù. ¸¶Áö¸·
µÎ ¿ª½½·¡½¬µéÀº ±×µéÀÌ ¾î¶² `%' ¹®ÀÚ¿¡µµ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê±â
¶§¹®¿¡ ÀÜ·ùÇÑ´Ù.
´Ü¾îµé »çÀÌ¿¡ ÀÖ´Â °ø¹é¹®ÀÚ´Â ´ÜÀÏ ½ºÆäÀ̽º ¹®ÀÚ·Î ÁÙ¾îµç´Ù; ÀÌ¿¡
¾Õ¼°Å³ª µÞ¼± °ø¹é¹®ÀÚµéÀº ¹«½ÃµÈ´Ù.
¿¹¸¦ µé¾î¼ ´ÙÀ½Àº,
$(patsubst %.c,%.o,x.c.c bar.c)`x.c.o bar.o' ¶ó´Â °ªÀ» ¸¸µç´Ù. ´ëÀÔ ÂüÁ¶(see section ´ëÀÔ ÂüÁ¶(Substitution References) ´Â
patsubst
ÀÇ È¿°ú¸¦ ¾ò´Â ´õ ´Ü¼øÇÑ ¹æ¹ýÀÌ´Ù:
$(var:pattern=replacement)´Â ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù
$(patsubst pattern,replacement,$(var))µÎ¹ø° ªÀº Ç¥±â ¹æ¹ýÀº
patsubst
ÀÇ °¡Àå ÀϹÝÀûÀÎ »ç¿ëµé ÁßÀÇ
Çϳª¸¦ ´Ü¼øÇÏ°Ô ¸¸µç´Ù: ÆÄÀÏ À̸§µéÀÇ ³¡¿¡ ÀÖ´Â Á¢¹Ì»ç(È®ÀåÀÚ?)¸¦
±³Ã¼ÇÑ´Ù.
$(var:suffix=replacement)ÀÌ°ÍÀº ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù.
$(patsubst %suffix,%replacement,$(var))¿¹¸¦ µé¾î¼, ´ÙÀ½°ú °°Àº ¿ÀºêÁ§Æ® ÆÄÀϵéÀÇ ¸®½ºÆ®¸¦ °¡Áö°í ÀÖ´Ù¸é:
objects = foo.o bar.o baz.oÀÌ¿¡ ´ëÀÀÇÏ´Â ¼Ò½º ÆÄÀϵéÀÇ ¸®½ºÆ®¸¦ ¾ò±â À§Çؼ ´ÙÀ½°ú °°ÀÌ ½±°Ô ÀÛ¼ºÇÒ ¼ö ÀÖ´Ù:
$(objects:.o=.c)ÀÌ°ÍÀº ´ÙÀ½°ú °°Àº ÀϹÝÇüŸ¦ »ç¿ëÇÏ´Â °Í ´ë½Å¿¡ ¾µ¼ö ÀÖ´Ù:
$(patsubst %.o,%.c,$(objects))
$(strip string)
strip
ÇÔ¼ö´Â Á¶°Ç°ú ÇÔ²² »ç¿ëµÉ ¶§ ¾ÆÁÖ À¯¿ëÇÒ ¼ö ÀÖ´Ù. ¾î¶²
°ÍÀ» ºó ¹®ÀÚ¿ `'°ú, ifeq
¶Ç´Â ifneq
¸¦ »ç¿ëÇؼ,
ºñ±³ÇÒ ¶§ º¸Åë ºó ¹®ÀÚ¿°ú ÀÏÄ¡ÇÏ´Â °ø¹éÀÇ ¹®ÀÚ¿À» ¿øÇÒ °ÍÀÌ´Ù
(see section MakefileÀÇ Á¶°Ç ºÎºÐ(Conditional Parts of Makefiles)).
(±×·¡¼, ) ´ÙÀ½°ú °°Àº °ÍÀº ¿øÇÏ´Â °á°ú¸¦ ¾òÁö ¸øÇÑ´Ù:
.PHONY: all ifneq "$(needs_made)" "" all: $(needs_made) else all:;@echo 'Nothing to make!' endif
ifneq
Áö½Ã¾î¿¡¼ º¯¼ö ÂüÁ¶ `$(needs_made)' ¸¦ ÇÔ¼ö
È£Ãâ `$(strip $(needs_made))' ·Î ¹Ù²ÞÀ¸·Î½á Á» ´õ
¾ö°Ý(robust)ÇÏ°Ô ¸¸µé °ÍÀÌ´Ù.
$(findstring find,in)
$(findstring a,a b c) $(findstring a,b c)`a'¿Í `' (ºó ¹®ÀÚ¿) °¢°¢À» ¸¸µç´Ù.
findstring
ÀÇ
½ÇÁúÀûÀÎ ÀÀ¿ë¿¡ ´ëÇؼ´Â See section Ç÷¡±× °Ë»ç Á¶°Ç(Conditionals that Test Flags).
$(filter pattern...,text)
patsubst
ÇÔ¼ö¿¡¼ »ç¿ëµÈ
ÆÐÅÏ°ú ¸¶Âù°¡Áö·Î, `%'À» »ç¿ëÇÏ¿© ÀÛ¼ºµÈ´Ù.
filter
ÇÔ¼ö´Â ÇÑ º¯¼ö ¾È¿¡¼ (ÆÄÀÏ À̸§°ú °°Àº) ´Ù¸¥ ŸÀÔÀÇ
¹®ÀÚ¿µéÀ» ºÐ¸® Á¦°ÅÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼:
sources := foo.c bar.c baz.s ugh.h foo: $(sources) cc $(filter %.c %.s,$(sources)) -o foo´Â `foo'°¡ `foo.c', `bar.c', `baz.s' ±×¸®°í `ugh.h' ¿¡ ÀÇÁ¸ÇÏÁö¸¸ `foo.c', `bar.c' ±×¸®°í `baz.s' ¸¸ÀÌ ¸í·É¾È¿¡¼ ÄÄÆÄÀÏ·¯¿¡ ´ëÇØ ÁöÁ¤µÇ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ¸»ÇÑ´Ù.
$(filter-out pattern...,text)
filter
ÇÔ¼öÀÇ Á¤È®ÇÑ ¹Ý´ëÀÌ´Ù.
¿¹¸¦ µé¾î¼, ´ÙÀ½ÀÌ ÁÖ¾îÁ³´Ù¸é:
objects=main1.o foo.o main2.o bar.o mains=main1.o main2.o´ÙÀ½Àº `mains'¿¡ ÀÖÁö ¾Ê´Â ¿ÀºêÁ§Æ® ÆÄÀÏµé ¸ðµÎ¸¦ ´ã°í ÀÖ´Â ¸®½ºÆ®¸¦ »ý¼ºÇÑ´Ù:
$(filter-out $(mains),$(objects))
$(sort list)
$(sort foo bar lose)ÀÌ°ÍÀº `bar foo lose'¸¦ ¸®ÅÏÇÑ´Ù. ºÎ¼öÀûÀ¸·Î
sort
ÇÔ¼ö´Â Áߺ¹µÈ ´Ü¾îµéÀ» Á¦°ÅÇϱ⠶§¹®¿¡ ÀÌ°ÍÀ»
¼ÒÆà ¼ø¼¿¡ ´ëÇؼ ½Å°æ¾²Áö ¾Ê´õ¶óµµ ÀÌ·± ¸ñÀûÀ¸·Î ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö
ÀÖ´Ù.
´ÙÀ½Àº subst
¿Í patsubst
»ç¿ëÀÇ Çö½ÇÀûÀÎ
¿¹Á¦ÀÌ´Ù. makefileÀÌ VPATH
º¯¼ö¸¦ »ç¿ëÇÏ¿© make
°¡ Á¾¼Ó
ÆÄÀϵéÀ» °Ë»öÇØ¾ß ÇÒ µð·ºÅ丮 ¸®½ºÆ®¸¦ ÁöÁ¤ÇÑ´Ù°í °¡Á¤ÇÏÀÚ
(see section VPATH
: ¸ðµç Á¾¼Ó¹°¿¡ ´ëÇÑ °Ë»ö Æнº(Search Path for All Dependencies)).
ÀÌ ¿¹Á¦´Â C ÄÄÆÄÀÏ·¯¿¡°Ô µ¿ÀÏÇÑ µð·ºÅ丮 ¸®½ºÆ®¿¡¼ Çì´õ ÆÄÀϵéÀ» ã´Â
¹æ¹ýÀ» ¸»ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁØ´Ù.
VPATH
ÀÇ °ªÀº `src:../headers'¿Í °°ÀÌ ÄÝ·ÐÀ¸·Î ºÐ¸®µÇ´Â
µð·ºÅ丮 ¸®½ºÆ®ÀÌ´Ù. ù¹ø°, subst
ÇÔ¼ö´Â ÄݷеéÀ» ½ºÆäÀ̽ºµé·Î
º¯°æÇÏ´Â µ¥ »ç¿ëµÈ´Ù:
$(subst :, ,$(VPATH))
ÀÌ°ÍÀº `src ../headers'¸¦ ¸¸µç´Ù. ±×¸®°í ³ª¼ patsubst
´Â
°¢ µð·ºÅ丮 À̸§À» `-I' Ç÷¡±×·Î º¯°æÇÏ´Â µ¥ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº
º¯¼ö CFLAGS
ÀÇ °ª¿¡ ´õÇØÁú ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ÀÚµ¿À¸·Î ´ÙÀ½°ú °°ÀÌ
C ÄÄÆÄÀÏ·¯¿¡°Ô Àü´ÞµÈ´Ù:
override CFLAGS += $(patsubst %,-I%,$(subst :, ,$(VPATH)))
ÀÌ°ÍÀÇ È¿°ú´Â
ÅؽºÆ® `-Isrc -I../headers'¸¦ CFLAGS
¿¡°Ô »çÀü¿¡ ÁÖ¾îÁ³´ø
°ª¿¡ µ¡ºÙÀÌ´Â °ÍÀÌ´Ù. override
Áö½Ã¾î´Â, CFLAGS
ÀÇ ÀÌÀúÀÇ
°ªÀÌ ¸í·É ¸Å°³º¯¼ö·Î ÁÖ¾îÁ³´Ù ÇÏ´õ¶óµµ »õ·Î¿î °ªÀÌ ÇÒ´çµÇµµ·Ï ÇÏ´Â µ¥
»ç¿ëµÈ´Ù (see section override
Áö½Ã¾î).
³»Àå È®Àå ÇÔ¼öµé ¸î°¡Áö´Â Ưº°È÷ ÆÄÀÏ À̸§µéÀ» ¶Ç´Â ÆÄÀÏ À̸§µé ¸®½ºÆ®¸¦ ºÐÇØÇÏ´Â µ¥ ¿¬°üÀÌ ÀÖ´Ù.
´ÙÀ½ ÇÔ¼öµé ¸î°¡Áö´Â ÆÄÀÏ À̸§¿¡ ´ëÇؼ ƯÁ¤ º¯È¯À» ¼öÇàÇÑ´Ù. ÇÔ¼öÀÇ ¸Å°³º¯¼ö´Â °ø¹é¹®ÀÚ·Î ºÐ¸®µÈ, ÀÏ·ÃÀÇ ÆÄÀÏ À̸§µé·Î Ãë±ÞµÈ´Ù. (¾ÕµÚ¿¡ ÀÖ´Â °ø¹é¹®ÀÚµéÀº ¹«½ÃµÈ´Ù.) ÀÌ ÀÏ·ÃÀÇ ÆÄÀÏ À̸§µé °¢°¢Àº µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î º¯È¯µÇ°í ±× °á°ú´Â ±×µé »çÀÌ¿¡ ´ÜÀÏ ½ºÆäÀ̽ºµéÀ» ³Ö¾î¼ ¹ÀÎ °ÍÀÌ µÈ´Ù.
$(dir names...)
$(dir src/foo.c hacks)´Â `src/ ./'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(notdir names...)
$(notdir src/foo.c hacks)´Â `foo.c hacks'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(suffix names...)
$(suffix src/foo.c src-1.0/bar.c hacks)´Â `.c .c'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(basename names...)
$(basename src/foo.c src-1.0/bar hacks)´Â `src/foo src-1.0/bar hacks' ¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(addsuffix suffix,names...)
$(addsuffix .c,foo bar)´Â `foo.c bar.c'¶ó´Â °á°ú¸¦ ¸¸µé¾î³½´Ù.
$(addprefix prefix,names...)
$(addprefix src/,foo bar)´Â `src/foo src/bar'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(join list1,list2)
dir
°ú notdir
ÇÔ¼öµéÀÇ °á°úµéÀ» ¸ÓÁö(merge)Çؼ
ÀÌµé µÎ ÇÔ¼öµé¿¡ ÁÖ¾îÁø ÆÄÀϵéÀÇ ¿À¸®Áö³Î ¸®½ºÆ®¸¦ ¸¸µé ¼ö ÀÖ´Ù.
$(word n,text)
$(word 2, foo bar baz)`bar'¸¦ ¸®ÅÏÇÑ´Ù.
$(wordlist s,e,text)
make
´Â ±×µéÀ» ¼·Î ¸Â¹Ù²Û´Ù(swap). ¿¹¸¦ µé¾î¼,
$(wordlist 2, 3, foo bar baz)´Â `bar baz'¸¦ ¸®ÅÏÇÑ´Ù.
$(words text)
$(word $(words text),text)
·Î
Ç¥ÇöµÉ ¼ö ÀÖ´Ù.
$(firstword names...)
$(firstword foo bar)´Â `foo'¶ó´Â °á°ú¸¦ ¸¸µç´Ù. ºñ·Ï
$(firstword text)
°¡ $(word 1,text)
°ú °°Áö¸¸ firstword
ÇÔ¼ö´Â ±×
´Ü¼ø¼º ¶§¹®¿¡ ³²¾Ò´Ù.
$(wildcard pattern)
wildcard
ÇÔ¼öÀÇ °á°ú´Â ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ÇöÁ¸ÇÏ´Â ÆÄÀϵéÀÇ À̸§µéÀ» ½ºÆäÀ̽º·Î
ºÐ¸®ÇÑ ¸®½ºÆ®ÀÌ´Ù.
See section ÆÄÀÏ À̸§¿¡ ¿ÍÀϵåÄ«µå »ç¿ë(Using Wildcard Characters in File Names).
foreach
ÇÔ¼ö(The foreach
Function)
foreach
ÇÔ¼ö´Â ´Ù¸¥ ÇÔ¼öµé°ú ¾ÆÁÖ ´Ù¸£´Ù. ÀÌ°ÍÀº ÅؽºÆ®ÀÇ ÇÑ
Á¶°¢ÀÌ ¹Ýº¹ÀûÀ¸·Î »ç¿ëµÇµµ·Ï ÇÑ´Ù. À̶§ ¸Å¹ø ±×°Í¿¡ ´ëÇؼ ´Ù¸¥ ´ëÀÔÀÌ
¼öÇàµÈ´Ù. ÀÌ°ÍÀº ½© sh
ÀÇ for
¸í·É, ±×¸®°í C-½©
csh
ÀÇ foreach
¸í·É°ú ´àÀº °ÍÀÌ´Ù.
foreach
ÇÔ¼öÀÇ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù:
$(foreach var,list,text)
ù¹ø° µÎ ¸Å°³º¯¼öµé, var¿Í list´Â ´Ù¸¥ °ÍÀÌ ¼öÇàµÇ±â Àü¿¡ È®ÀåµÈ´Ù; ¸¶Áö¸· ¸Å°³º¯¼ö text´Â µ¿ÀÏÇÑ ½Ã°£¿¡ È®ÀåµÇÁö ¾Ê´Â´Ù. ±×¸®°í ³ª¼ listÀÇ È®ÀåµÈ °¢ ´Ü¾î¿¡ ´ëÇؼ varÀÇ È®ÀåµÈ °ªÀ» °¡Áö´Â º¯¼ö´Â ÀÌ ´Ü¾î·Î ¼³Á¤µÇ°í ±× ´ÙÀ½¿¡ text°¡ È®ÀåµÈ´Ù. ¾Æ¸¶ text´Â ±× º¯¼ö¿¡ ´ëÇÑ ÂüÁ¶¸¦ ´ã°í ÀÖÀ» °ÍÀÌ´Ù. ±×·¡¼ ±×°ÍÀÇ È®ÀåÀº ¸Å¹ø ´Ù¸£´Ù.
°á°úÀûÀ¸·Î text´Â list¿¡ ÀÖ´Â °ø¹éÀ¸·Î-ºÐ¸®µÈ ´Ü¾îµé
°³¼ö¸¸Å È®ÀåµÈ´Ù. textÀÇ ¿©·¯ È®ÀåµéÀÌ ±×µé »çÀÌ¿¡ ½ºÆäÀ̽ºµéÀ»
³Ö¾î¼ ¿¬°áµÇ¾î foreach
ÀÇ °á°ú¸¦ ¸¸µç´Ù.
´ÙÀ½ ´Ü¼øÇÑ ¿¹Á¦´Â º¯¼ö `files'¸¦ `dirs' ¸®½ºÆ®ÀÇ µð·ºÅ丮µé¿¡ ÀÖ´Â ¸ðµç ÆÄÀϵéÀÇ ¸®½ºÆ®·Î ¼³Á¤ÇÑ´Ù.
dirs := a b c d files := $(foreach dir,$(dirs),$(wildcard $(dir)/*))
¿©±â¼ text´Â `$(wildcard $(dir)/*)'ÀÌ´Ù. ù¹ø° ¹Ýº¹Àº
dir
¿¡ ´ëÇؼ °ª `a'À» ã¾Æ ³Ö°í¼ `$(wildcard a/*)'¿Í
µ¿ÀÏÇÑ °á°ú¸¦ »ý»êÇÑ´Ù; µÎ¹ø° ¹Ýº¹Àº `$(wildcard b/*)'À̶ó´Â
°á°ú¸¦ »ý¼ºÇÑ´Ù; ±×¸®°í ¼¼¹ø°´Â `$(wildcard c/*)'.
ÀÌ ¿¹Á¦´Â ´ÙÀ½ ¿¹Á¦¿Í µ¿ÀÏÇÑ (`dirs'¸¦ ¼³Á¤ÇÏ´Â °Í »©°í) °á°ú¸¦ °¡Áø´Ù:
files := $(wildcard a/* b/* c/* d/*)
text°¡ º¹ÀâÇÒ ¶§, Ãß°¡ÀÇ º¯¼ö·Î, ±×°Í¿¡ À̸§À» ÁÖ¾î¼ °¡µ¶¼ºÀ» ÁõÁøÇÒ ¼ö ÀÖ´Ù:
find_files = $(wildcard $(dir)/*) dirs := a b c d files := $(foreach dir,$(dirs),$(find_files))
¿©±â¼ ¿ì¸®´Â º¯¼ö find_files
¸¦ ÀÌ·± ½ÄÀ¸·Î »ç¿ëÇÏ°í
ÀÖ´Ù. ¿ì¸®´Â Æò¹üÇÑ `='¸¦ ½á¼ Àç±ÍÀûÀ¸·Î-È®ÀåµÇ´Â º¯¼ö Çϳª¸¦
Á¤ÀÇÇß´Ù. ±×·¡¼ ±×°ÍÀÇ °ªÀ» foreach
ÀÇ Á¦¾îÇÏ¿¡¼ ´Ù½Ã
È®ÀåµÇ¾îÁö´Â ½ÇÁ¦ ÇÔ¼ö È£Ãâ¿¡ µû¶ó¼ °¡Áø´Ù; ´Ü¼øÇÏ°Ô-È®ÀåµÇ´Â º¯¼ö´Â
±×·¸Áö ¾ÊÀ» °ÍÀÌ´Ù. ¿Ö³Ä¸é wildcard
°¡ find_files
¸¦
Á¤ÀÇÇÏ´Â ¼ø°£¿¡ Çѹø¸¸ È£ÃâµÉ °ÍÀ̱⠶§¹®ÀÌ´Ù.
foreach
ÇÔ¼ö´Â º¯¼ö var¿¡ ´ëÇÑ Ç×±¸ÀûÀÎ È¿°ú¸¦ °¡ÁöÁö
¾Ê´Â´Ù; foreach
ÇÔ¼ö È£Ãâ ÀÌÈÄ ÀÌ°ÍÀÇ °ª°ú ÃëÇâÀº ±×µéÀÌ ÀÌÀü¿¡
±×·¨´ø °Í°ú µ¿ÀÏÇÏ´Ù. ´Ù¸¥ list·ÎºÎÅÍ ÃëÇØÁø ´Ù¸¥ °ªµéÀº Àá½Ã
µ¿¾È¸¸, foreach
ÀÇ ½ÇÇà µ¿¾È¸¸, È¿·ÂÀÌ ÀÖ´Ù. º¯¼ö var´Â
foreach
ÀÇ ½ÇÇൿ¾È ´Ü¼øÇÏ°Ô-È®ÀåµÇ´Â º¯¼öÀÌ´Ù. var°¡
foreach
ÇÔ¼ö È£Ãâ ÀÌÀü¿¡ Á¤ÀÇµÈ °ÍÀÌ ¾Æ´Ï¶ó¸é ÀÌ°ÍÀº ±× È£Ãâ
µÚ¿¡µµ Á¤ÀÇµÈ °ÍÀÌ ¾Æ´Ï´Ù. See section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables).
º¯¼öµé À̸§µéÀ» °á°ú·Î °¡Áö´Â º¹ÀâÇÑ º¯¼ö Ç¥Çö½ÄÀ» »ç¿ëÇÒ ¶§ »ó´çÈ÷ Á¶½ÉÇØ¾ß ÇÑ´Ù. ¿Ö³Ä¸é ¸¹Àº ÀÌ»óÇÑ °ÍµéÀÌ À¯È¿ÇÑ º¯¼ö À̸§µéÀÌÁö¸¸ ¿©·¯ºÐÀÌ ÀǵµÇÑ °ÍÀÌ ¾Æ´Ò ¼öµµ Àֱ⠶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î¼,
files := $(foreach Esta escrito en espanol!,b c ch,$(find_files))
ÀÌ°ÍÀº find_files
°ªÀÌ À̸§ÀÌ
`Esta escrito en espanol!' (es un nombre bastante largo, no?) ÀÎ
º¯¼ö¸¦ ÂüÁ¶ÇÏ°í ÀÖ´Ù¸é À¯¿ëÇÏ°ÚÁö¸¸ ÀÌ°ÍÀº ½Ç¼öÀÏ °¡´É¼ºÀÌ
´õ¸¹´Ù.
origin
ÇÔ¼ö(The origin
Function)
origin
ÇÔ¼ö´Â º¯¼öµéÀÇ °ª¿¡¼ ³ªÅ¸³ªÁö ¾Ê´Â´Ù´Â Á¡¿¡¼ ´Ù¸¥
ÇÔ¼öµé°ú ´Ù¸£´Ù; ÀÌ°ÍÀº ÇϳªÀÇ º¯¼ö¿¡ ´ëÇؼ ¾î¶² °ÍÀ» ¸»ÇÏ´Â
°ÍÀÌ´Ù. Ưº°È÷ ÀÌ°ÍÀº ÀÌ°ÍÀÌ ¾îµð·ÎºÎÅÍ ¿Â °ÍÀΰ¡¸¦ ¸»ÇÑ´Ù.
origin
ÇÔ¼öÀÇ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù:
$(origin variable)
variableÀº ÁúÀÇÇÏ°í ÀÖ´Â º¯¼öÀÇ À̸§ÀÌ´Ù; ±× º¯¼ö¿¡ ´ëÇؼ ÂüÁ¶ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ±×·¯¹Ç·Î ±×°ÍÀ» ¾µ ¶§ `$'³ª °ýÈ£µéÀ» ÀϹÝÀûÀÎ °æ¿ìó·³ ¾²Áö ¾ÊÀ» °ÍÀÌ´Ù. (±×·¯³ª ±× À̸§¾È¿¡¼ º¯¼ö ÂüÁ¶¸¦ ¾µ ¼ö ÀÖ´Ù. »ó¼ö°¡ ¾Æ´Ñ À̸§À» ¿øÇÑ´Ù¸é ¸»ÀÌ´Ù.)
ÀÌ ÇÔ¼öÀÇ °á°ú´Â ±× º¯¼ö variableÀÌ Á¤ÀÇµÈ ¹æ¹ýÀ» ¸»ÇÏ´Â ¹®ÀÚ¿ÀÌ´Ù:
CC
³ª ±âŸ µîµîó·³ ÀϹÝÀûÀÎ µðÆúÆ®
Á¤ÀǸ¦ °®°í ÀÖ´Ù¸é ÀÌ °ªÀ» °¡Áø´Ù. See section ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇØ »ç¿ëµÇ´Â º¯¼ö(Variables Used by Implicit Rules). µðÆúÆ® º¯¼ö¸¦ ÀçÁ¤ÀÇÇÑ °ÍÀ̶ó¸é
origin
ÇÔ¼ö´Â ÃßÈÄ Á¤ÀÇÀÇ ¿øõ(origin)À» ¸®ÅÏÇÒ °ÍÀÌ´Ù.
override
Áö½Ã¾î·Î makefile¿¡¼ Á¤ÀÇµÈ °ÍÀ̶ó¸é
ÀÌ °ªÀ» °¡Áø´Ù (see section override
Áö½Ã¾î).
ÀÌ Á¤º¸´Â ÁÖ·Î ¾î¶² º¯¼öÀÇ °ªÀ» ¹Ï°íÀÚ Çϴ°¡ ¾ÈÇϴ°¡¸¦ °áÁ¤ÇÒ ¶§
À¯¿ëÇÏ´Ù (È£±â¼¶À» ÃæÁ·ÇÏ´Â °Í ¸»°í). ¿¹¸¦ µé¾î¼ ´Ù¸¥ makefile
`bar'¸¦ Æ÷ÇÔÇÏ´Â makefile `foo'¸¦ °¡Áö°í ÀÖ´Ù°í
°¡Á¤ÇÏÀÚ. ¸í·É `make -f bar'¸¦ ½ÇÇàÇÑ´Ù¸é, ȯ°æÀÌ
bletch
ÀÇ Á¤ÀǸ¦ °®°í ÀÖ´Ù°í ÇÏ´õ¶óµµ, bletch
°¡
`bar'¿¡ Á¤ÀÇµÈ °ÍÀ» ¿øÇÑ´Ù. ±×·¯³ª `foo'°¡ `bar'¸¦
Æ÷ÇÔÇϱâ Àü¿¡ bletch
¸¦ Á¤ÀÇÇß´Ù¸é ±× Á¤ÀǸ¦ ¿À¹ö¶óÀ̵åÇϱ⸦
¿øÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ°ÍÀº override
Áö½Ã¾î¸¦ `foo'¿¡¼
»ç¿ëÇÏ°í ±× Á¤ÀǸ¦ `bar'¿¡¼ ³ªÁßÀÇ Á¤ÀÇ ÀÌÀü¿¡ Á¤ÀÇÇÔÀ¸·Î½á
±×·¸°Ô ÇÒ ¼ö ÀÖ´Ù; ºÒÇàÇÏ°Ôµµ override
Áö½Ã¾î´Â ¸ðµç ¸í·ÉÇà
Á¤ÀǵéÀ» ¿À¹ö¶óÀ̵åÇÒ °ÍÀÌ´Ù. ±×·¡¼, `bar'´Â ´ÙÀ½À»
Æ÷ÇÔÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ifdef bletch ifeq "$(origin bletch)" "environment" bletch = barf, gag, etc. endif endif
bletch
°¡ ȯ°æÀ¸·ÎºÎÅÍ Á¤ÀǵǾú´Ù¸é ÀÌ°ÍÀº ±×°ÍÀ» ÀçÁ¤ÀÇÇÒ
°ÍÀÌ´Ù.
bletch
ÀÇ ÀÌÀü Á¤ÀǸ¦ overrideÇÏ°íÀÚ ÇÏ°í ÀÌ°ÍÀÌ È¯°æÀ¸·ÎºÎÅÍ ¿Â
°ÍÀ̶ó¸é, `-e'ÇÏ¿¡¼Á¶Â÷, ¿©·¯ºÐÀº ´ÙÀ½°ú °°ÀÌ ¾µ¼ö ÀÖÀ» °ÍÀÌ´Ù:
ifneq "$(findstring environment,$(origin bletch))" "" bletch = barf, gag, etc. endif
¿©±â¼ `$(origin bletch)'°¡ `environment' ¶Ç´Â `environment override' ¸¦ ¸®ÅÏÇÑ´Ù¸é ÀçÁ¤ÀÇ°¡ ÀϾÙ. See section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis).
shell
ÇÔ¼ö(The shell
Function)
shell
ÇÔ¼ö´Â
wildcard
ÇÔ¼ö (see section wildcard
ÇÔ¼ö(The Function wildcard
))¸¦ Á¦¿ÜÇÏ°í, ÀÌ°ÍÀÌ make
ÀÇ ¹Ù±ù ¼¼»ó°ú
Åë½ÅÇÑ´Ù´Â Á¡¿¡¼, ´Ù¸¥ ÇÔ¼öµé°ú ´Ù¸£´Ù.
shell
ÇÔ¼ö´Â ´ëºÎºÐÀÇ ½©¿¡¼ ¿ªÈ¬µû¿ÈÇ¥(``')°¡ ¼öÇàÇÏ´Â
±â´É°ú µ¿ÀÏÇÑ ±â´ÉÀ» ¼öÇàÇÑ´Ù: ÀÌ°ÍÀº command expansionÀ» ÇÑ´Ù.
ÀÌ°ÍÀº ½© ¸í·ÉÀÎ ¸Å°³º¯¼ö¸¦ ÃëÇÏ°í ¸í·ÉÀÇ °á°ú¸¦ ¸®ÅÏÇÑ´Ù´Â °ÍÀ»
ÀǹÌÇÑ´Ù. make
°¡ ÀÌ °á°ú¿¡ ´ëÇؼ, ÁÖº¯ ÅؽºÆ®·Î ÀÌ°ÍÀ» ´ëÀÔÇϱâ
Àü¿¡, ÇÏ´Â À¯ÀÏÇÑ Ã³¸®´Â °¢ °³ÇàÀ̳ª ij¸®Áö-¸®ÅÏ / °³Çà ½ÖÀ» ´ÜÀÏ
°ø¹éÀ¸·Î º¯È¯ÇÏ´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ ³¡¿¡ ´Þ¸° (ij¸®Áö-¸®ÅÏ°ú) °³ÇàÀ»,
ÀÌ°ÍÀÌ °á°úÀÇ ¸¶Áö¸·À̶ó¸é, Á¦°ÅÇÑ´Ù.
shell
ÇÔ¼ö¿¡ ´ëÇÑ È£Ãâ¿¡ ÀÇÇؼ ½ÇÇàµÈ ¸í·ÉÀº ÇÔ¼ö È£ÃâÀÌ È®ÀåµÉ
¶§ ½ÇÇàµÈ´Ù. ´ëºÎºÐÀÇ °æ¿ì ÀÌ°ÍÀº makefileÀÌ ÀÐÈú ¶§ÀÌ´Ù.
±ÔÄ¢ÀÇ ¸í·É¾È¿¡ ÀÖ´Â ÇÔ¼ö È£ÃâµéÀº ±× ¸í·ÉÀÌ ½ÇÇàµÉ ¶§ È®ÀåµÈ´Ù´Â °ÍÀÌ
¿¹¿ÜÀ̸ç, ÀÌ°ÍÀº ´Ù¸¥ ¸ðµç °Íµé°ú ¸¶Âù°¡Áö·Î shell
À̶ó´Â ÇÔ¼ö
È£Ãâ¿¡µµ Àû¿ëµÇ´Â °ÍÀÌ´Ù.
´ÙÀ½Àº shell
ÇÔ¼öÀÇ »ç¿ë¿¡ ´ëÇÑ ¸î°¡Áö ¿¹Á¦µéÀÌ´Ù:
contents := $(shell cat foo)
ÀÌ°ÍÀº contents
¸¦ `foo' ÆÄÀÏÀÇ ³»¿ëÀ¸·Î ¼³Á¤ÇÑ´Ù. °¢ ¶óÀÎÀ»
ºÐ¸®ÇÏ´Â °ø¹éµé(°³ÇàÀ̶ó±â º¸´Ù´Â)·Î.
files := $(shell echo *.c)
ÀÌ°ÍÀº files
¸¦ `*.c'ÀÇ È®ÀåÀ¸·Î ¼³Á¤ÇÑ´Ù. make
°¡
¾ÆÁÖ ÀÌ»óÇÑ ½©À» »ç¿ëÇÏ°í ÀÖÁö ¾Ê´Ù¸é ÀÌ°ÍÀº `$(wildcard
*.c)'°ú µ¿ÀÏÇÑ °á°ú¸¦ ¾ò´Â´Ù.
Go to the first, previous, next, last section, table of contents.