Go to the first, previous, next, last section, table of contents.


ÅؽºÆ® º¯È¯À» À§ÇÑ ÇÔ¼ö(Functions for Transforming Text)

ÇÔ¼ö(functions)´Â ¿©·¯ºÐÀÌ makefile¾È¿¡¼­, ÀÛ¾÷ÇÒ ÆÄÀϵéÀ» ¾Ë¾Æ³»°Å³ª ¾Æ´Ï¸é »ç¿ëÇÒ ¸í·ÉµéÀ» ¾Ë¾Æ³¾ ¼ö ÀÖµµ·Ï, ÅؽºÆ®¸¦ ó¸®ÇÏ´Â °ÍÀÌ´Ù. ÇÔ¼ö´Â dfn{ÇÔ¼ö È£Ãâ(function call)} ¾È¿¡¼­ »ç¿ëÇÑ´Ù. ¿©±â¿¡¼­ ÇÔ¼öÀÇ À̸§°ú ÇÔ¼ö°¡ ÀÛ¾÷ÇÒ ÅؽºÆ®(¸Å°³º¯¼ö(arguments) ¸¦ Á¦°øÇÑ´Ù. ÇÔ¼ö ó¸®ÀÇ °á°ú´Â makefileÀÇ ±× È£Ãâ À§Ä¡¿¡ »ðÀԵȴÙ. ¸¶Ä¡ º¯¼ö°¡ ´ëÀÔµÈ °Íó·³.

ÇÔ¼ö È£Ãâ ¹®¹ý(Function Call Syntax)

ÇÔ¼ö È£ÃâÀº º¯¼ö ÂüÁ¶¿Í ´á¾Ò´Ù. ÀÌ°ÍÀº ´ÙÀ½°ú °°ÀÌ º¸ÀÏ °ÍÀÌ´Ù:

$(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ÀÇ °ª Àüü¿¡¼­ °¢ ½ºÆäÀ̽º¸¦ ÄÞ¸Ó·Î º¯°æÇÏ°í ±× °á°ú¸¦ ÀÌ °ª¿¡ ´ëÀÔÇÑ´Ù.

¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis)

´ÙÀ½Àº ¹®ÀÚ¿­µé¿¡ ´ëÇؼ­ ÀÛµ¿ÇÏ´Â ÇÔ¼öµéÀÌ´Ù:

$(subst from,to,text)
text ÅؽºÆ®¿¡ ´ëÇؼ­ ÅؽºÆ®ÀÇ ´ëÄ¡¸¦ ¼öÇàÇÑ´Ù: ÀÌ°Í ¾È¿¡¼­ fromÀÌ ³ª¿À¸é to·Î ´ëÄ¡µÈ´Ù. ±× °á°ú°¡ ´ëÀԵȴÙ. ¿¹¸¦ µé¾î¼­
$(subst ee,EE,feet on the street)
´Â `fEEt on the strEEt'¸¦ ´ëÀÔÇÑ´Ù.
$(patsubst pattern,replacement,text)
text ¾È¿¡¼­ °ø¹é¹®ÀÚ·Î ºÐ¸®µÈ ´Ü¾îµé Áß pattern¿Í ¸ÅÄ¡µÇ´Â ´Ü¾î¸¦ ã¾Æ¼­ ±×°ÍµéÀ» replacement·Î º¯°æÇÑ´Ù. ¿©±â¼­ pattern´Â ¿ÍÀϵåÄ«µå ¿ªÇÒÀ» ÇÏ´Â `%'¸¦ °¡Áú ¼ö Àִµ¥, ÀÌ°ÍÀº ¾î¶² ´Ü¾î ³»¿¡ ÀÖ´Â ÀÓÀÇ °³¼öÀÇ ¾î¶² ¹®ÀÚµé°úµµ ¸ÅÄ¡µÈ´Ù. replacementµµ ¿ª½Ã `%'¸¦ °¡Áú ¼ö ÀÖ´Â µ¥ `%'´Â pattern ¾È¿¡¼­ `%'°ú ¸ÅÄ¡µÈ ÅؽºÆ®¿¡ ÀÇÇؼ­ ´ëÄ¡µÈ´Ù. 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)
ÀÌ ÇÔ¼ö´Â stringÀÇ ¾ÕµÚ¿¡ ÀÖ´Â °ø¹é¹®ÀÚµéÀ» Á¦°ÅÇÏ°í ³»ºÎ¿¡ ÀÖ´Â Çϳª ÀÌ»óÀÇ °ø¹é¹®ÀÚµéÀ» ´ÜÀÏ ½ºÆäÀ̽º·Î ±³Ã¼ÇÑ´Ù. ±×·¡¼­ `$(strip a b c )'ÀÇ °á°ú´Â `a b c'°¡ µÈ´Ù. 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)
ÀÌ ÇÔ¼ö´Â in¿¡¼­ find¸¦ ã´Â´Ù. ÀÖ´Ù¸é ±× °ªÀº find°¡ µÈ´Ù; ±×·¸Áö ¾Ê´Ù¸é ±× °ªÀº ºó °ÍÀÌ µÈ´Ù. ÀÌ ÇÔ¼ö¸¦ Á¶°Ç¿¡¼­ »ç¿ëÇؼ­ ÁÖ¾îÁø ¹®ÀÚ¿­ ¾È¿¡¼­ ƯÁ¤ ¹®ÀÚ¿­ÀÇ Á¸Àç ¿©ºÎ¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°Àº µÎ ¿¹Á¦µéÀº,
$(findstring a,a b c)
$(findstring a,b c)
`a'¿Í `' (ºó ¹®ÀÚ¿­) °¢°¢À» ¸¸µç´Ù. findstringÀÇ ½ÇÁúÀûÀÎ ÀÀ¿ë¿¡ ´ëÇؼ­´Â See section Ç÷¡±× °Ë»ç Á¶°Ç(Conditionals that Test Flags).
$(filter pattern...,text)
ÀÌ ÇÔ¼ö´Â 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)
ÀÌ ÇÔ¼ö´Â text¿¡¼­ pattern ´Ü¾îµé°ú ÀÏÄ¡ÇÏ´Â, °ø¹é¹®ÀÚµé·Î ºÐ¸®µÈ ´Ü¾îµéÀ» ¸ðµÎ Á¦°ÅÇÏ°í ÀÏÄ¡ÇÏÁö ¾Ê´Â ´Ü¾îµé¸¸À» ¸®ÅÏÇÑ´Ù. ÀÌ°ÍÀº filter ÇÔ¼öÀÇ Á¤È®ÇÑ ¹Ý´ëÀÌ´Ù. ¿¹¸¦ µé¾î¼­, ´ÙÀ½ÀÌ ÁÖ¾îÁ³´Ù¸é:
objects=main1.o foo.o main2.o bar.o
mains=main1.o main2.o
´ÙÀ½Àº `mains'¿¡ ÀÖÁö ¾Ê´Â ¿ÀºêÁ§Æ® ÆÄÀÏµé ¸ðµÎ¸¦ ´ã°í ÀÖ´Â ¸®½ºÆ®¸¦ »ý¼ºÇÑ´Ù:
$(filter-out $(mains),$(objects))
$(sort list)
ÀÌ ÇÔ¼ö´Â 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 Áö½Ã¾î).

ÆÄÀÏ À̸§µéÀ» À§ÇÑ ÇÔ¼ö(Functions for File Names)

³»Àå È®Àå ÇÔ¼öµé ¸î°¡Áö´Â Ưº°È÷ ÆÄÀÏ À̸§µéÀ» ¶Ç´Â ÆÄÀÏ À̸§µé ¸®½ºÆ®¸¦ ºÐÇØÇÏ´Â µ¥ ¿¬°üÀÌ ÀÖ´Ù.

´ÙÀ½ ÇÔ¼öµé ¸î°¡Áö´Â ÆÄÀÏ À̸§¿¡ ´ëÇؼ­ ƯÁ¤ º¯È¯À» ¼öÇàÇÑ´Ù. ÇÔ¼öÀÇ ¸Å°³º¯¼ö´Â °ø¹é¹®ÀÚ·Î ºÐ¸®µÈ, ÀÏ·ÃÀÇ ÆÄÀÏ À̸§µé·Î Ãë±ÞµÈ´Ù. (¾ÕµÚ¿¡ ÀÖ´Â °ø¹é¹®ÀÚµéÀº ¹«½ÃµÈ´Ù.) ÀÌ ÀÏ·ÃÀÇ ÆÄÀÏ À̸§µé °¢°¢Àº µ¿ÀÏÇÑ ¹æ½ÄÀ¸·Î º¯È¯µÇ°í ±× °á°ú´Â ±×µé »çÀÌ¿¡ ´ÜÀÏ ½ºÆäÀ̽ºµéÀ» ³Ö¾î¼­ ¹­ÀÎ °ÍÀÌ µÈ´Ù.

$(dir names...)
ÀÌ°ÍÀº names¿¡ ÀÖ´Â °¢ ÆÄÀÏ À̸§¿¡¼­ µð·ºÅ丮-ÆÄÆ®¸¦ ÃßÃâÇÑ´Ù. ÆÄÀÏ À̸§ÀÇ µð·ºÅ丮-ÆÄÆ®´Â ±× ¾È¿¡ ÀÖ´Â ¸¶Áö¸· ½½·¡½¬±îÁöÀÇ (±×¸®°í ÀÌ ¸¶Áö¸· ½½·¡½¬¸¦ Æ÷ÇÔÇÑ) ¸ðµç °ÍÀÌ´Ù. ±× ÆÄÀÏ À̸§ÀÌ ½½·¡½¬°¡ ¾øÀ¸¸é µð·ºÅ丮 ÆÄÆ®´Â ¹®ÀÚ¿­ `./'°¡ µÈ´Ù. ¿¹¸¦ µé¾î¼­,
$(dir src/foo.c hacks)
´Â `src/ ./'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(notdir names...)
ÀÌ ÇÔ¼ö´Â names¿¡ ÀÖ´Â °¢ ÆÄÀÏ À̸§ÀÇ µð·ºÅ丮-ºÎºÐÀ» Á¦¿ÜÇÑ ¸ðµç °ÍÀ» ÃßÃâÇÑ´Ù. ÆÄÀÏ À̸§¿¡ ½½·¡½¬°¡ ¾øÀ¸¸é º¯È­µÇÁö ¾Ê´Â´Ù. ±×·¸Áö ¾Ê´Â °æ¿ì ¸¶Áö¸· ½½·¡½¬±îÁö ¸ðµç °ÍÀÌ ±×°ÍÀ¸·ÎºÎÅÍ Á¦°ÅµÈ´Ù. ½½·¡½¬·Î ³¡³ª´Â ÆÄÀÏ À̸§Àº ºó ¹®ÀÚ¿­ÀÌ µÉ °ÍÀÌ´Ù. ÀÌ·¸°Ô µÇ´Â °ÍÀº ºÒÇàÇÑ °ÍÀÌ´Ù. ¿Ö³Ä¸é ÀÌ·¸°Ô µÇ´Â °ÍÀº, ±× °á°ú°¡ Ç×»ó ¸Å°³º¯¼ö°¡ °¡Áö´Â °Í°ú µ¿ÀÏÇÏÁö ¾ÊÀº °³¼öÀÇ °ø¹éÀ¸·Î-ºÐ¸®µÈ ÆÄÀÏ À̸§µéÀ» °¡Áø´Ù´Â °ÍÀ» ÀǹÌÇϱ⠶§¹®ÀÌ´Ù; ±×·¯³ª ¿ì¸®´Â ´Ù¸¥ ¾î¶² À¯È¿ÇÑ ´ë¾ÈÀ» º¸Áö ¸øÇß´Ù. ¿¹¸¦ µé¾î¼­,
$(notdir src/foo.c hacks)
´Â `foo.c hacks'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(suffix names...)
ÀÌ ÇÔ¼ö´Â names¿¡ ÀÖ´Â °¢ ÆÄÀÏ À̸§ÀÇ Á¢¹Ì»ç(È®ÀåÀÚ ?)¸¦ ÃßÃâÇÑ´Ù. ÆÄÀÏ À̸§ÀÌ ¼Ò¼ýÁ¡(period)¸¦ °®°í ÀÖ´Ù¸é Á¢¹Ì»ç´Â ¸¶Áö¸· ¼Ò¼ýÁ¡ºÎÅÍ ½ÃÀÛÇÑ ¸ðµç °ÍÀÌ´Ù. ±×·¸Áö ¾Ê´Ù¸é Á¢¹Ì»ç´Â ºó ¹®ÀÚ¿­ÀÌ´Ù. ÀÌ°ÍÀº Á¾Á¾, names°¡ ºó °ÍÀÌ ¾Æ´Ò ¶§µµ ±× °á°ú°¡ ºó °ÍÀÌ µÉ ¼öµµ ÀÖÀ¸¸ç, names°¡ ´Ù¼öÀÇ ÆÄÀÏ À̸§µéÀ» °¡Áø´Ù ÇÏ´õ¶óµµ ±× °á°ú´Â ´õ ÀûÀº °³¼öÀÇ ÆÄÀÏ À̸§µéÀ» °¡Áú ¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ¿¹¸¦ µé¾î¼­,
$(suffix src/foo.c src-1.0/bar.c hacks)
´Â `.c .c'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(basename names...)
ÀÌ ÇÔ¼ö´Â names¿¡ ÀÖ´Â °¢ ÆÄÀÏ À̸§ÀÇ Á¢¹Ì»ç¸¦ Á¦¿ÜÇÑ ¸ðµç °ÍÀ» ÃßÃâÇÑ´Ù. ÆÄÀÏ À̸§ÀÌ ¼Ò¼ýÁ¡À» °®°í ÀÖ´Ù¸é basenameÀº óÀ½ºÎÅÍ ¸¶Áö¸· ¼Ò¼öÁ¡±îÁöÀÇ (¼Ò¼ýÁ¡Àº Æ÷ÇÔÇÏÁö ¾ÊÀ½) ¸ðµç °ÍÀÌ µÈ´Ù. µð·ºÅ丮 ºÎºÐ¿¡ ÀÖ´Â ¼Ò¼ýÁ¡µéÀº ¸ðµÎ ¹«½ÃµÈ´Ù. ¼Ò¼ýÁ¡ÀÌ ¾øÀ¸¸é basenameÀº Àüü ÆÄÀÏ À̸§ÀÌ µÈ´Ù. ¿¹¸¦ µé¾î¼­,
$(basename src/foo.c src-1.0/bar hacks)
´Â `src/foo src-1.0/bar hacks' ¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(addsuffix suffix,names...)
¸Å°³º¯¼ö names´Â °ø¹é¹®ÀÚµé·Î ºÐ¸®µÈ, ÀÏ´ÜÀÇ À̸§µé·Î Ãë±ÞµÈ´Ù; suffix´Â À¯´ÖÀ¸·Î½á »ç¿ëµÈ´Ù. suffixÀÇ °ªÀº °¢ °³º° À̸§ÀÇ ³¡¿¡ ´õÇØÁö°í ±×µé »çÀÌ¿¡ ´ÜÀÏ ½ºÆäÀ̽ºµéÀ» Ãß°¡ÇÑ ´õ Å« À̸§µéÀÌ ±× °á°úÀÌ´Ù. ¿¹¸¦ µé¾î¼­,
$(addsuffix .c,foo bar)
´Â `foo.c bar.c'¶ó´Â °á°ú¸¦ ¸¸µé¾î³½´Ù.
$(addprefix prefix,names...)
¸Å°³º¯¼ö names´Â °ø¹é¹®ÀÚµé·Î ±¸ºÐµÈ, ÀÏ´ÜÀÇ À̸§µé·Î Ãë±ÞµÈ´Ù; prefix´Â À¯´ÖÀ¸·Î½á »ç¿ëµÈ´Ù. prefixÀÇ °ªÀº °¢ °³º° À̸§ÀÇ ¾Õ¿¡ ºÙ°í, ±×µé »çÀÌ¿¡ ´ÜÀÏ ½ºÆäÀ̽ºµé·Î ä¿ö ¿¬°áµÈ ´õ Ä¿´Ù¶õ À̸§µéÀÌ °á°úÀÌ´Ù. ¿¹¸¦ µé¾î¼­,
$(addprefix src/,foo bar)
´Â `src/foo src/bar'¶ó´Â °á°ú¸¦ ¸¸µç´Ù.
$(join list1,list2)
ÀÌ°ÍÀº µÎ ¸Å°³º¯¼öµéÀ» ´Ü¾î ´ÜÀ§·Î(word by word) ¿¬°á(concatenate)ÇÑ´Ù: ¿¬°áµÈ µÎ°³ÀÇ Ã¹ ´Ü¾îµé(°¢ ¸Å°³º¯¼ö¿¡¼­ °¡Áö°í ¿Â °Í)ÀÌ °á°úÀÇ Ã¹¹ø° ´Ü¾î¸¦ ±¸¼ºÇÏ°í µÎ°³ÀÇ µÎ¹ø° ´Ü¾îµéÀÌ °á°úÀÇ µÎ¹ø° ´Ü¾î¸¦ ±¸¼ºÇÑ´Ù. ÀÌ·±½ÄÀ¸·Î °è¼ÓµÈ´Ù. ±×·¡¼­ °á°úÀÇ n¹ø° ´Ü¾î´Â °¢ ¸Å°³º¯¼öÀÇ n¹ø° ´Ü¾î·ÎºÎÅÍ ¿Â´Ù. ÇÑ ¸Å°³º¯¼ö°¡ ´Ù¸¥ °Íº¸´Ù ´õ ¸¹Àº ´Ü¾îµéÀ» °¡Áø´Ù¸é ¿©ºÐÀÇ ´Ü¾îµéÀº º¯°æ¾øÀÌ °á°ú¿¡ º¹»çµÈ´Ù. ¿¹¸¦ µé¾î¼­ `$(join a b,.c .o)'´Â `a.c b.o'¸¦ »ý¼ºÇÑ´Ù. ¸®½ºÆ®¿¡¼­ ´Ü¾îµé °£ÀÇ °ø¹é¹®ÀÚ´Â º¸Á¸µÇÁö ¾Ê´Â´Ù; ÀÌ°ÍÀº ´ÜÀÏ ½ºÆäÀ̽º·Î ´ëüµÈ´Ù. ÀÌ ÇÔ¼ö´Â dir°ú notdir ÇÔ¼öµéÀÇ °á°úµéÀ» ¸ÓÁö(merge)Çؼ­ ÀÌµé µÎ ÇÔ¼öµé¿¡ ÁÖ¾îÁø ÆÄÀϵéÀÇ ¿À¸®Áö³Î ¸®½ºÆ®¸¦ ¸¸µé ¼ö ÀÖ´Ù.
$(word n,text)
ÀÌ°ÍÀº textÀÇ n¹ø° ´Ü¾î¸¦ ¸®ÅÏÇÑ´Ù. nÀÇ ÇÕ¹ýÀûÀÎ °ªÀº 1ºÎÅÍ ½ÃÀÛÇÑ´Ù. n°¡ text¿¡ ÀÖ´Â ´Ü¾îµé °³¼öº¸´Ù ´õ Å©´Ù¸é ±× °ªÀº ºó °ÍÀÌ µÈ´Ù. ¿¹¸¦ µé¾î¼­,
$(word 2, foo bar baz)
`bar'¸¦ ¸®ÅÏÇÑ´Ù.
$(wordlist s,e,text)
ÀÌ°ÍÀº s·Î ½ÃÀÛÇÏ°í e·Î ³¡³ª´Â(°¢°¢ Æ÷ÇÔ) text¾ÈÀÇ ´Ü¾îµé ¸®½ºÆ®¸¦ ¸®ÅÏÇÑ´Ù. s¿Í eÀÇ ÇÕ¹ýÀûÀÎ °ªµéÀº 1ºÎÅÍ ½ÃÀÛÇÑ´Ù. s°¡ text¿¡ ÀÖ´Â ´Ü¾îµé °³¼öº¸´Ù Å©´Ù¸é ±× °ªÀº ºó °ÍÀÌ µÈ´Ù. e°¡ text¿¡ ÀÖ´Â ´Ü¾îµé °³¼öº¸´Ù Å©´Ù¸é textÀÇ ³¡±îÁöÀÇ ´Ü¾îµéÀÌ ¸®ÅϵȴÙ. s°¡ eº¸´Ù ´õ Å©´Ù¸é make´Â ±×µéÀ» ¼­·Î ¸Â¹Ù²Û´Ù(swap). ¿¹¸¦ µé¾î¼­,
$(wordlist 2, 3, foo bar baz)
´Â `bar baz'¸¦ ¸®ÅÏÇÑ´Ù.
$(words text)
ÀÌ°ÍÀº text¿¡ ÀÖ´Â ´Ü¾îµé °³¼ö¸¦ ¸®ÅÏÇÑ´Ù. ±×·¡¼­, textÀÇ ¸¶Áö¸· ´Ü¾î´Â $(word $(words text),text) ·Î Ç¥ÇöµÉ ¼ö ÀÖ´Ù.
$(firstword names...)
names ¸Å°³º¯¼ö´Â °ø¹éÀ¸·Î ºÐ¸®µÈ, ÀÏ´ÜÀÇ À̸§µé·Î »ý°¢µÈ´Ù. ±× °ªÀº(ÀÌ ÇÔ¼öÀÇ °á°ú°ªÀº) ±× ½Ã¸®ÁîÀÇ Ã¹¹ø° À̸§ÀÌ´Ù. À̸§µéÀÇ ¸¶Áö¸·Àº ¹«½ÃµÈ´Ù. ¿¹¸¦ µé¾î¼­,
$(firstword foo bar)
´Â `foo'¶ó´Â °á°ú¸¦ ¸¸µç´Ù. ºñ·Ï $(firstword text) °¡ $(word 1,text)°ú °°Áö¸¸ firstword ÇÔ¼ö´Â ±× ´Ü¼ø¼º ¶§¹®¿¡ ³²¾Ò´Ù.
$(wildcard pattern)
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ÀÌ Á¤ÀÇµÈ ¹æ¹ýÀ» ¸»ÇÏ´Â ¹®ÀÚ¿­ÀÌ´Ù:

`undefined'
º¯¼ö variableÀÌ ÀýÇô Á¤ÀÇµÈ ¹Ù°¡ ¾ø´Ù¸é ÀÌ °ªÀ» °¡Áø´Ù.
`default'
º¯¼ö variableÀÌ, CC³ª ±âŸ µîµîó·³ ÀϹÝÀûÀÎ µðÆúÆ® Á¤ÀǸ¦ °®°í ÀÖ´Ù¸é ÀÌ °ªÀ» °¡Áø´Ù. See section ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇØ »ç¿ëµÇ´Â º¯¼ö(Variables Used by Implicit Rules). µðÆúÆ® º¯¼ö¸¦ ÀçÁ¤ÀÇÇÑ °ÍÀ̶ó¸é origin ÇÔ¼ö´Â ÃßÈÄ Á¤ÀÇÀÇ ¿øõ(origin)À» ¸®ÅÏÇÒ °ÍÀÌ´Ù.
`environment'
variable °¡ ȯ°æ º¯¼ö·Î½á Á¤ÀÇµÈ °ÍÀÌ°í `-e' ¿É¼ÇÀÌ ÄÑÁø °ÍÀÌ ¾Æ´Ï¶ó¸é ÀÌ °ªÀ» °¡Áø´Ù. (see section ¿É¼ÇµéÀÇ ¿ä¾à(Summary of Options)).
`environment override'
variable °¡ ȯ°æ º¯¼ö·Î Á¤ÀǵǾú°í `-e' ¿É¼ÇÀÌ ÄÑÁ³´Ù¸é ÀÌ °ªÀ» °¡Áø´Ù (see section ¿É¼ÇµéÀÇ ¿ä¾à(Summary of Options)).
`file'
variableÀÌ makefile¿¡¼­ Á¤ÀÇµÈ °ÍÀ̶ó¸é ÀÌ °ªÀ» °¡Áø´Ù.
`command line'
variableÀÌ ¸í·ÉÇà¿¡¼­ Á¤ÀÇµÈ °ÍÀ̶ó¸é ÀÌ °ªÀ» °¡Áø´Ù.
`override'
variableÀÌ override Áö½Ã¾î·Î makefile¿¡¼­ Á¤ÀÇµÈ °ÍÀ̶ó¸é ÀÌ °ªÀ» °¡Áø´Ù (see section override Áö½Ã¾î).
`automatic'
variableÀÌ °¢ ±ÔÄ¢ÀÇ ¸í·ÉµéÀÇ ½ÇÇà¿¡ ´ëÇؼ­ Á¤ÀÇµÈ ÀÚµ¿ º¯¼ö¶ó¸é ÀÌ °ªÀ» °¡Áø´Ù (see section ÀÚµ¿ º¯¼öµé(Automatic Variables)).

ÀÌ Á¤º¸´Â ÁÖ·Î ¾î¶² º¯¼öÀÇ °ªÀ» ¹Ï°íÀÚ Çϴ°¡ ¾ÈÇϴ°¡¸¦ °áÁ¤ÇÒ ¶§ À¯¿ëÇÏ´Ù (È£±â¼¶À» ÃæÁ·ÇÏ´Â °Í ¸»°í). ¿¹¸¦ µé¾î¼­ ´Ù¸¥ 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.