º¯¼ö(variable)¶õ ±× º¯¼öÀÇ °ª(value)À¸·Î ¾Ë·ÁÁø
ÅؽºÆ® ¹®ÀÚ¿À» Ç¥ÇöÇϱâ À§Çؼ makefile¿¡¼ Á¤ÀÇµÈ À̸§ÀÌ´Ù. ÀÌ·±
°ªµéÀº ¸í½ÃÀûÀÎ ¿ä±¸¿¡ ÀÇÇؼ, Ÿ°ÙÀ¸·Î, Á¾¼Ó¹°·Î, ¸í·Éµé·Î, ±×¸®°í
makefileÀÇ ´Ù¸¥ ÀϺηΠ´ëÀԵȴÙ. (make
ÀÇ ´Ù¸¥ ¾î¶² ¹öÀüµé¿¡¼´Â
º¯¼öµéÀÌ ¸ÅÅ©·Î(macros)¶ó°í ºÒ¸°´Ù.)
±ÔÄ¢¾È¿¡ ÀÖ´Â ½© ¸í·ÉµéÀ» Á¦¿ÜÇÏ°í, º¯¼öµé°ú ÇÔ¼öµéÀº, `='¸¦ »ç¿ëÇÑ
º¯¼ö Á¤ÀÇÀÇ ¿À¸¥ÆíÀ» ÀÐÀ» ¶§, define
Áö½Ã¾î¸¦ »ç¿ëÇÑ º¯¼ö Á¤ÀÇÀÇ
¹ÙµðµôÀ» ÀÐÀ» ¶§, È®ÀåµÈ´Ù.
º¯¼öµéÀº ÆÄÀÏ À̸§µé ¸®½ºÆ®µé, ÄÄÆÄÀÏ·¯¿¡°Ô Àü´ÞÇÏ´Â ¿É¼Çµé, ½ÇÇàÇÒ ÇÁ·Î±×·¥µé, ¼Ò½º ÆÄÀϵéÀ» ãÀ» µð·ºÅ丮µé, °á°ú¸¦ ¾µ µð·ºÅ丮µé, ¶Ç´Â »ó»óÇÒ ¼ö ÀÖ´Â ¸ðµç °ÍÀ», Ç¥ÇöÇÒ ¼ö ÀÕ´Ù.
º¯¼ö À̸§Àº `:', `#', `=', ¶Ç´Â ½ÃÀÛÀ̳ª ³¡¿¡ °ø¹é¹®ÀÚ¸¦
´ã°í ÀÖÁö ¾Ê´Â, ¹®ÀÚµéÀÇ ÀÓÀÇÀÇ ½ÃÄö½ºÀÏ ¼ö ÀÖ´Ù. ±×·¯³ª ¾ËÆĺª, ¼ýÀÚ,
±×¸®°í ¹ØÁÙÀÌ ¾Æ´Ñ °ÍÀ» ´ã°í ÀÖ´Â º¯¼ö À̸§µéÀº ÇÇÇØ¾ß ÇÑ´Ù. ¿Ö³Ä¸é
±×µéÀÌ ¹Ì·¡¿¡ ´Ù¸¥ Ư¼öÇÑ Àǹ̸¦ °¡Áú ¼ö Àֱ⠶§¹®ÀÌ´Ù. ±×¸®°í ¾î¶²
½©¿¡¼´Â ±×µéÀÌ È¯°æÀ» ÅëÇؼ ¼ºê-make
¿¡°Ô Àü´ÞµÉ ¼ö ¾ø±â
¶§¹®ÀÌ´Ù. (see section ¼ºê-make
¿¡ ´ëÇÑ Åë½Å º¯¼ö(Communicating Variables to a Sub-make
)).
º¯¼ö À̸§µéÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÑ´Ù. `foo', `FOO', ±×¸®°í `Foo'´Â ¸ðµÎ ¼·Î ´Ù¸¥ º¯¼öµéÀÌ´Ù.
º¯¼ö À̸§µé¿¡ ´ëÇؼ ´ë¹®ÀÚ ¾ËÆĺªÀ» »ç¿ëÇÏ´Â °ÍÀÌ ÀüÅëÀûÀÌÁö¸¸ ¿ì¸®´Â makefile¾È¿¡¼ ³»ºÎÀûÀÎ ¸ñÀûÀ¸·Î »ç¿ëµÇ´Â º¯¼ö À̸§µé¿¡ ´ëÇؼ ¼Ò¹®ÀÚ ¾ËÆĺªµéÀ» »ç¿ëÇÏ°í ¹¬½ÃÀû ±ÔÄ¢µéÀ» Á¦¾îÇÏ´Â ÆĶó¹ÌÅ͵鿡 ´ëÇؼ³ª »ç¿ëÀÚ°¡ ¸í·É ¿É¼Çµé·Î ¿À¹ö¶óÀ̵å(see section º¯¼ö °ãÃľ²±â(Overriding Variables))ÇØ¾ß ÇÏ´Â ÆĶó¹ÌÅ͵鿡 ´ëÇؼ´Â ´ë¹®ÀÚ·Î ¿¹¾àÇسõ±â¸¦ ±ÇÇÏ´Â ¹ÙÀÌ´Ù.
¸î°¡Áö º¯¼öµéÀÌ ´ÜÀÏ ±¸µÎÁ¡À̳ª ´ÜÁö ¸î¹®ÀÚµé·Î ÀÌ·ç¾îÁø À̸§À» °¡Áø´Ù. ÀÌ·± °ÍµéÀº ÀÚµ¿ º¯¼öµé(automatic variables)ÀÌ°í ±×µéÀº Ưº°ÇÑ Æ¯¼ö ¿ëµµ¸¦ °¡Áø´Ù. See section ÀÚµ¿ º¯¼öµé(Automatic Variables).
º¯¼öÀÇ °ªÀ» ´ëÀÔÇϱâ À§Çؼ º¯¼öÀÇ À̸§À» °ýÈ£³ª Áß°ýÈ£·Î ¹Àº µÚ¿¡ ´Þ·¯
±âÈ£¸¦ ¾Õ¿¡ ºÙÀδÙ: `$(foo)' ¶Ç´Â `${foo}'´Â º¯¼ö
foo
¿¡ ´ëÇÑ À¯È¿ÇÑ ÂüÁ¶ÀÌ´Ù. `$'ÀÇ ÀÌ Æ¯º°ÇÑ Àǹ̶§¹®¿¡
¿ì¸®´Â
ÆÄÀÏ À̸§À̳ª ¸í·É¾È¿¡¼ ´ÜÀÏ ´Þ·¯ ±âÈ£ÀÇ È¿°ú¸¦ °¡Áö±â À§Çؼ ¹Ýµå½Ã
`$$'¸¦ ½á¾ß ÇÑ´Ù.
º¯¼ö ÂüÁ¶µéÀº ¾î¶² ¹®¸Æ Áß¿¡¼µµ »ç¿ëµÉ ¼ö ÀÖ´Ù: Ÿ°Ù, Á¾¼Ó¹°, ¸í·É, ´ëºÎºÐÀÇ Áö½Ã¾î, ±×¸®°í »õ·Î¿î º¯¼ö °ª ¾È¿¡¼. ´ÙÀ½Àº ÀϹÝÀûÀÎ °æ¿ìÀÇ ¿¹Á¦ÀÌ´Ù. ¿©±â¼ º¯¼ö´Â ¾î¶² ÇÁ·Î±×·¥ÀÇ ¸ðµç ¿ÀºêÁ§Æ® ÆÄÀϵéÀÇ À̸§µéÀ» °®°í ÀÖ´Ù:
objects = program.o foo.o utils.o program : $(objects) cc -o program $(objects) $(objects) : defs.h
º¯¼ö ÂüÁ¶µéÀº ¾ö°ÝÇÑ ÅؽºÆ® ´ëÀÔÀÌ ÀϾ´Â ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù. ±×·¡¼ ´ÙÀ½°ú °°Àº ±ÔÄ¢Àº
foo = c prog.o : prog.$(foo) $(foo)$(foo) -$(foo) prog.$(foo)
C ÇÁ·Î±×·¥ `prog.c'À» ÄÄÆÄÀÏÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Ù. º¯¼ö °ª ¾Õ¿¡
ÀÖ´Â °ø¹éµéÀº º¯¼ö ÇÒ´ç¿¡¼ ¹«½ÃµÇ±â ¶§¹®¿¡ foo
´Â Á¤È®ÇÏ°Ô
`c'ÀÌ´Ù. (¿©·¯ºÐÀÇ makefileÀ» ½ÇÁ¦·Î ÀÌ·¸°Ô ÀÛ¼ºÇÏÁö ¸¶¶ó!)
´Þ·¯ ±âÈ£, ¿±â-°ýÈ£ ¶Ç´Â ¿±â-Áß°ýÈ£°¡ ¾Æ´Ñ ÇϳªÀÇ ¹®ÀÚ ¾Õ¿¡´Ù ´Þ·¯
±âÈ£¸¦ ºÙÀ̸é ÀÌ°ÍÀº ±× ´ÜÀÏ ¹®ÀÚ¸¦ º¯¼ö À̸§À¸·Î Ãë±ÞÇÑ´Ù. ±×·¡¼
x
º¯¼ö¿¡ ´ëÇÑ ÂüÁ¶·Î½á `$x'¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÀÌ·±
°ü·Ê´Â, ÀÚµ¿ º¯¼ö(see section ÀÚµ¿ º¯¼öµé(Automatic Variables))ÀÇ °æ¿ì¸¦
Á¦¿ÜÇÏ°í´Â »ç¿ëµÇÁö ¾Êµµ·Ï °ÇÏ°Ô ±ÇÀåµÇ°í ÀÖ´Ù.
GNU make
¿¡¼ ÇÑ º¯¼ö°¡ °ªÀ» °¡Áú ¼ö ÀÖ´Â ¹æ¹ýÀº µÎ°¡ÁöÀÌ´Ù;
¿ì¸®´Â À̰͵éÀ» º¯¼öÀÇ µÎ flavorsÀ̶ó°í ºÎ¸¥´Ù. ÀÌ µÎ ÃëÇâµéÀº
±×µéÀÌ È®ÀåµÉ ¶§ ¹«¾ùÀ» Çϴ°¡¿Í ±×µéÀÌ Á¤ÀÇµÈ ¹æ¹ý¿¡ µû¶ó¼ ±¸ºÐµÈ´Ù.
ù¹ø° º¯¼ö ÃëÇâÀº recursively expanded º¯¼öÀÌ´Ù. ÀÌ·± Á¾·ùÀÇ
º¯¼öµéÀº `='(see section º¯¼ö ¼³Á¤(Setting Variables))¸¦ »ç¿ëÇÑ
¶óÀεéÀ̳ª define
Áö½Ã¾î (see section Ãà¾î º¯¼ö Á¤ÀÇ(Defining Variables Verbatim))¿¡ ÀÇÇؼ Á¤ÀǵȴÙ. ¿©·¯ºÐÀÌ ÁöÁ¤ÇÑ °ªÀº ÀÖ´Â ±×´ë·Î
¼³Ä¡µÈ´Ù; ÀÌ°ÍÀÌ ´Ù¸¥ º¯¼öµé¿¡ ´ëÇÑ ÂüÁ¶¸¦ ´ã°í ÀÖ´Ù¸é ÀÌ·± ÂüÁ¶µéÀº ±×
º¯¼ö°¡ ´ëÀ﵃ ¶§¸¶´Ù È®ÀåµÈ´Ù(¾î¶² ´Ù¸¥ ¹®ÀÚ¿À» È®ÀåÇÏ´Â ÄÚ½º¿¡¼).
ÀÌ°ÍÀÌ ÀϾ ¶§ ÀÌ°ÍÀº recursive expansion¶ó°í ºÒ¸°´Ù.
¿¹¸¦ µé¾î¼,
foo = $(bar) bar = $(ugh) ugh = Huh? all:;echo $(foo)
ÀÌ°ÍÀº `Huh?'¸¦ ¿¡ÄÚÇÑ´Ù: `$(foo)'´Â `$(bar)'·Î È®ÀåµÈ´Ù. ±×¸®°í ÀÌ°ÍÀº `$(ugh)'·Î È®ÀåµÈ´Ù. ±×¸®°í ÀÌ°ÍÀº ¸¶Áö¸·À¸·Î `Huh?'·Î È®ÀåµÈ´Ù.
ÀÌ·± º¯¼öÀÇ ÃëÇâÀº ´Ù¸¥ make
¹öÀüµé¿¡ ÀÇÇؼ Áö¿øµÇ´Â À¯ÀÏÇÑ
Á¾·ùÀÌ´Ù. ÀÌ°ÍÀº ÀåÁ¡µµ ÀÖ°í ´ÜÁ¡µµ ÀÖ´Ù. ÀåÁ¡Àº(´ëºÎºÐÀÇ »ç¶÷µéÀÌ
¸»ÇϵíÀÌ) ´ÙÀ½°ú °°´Ù:
CFLAGS = $(include_dirs) -O include_dirs = -Ifoo -Ibar
ÀÌ°ÍÀº ¿ø·¡ ÀǵµµÈ ´ë·Î ¼öÇàÇÒ °ÍÀÌ´Ù: `CFLAGS'°¡ ¸í·É¾È¿¡¼ È®ÀåµÉ ¶§, ÀÌ°ÍÀº `-Ifoo -Ibar -O'·Î È®ÀåµÉ °ÍÀÌ´Ù. °¡Àå Å« ´ÜÁ¡Àº º¯¼öÀÇ ¸¶Áö¸·¿¡´Ù ¹«¾ð°¡¸¦ µ¡ºÙÀÏ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ
CFLAGS = $(CFLAGS) -O
ÀÌ°ÍÀº º¯¼ö È®ÀåÀÇ ¹«ÇÑ ·çÇÁ¸¦ ¹ß»ýÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. (½ÇÁ¦·Î
make
´Â ¹«ÇÑ ·çÇÁ¸¦ °ËÃâÇÏ°í¼ ¿¡·¯¸¦ º¸°íÇÑ´Ù.)
´Ù¸¥ ´ÜÁ¡Àº Á¤ÀǾȿ¡¼ ÂüÁ¶µÈ ÀÓÀÇÀÇ ÇÔ¼ö(see section ÅؽºÆ® º¯È¯À» À§ÇÑ ÇÔ¼ö(Functions for Transforming Text))°¡ º¯¼ö°¡ È®ÀåµÉ ¶§¸¶´Ù ½ÇÇàµÉ °ÍÀ̶ó´Â
°ÍÀÌ´Ù. ÀÌ°ÍÀº make
°¡ ´õ ´À¸®°Ô ½ÇÇàÇϵµ·Ï ¸¸µç´Ù; ´õ ³ª»Û °ÍÀº
ÀÌ°ÍÀº wildcard
¿Í shell
ÇÔ¼öµéÀÌ, ±×µéÀÌ È£ÃâµÉ ¶§ ½±°Ô
Á¦¾îÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ¶Ç´Â ¾ó¸¶³ª ¸¹ÀÌ È£ÃâµÉ °ÍÀΰ¡¸¦ Á¦¾îÇÒ ¼ö ¾ø±â
¶§¹®¿¡ ¿¹ÃøÇÒ ¼ö ¾ø´Â °á°ú¸¦ ¸¸µé¾î ³½´Ù.
Àç±ÍÀûÀ¸·Î È®ÀåµÇ´Â º¯¼öµéÀÇ ÀÌ·± ¸ðµç ¹®Á¦Á¡µé°ú ºÒÆíÇÔÀ» ÇÇÇϱâ À§Çؼ ´Ù¸¥ ÃëÇâÀÌ ÀÖ´Ù: ´Ü¼øÇÏ°Ô È®ÀåµÇ´Â º¯¼öµé(simply expanded variables).
Simply expanded variables ´Â `:=' (see section º¯¼ö ¼³Á¤(Setting Variables))¸¦ »ç¿ëÇؼ Á¤ÀǵȴÙ. ´Ü¼øÇÏ°Ô È®ÀåµÇ´Â º¯¼öÀÇ °ªÀº º¯¼ö°¡ Á¤ÀÇµÉ ¶§ ´Ù¸¥ º¯¼öµé°ú ÇÔ¼öµé¿¡ ´ëÇÑ ÂüÁ¶¸¦ È®ÀåÇÏ¸é¼ ´Ü Çѹø¸¸ ½ºÄµµÈ´Ù. ´Ü¼øÇÏ°Ô È®ÀåµÇ´Â º¯¼öÀÇ ½ÇÁ¦ °ªÀº ¿©·¯ºÐÀÌ ÀÛ¼ºÇÑ ÅؽºÆ®¸¦ È®ÀåÇÑ °á°úÀÌ´Ù. ÀÌ°ÍÀº ´Ù¸¥ º¯¼ö¿¡ ´ëÇÑ ¾î¶² ÂüÁ¶µµ ´ã°í ÀÖÁö ¾Ê´Ù; ÀÌ°ÍÀº ±×µéÀ» °ªÀ» ÀÌ º¯¼ö°¡ Á¤ÀǵǾú´ø ¶§ÀÇ °Í°ú °°Àº °ÍÀ¸·Î °®´Â´Ù. ±×·¡¼
x := foo y := $(x) bar x := later
´Â ´ÙÀ½°ú °°´Ù
y := foo bar x := later
´Ü¼øÇÏ°Ô È®ÀåµÈ º¯¼ö°¡ ÂüÁ¶µÉ ¶§ ±×°ÍÀÇ °ªÀº ÀÖ´Â ±×´ë·Î ´ëÀԵȴÙ.
´ÙÀ½Àº Á» ´õ º¹ÀâÇÑ ¿¹Á¦Àε¥, shell
ÇÔ¼ö(See section shell
ÇÔ¼ö(The shell
Function).)¿Í `:='¸¦ °áÇÕÇؼ
»ç¿ëÇÏ´Â °ÍÀ» ¿¹½ÃÇÑ °ÍÀÌ´Ù. ÀÌ ¿¹Á¦´Â ¶ÇÇÑ º¯¼ö MAKELEVEL
¿¡ ´ëÇÑ
»ç¿ëÀ» º¸¿©ÁØ´Ù. ÀÌ º¯¼ö´Â ÀÌ°ÍÀÌ ÇÑ ·¹º§¿¡¼ ´Ù¸¥ ·¹º§·Î Áö³ª°¥ ¶§
º¯ÇÏ´Â °ÍÀÌ´Ù. (MAKELEVEL
¿¡ ´ëÇÑ Á¤º¸¿¡ ´ëÇؼ´Â
See section ¼ºê-make
¿¡ ´ëÇÑ Åë½Å º¯¼ö(Communicating Variables to a Sub-make
).)
ifeq (0,${MAKELEVEL}) cur-dir := $(shell pwd) whoami := $(shell whoami) host-type := $(shell arch) MAKE := ${MAKE} host-type=${host-type} whoami=${whoami} endif
`:='ÀÇ ÀÌ·± »ç¿ëÀÇ ÀåÁ¡Àº ÀüÇüÀûÀÎ `µð·ºÅ丮 ¾ÈÀ¸·Î µé¾î°¡´Â' ¸í·ÉÀÌ ´ÙÀ½°ú °°ÀÌ º¸ÀÏ ¶§ÀÌ´Ù:
${subdirs}: ${MAKE} cur-dir=${cur-dir}/$@ -C $@ all
´Ü¼ø È®Àå º¯¼öµéÀº ÀϹÝÀûÀ¸·Î º¹ÀâÇÑ makefile ÇÁ·Î±×·¡¹ÖÀ» Á» ´õ ¿¹Ãø°¡´ÉÇϵµ·Ï ¸¸µç´Ù. ¿Ö³Ä¸é À̵éÀº ´ëºÎºÐÀÇ ÇÁ·Î±×·¡¹Ö ¾ð¾î¿¡¼ÀÇ º¯¼öµéó·³ ÀÛµ¿Çϱ⠶§¹®ÀÌ´Ù. ±×µéÀº ¾î¶² º¯¼ö¸¦ ÀÚ½ÅÀÇ °ª(¶Ç´Â È®Àå ÇÔ¼öµé ÁßÀÇ Çϳª¿¡ ÀÇÇؼ ¾î¶² ¹æ½ÄÀ¸·Î ó¸®µÈ ÀÌ°ÍÀÇ °ª)À» »ç¿ëÇÏ¿© ÀçÁ¤ÀÇÇÒ ¼ö ÀÖµµ·Ï Çϸç È®Àå ÇÔ¼öµéÀ» Á» ´õ È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù (see section ÅؽºÆ® º¯È¯À» À§ÇÑ ÇÔ¼ö(Functions for Transforming Text)).
¶ÇÇÑ À̵éÀ» »ç¿ëÇؼ Á¦¾îµÈ ¼±µÎ °ø¹é¹®ÀÚ(controlled leading whitespace)¸¦ º¯¼ö °ªµé·Î ä¿ëÇÒ ¼ö ÀÖ´Ù. ¼±µÎ °ø¹é¹®ÀÚµéÀº ÀԷ¿¡¼, º¯¼ö ÂüÁ¶¿Í ÇÔ¼ö È£ÃâµéÀÇ ´ëÀÔÀÌ ÀÖ±â ÀÌÀü¿¡, Á¦°ÅµÈ´Ù; ÀÌ°ÍÀº ¼±µÎ °ø¹é¹®ÀÚµéÀ» ´ÙÀ½°ú °°ÀÌ º¯¼ö ÂüÁ¶·Î ¸·À½À¸·Î½á º¯¼ö °ª¾È¿¡ ¼±µÎ °ø¹é¹®ÀÚµéÀ» ³ÖÀ»¼ö ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù:
nullstring := space := $(nullstring) # end of the line
¿©±â¼ º¯¼ö space
ÀÇ °ªÀº Á¤È®È÷ ÇϳªÀÇ ½ºÆäÀ̽ºÀÌ´Ù. `#
end of the line' ÁÖ¼®Àº ¿©±â¿¡¼ ¸íÈ®¼ºÀ» À§Çؼ µé¾î°¡ ÀÖ´Â °ÍÀÌ´Ù.
µÚ¿¡ ÀÖ´Â °ø¹é¹®ÀÚµéÀÌ º¯¼ö °ªµé·ÎºÎÅÍ Á¦°ÅµÇÁö ¾Ê±â ¶§¹®¿¡
¶óÀÎÀÇ ¸¶Áö¸·¿¡ ÀÖ´Â ÇϳªÀÇ ½ºÆäÀ̽º°¡ µ¿ÀÏÇÑ È¿°ú¸¦ °¡Áú °ÍÀÌ´Ù(±×·¯³ª
Á» ´õ ÀбⰡ Èûµé´Ù). °ø¹é ¹®ÀÚ¸¦ º¯¼ö °ªÀÇ ¸¶Áö¸·¿¡´Ù ³Ö´Â´Ù¸é ¶óÀÎÀÇ
¸¶Áö¸·¿¡¼ Àú°Í°ú °°ÀÌ ÁÖ¼®À» ³Ö´Â °ÍÀÌ, ¿©·¯ºÐÀÇ Àǵµ¸¦ ¸íÈ®ÇÏ°Ô Çϱâ
À§Çؼ, ÁÁÀº »ý°¢ÀÌ´Ù. ¿ªÀ¸·Î º¯¼ö °ªÀÇ ¸¶Áö¸·¿¡´Ù ÀÓÀÇÀÇ °ø¹é ¹®ÀÚµéÀ»
³Ö°íÀÚ ÇÏÁö ¾Ê´Â´Ù¸é, ´ÙÀ½°ú °°ÀÌ ¶óÀÎÀÇ ¸¶Áö¸·¿¡´Ù ¸î°³ÀÇ °ø¹é
¹®ÀÚ µÚ¿¡ ¾Æ¹«µ¥³ª ÁÖ¼®À» ³ÖÁö ¾Êµµ·Ï ¹Ýµå½Ã ±â¾ïÇÏÀÚ:
dir := /foo/bar # directory to put the frobs in
¿©±â¿¡¼ dir
º¯¼öÀÇ °ªÀº `/foo/bar 'ÀÌ´Ù(³×°³ÀÇ µÚ¿¡
ºÙÀº ½ºÆäÀ̽ºµé°ú ÇÔ²²). ÀÌ°ÍÀº ¾Æ¸¶µµ ÀǵµÇÑ ¹Ù°¡ ¾Æ´Ò °ÍÀÌ´Ù.
(ÀÌ Á¤ÀÇÇÏ¿¡¼ `$(dir)/file'°ú °°Àº °ÍÀ» »ó»óÇغ¸¶ó!)
º¯¼öµé¿¡ ´ëÇÑ ´Ù¸¥ ÇÒ´ç ¿¬»êÀÚ `?='°¡ ÀÖ´Ù. ÀÌ°ÍÀº Á¶°Ç º¯¼ö ÇÒ´ç ¿¬»êÀÚ(conditional variable assignment operator)¶ó°í ºÒ¸°´Ù. ¿Ö³Ä¸é ÀÌ°ÍÀº ±× º¯¼ö°¡ ¾ÆÁ÷ Á¤ÀǵÇÁö ¾Ê¾ÒÀ» °æ¿ì¿¡¸¸ È¿·ÂÀ» °¡Áö±â ¶§¹®ÀÌ´Ù. ´ÙÀ½ ¹®ÀåÀº:
FOO ?= bar
´ÙÀ½°ú Á¤È®ÇÏ°Ô µ¿ÀÏÇÏ´Ù
(see section origin
ÇÔ¼ö(The origin
Function)):
ifeq ($(origin FOO), undefined) FOO = bar endif
ºó °ªÀ¸·Î ¼³Á¤µÈ º¯¼öµµ ¿©ÀüÈ÷ Á¤ÀÇµÈ °ÍÀ̱⠶§¹®¿¡, `?='´Â ±× º¯¼ö¸¦ ¼³Á¤ÇÏÁö ¾Ê´Â´Ù´Â °Í¿¡ ÁÖÀÇÇÏÀÚ.
ÀÌ ¼½¼ÇÀº Á» ´õ À¯¿¬ÇÑ ¹æ½ÄÀ¸·Î º¯¼öµéÀ» ÂüÁ¶ÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â °í±Þ ±â´ÉµéÀ» ¸î°¡Áö ¼³¸íÇÑ´Ù.
substitution reference(´ëÀÔ ÂüÁ¶)´Â ÇÑ º¯¼öÀÇ °ªÀ» ÁöÁ¤ÇÏ´Â ´Ù¸¥ ´ëü°ªÀ¸·Î ´ëÀÔÇÑ´Ù. ÀÌ°ÍÀº `$(var:a=b)' (¶Ç´Â `${var:a=b}') Çü½ÄÀ̸ç ÀÌ°ÍÀÇ Àǹ̴Â, º¯¼ö varÀÇ °ªÀ» ÃëÇؼ ÇÑ ´Ü¾îÀÇ µÚ¿¡ ÀÖ´Â °¢ a¸¦ ±× °ª¾È¿¡ ÀÖ´Â b·Î ±³Ã¼ÇÏ°í °á°ú ¹®ÀÚ¿À» ´ëÀÔÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
¿ì¸®°¡ "ÇÑ ´Ü¾îÀÇ µÚ¿¡ ÀÖ´Â"À̶ó°í ¸»ÇÒ ¶§, ¿ì¸®´Â a°¡ ´ëüµÇ±â À§Çؼ´Â, ÀÌ°ÍÀÌ °ø¹é¹®ÀÚ°¡ µÚ¿¡ ÀÖµµ·Ï ¶Ç´Â ±× °ªÀÇ ¸¶Áö¸·¿¡ ÀÖµµ·Ï ³ªÅ¸³ª¾ß ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÑ °ÍÀ̵ð¤¿; ±× °ª¾È¿¡¼ ´Ù¸¥ À§Ä¡¿¡ ÀÖ´Â a´Â º¯°æµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¿¹¸¦ µé¾î¼:
foo := a.o b.o c.o bar := $(foo:.o=.c)
ÀÌ°ÍÀº `bar'¸¦ `a.c b.c c.c'·Î ¼³Á¤ÇÑ´Ù. See section º¯¼ö ¼³Á¤(Setting Variables).
´ëÀÔ ÂüÁ¶´Â ½ÇÁ¦·Î patsubst
È®Àå ÇÔ¼ö (see section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis))ÀÇ »ç¿ëÀÇ
Ãà¼ÒÆÇÀÌ´Ù. ¿ì¸®´Â ´ëÀÔ ÂüÁ¶¸¦, ´Ù¸¥ make
±¸Çö¹°°úÀÇ È£È¯¼ºÀ»
À§Çؼ, patsubst
°ú ÇÔ²² Á¦°øÇÑ´Ù.
´ëÀÔ ÂüÁ¶ÀÇ ´Ù¸¥ ŸÀÔÀº patsubst
ÀÇ Ç® ÆÄ¿ö¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï
ÇÑ´Ù. ÀÌ°ÍÀº À§¿¡¼ ±â¼úµÈ `$(var:a=b)'°ú µ¿ÀÏÇÑ
Çü½ÄÀ» °¡Áø´Ù. ´Ù¸¸ ÀÌÁ¦´Â a°¡ ¹Ýµå½Ã ´ÜÀÏ `%'¸¦ ¹Ýµå½Ã
´ã¾Æ¾ß ÇÑ´Ù´Â Á¡À» Á¦¿ÜÇÏ°í ¸»ÀÌ´Ù. ÀÌ·± °æ¿ì´Â `$(patsubst
a,b,$(var))'¿Í µ¿ÀÏÇÏ´Ù. patsubst
ÇÔ¼ö ¼³¸íÀº
See section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis).
For example: foo := a.o b.o c.o bar := $(foo:%.o=%.c)
ÀÌ°ÍÀº `bar'¸¦ `a.c b.c c.c'·Î ¼³Á¤ÇÑ´Ù.
°è»êµÈ º¯¼ö À̸§µéÀº Á¤±³ÇÑ makefile ÇÁ·Î±×·¡¹Ö¿¡¼³ª ÇÊ¿äÇÑ º¹ÀâÇÑ °³³äÀÌ´Ù. ´ëºÎºÐÀÇ ¸ñÀûÀÇ °æ¿ì À̰͵éÀ» »ý°¢ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´Ü º¯¼öÀÇ À̸§¾È¿¡ ´Þ·¯ ±âÈ£¸¦ ³Ö´Â °ÍÀº ½É°¢ÇÑ °á°ú¸¦ ¸¸µé¾î³¾ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Æ´Â °ÍÀ» Á¦¿ÜÇÏ°í ¸»ÀÌ´Ù. ±×·¯³ª ¿©·¯ºÐÀÌ ¸ðµç °ÍÀ» ÀÌÇØÇϱ⸦ ¿øÇϴ ŸÀÔÀÇ »ç¶÷À̶ó¸é ¶Ç´Â ½ÇÁ¦·Î ±×µéÀÌ ¹«¾ùÀ» ÇÏ´ÂÁö ÀÌÇØÇÏ°íÀÚ ÇÑ´Ù¸é °è¼Ó Àб⠹ٶõ´Ù.
º¯¼öµéÀº ÇϳªÀÇ º¯¼ö À̸§¾È¿¡¼ ÂüÁ¶µÉ ¼ö ÀÖ´Ù. ÀÌ·± °ÍÀ» ¿ì¸®´Â °è»êµÈ º¯¼ö À̸§(computed variable name) ¶Ç´Â Æ÷°³Áø º¯¼ö ÂüÁ¶(nested variable reference)¶ó°í ºÎ¸¥´Ù. ¿¹¸¦ µé¾î¼,
x = y y = z a := $($(x))
ÀÌ°ÍÀº a
¸¦ `z'·Î Á¤ÀÇÇÑ´Ù: `$($(x))'¾È¿¡ ÀÖ´Â
`$(x)'´Â `y'·Î È®ÀåµÇ±â ¶§¹®¿¡ `$($(x))'´Â `$(y)'·Î
È®ÀåµÇ°í ÀÌ°ÍÀº ´Ù½Ã `z'·Î È®ÀåµÈ´Ù. ¿©±â¼ ÂüÁ¶ÇÏ´Â º¯¼öÀÇ À̸§Àº
¸í½ÃÀûÀ¸·Î ¾ð±ÞµÇÁö ¾Ê¾Ò´Ù; ÀÌ°ÍÀº `$(x)'ÀÇ È®Àå¿¡ ÀÇÇؼ
°è»êµÇ¾ú´Ù. `$(x)' ÂüÁ¶´Â ¹Ù±ù º¯¼ö ÂüÁ¶¿¡ ¾È¿¡ Æ÷°³Á® ÀÖ´Ù.
ÀÌÀü ¿¹Á¦´Â µÎ ·¹º§ÀÇ Æ÷°·À» º¸¿©ÁØ °ÍÀÌÁö¸¸ ÀÓÀÇÀÇ ·¹º§µµ °¡´ÉÇÏ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½Àº ¼¼´Ü°è ·¹º§ÀÌ´Ù:
x = y y = z z = u a := $($($(x)))
¿©±â¼ °¡Àå ¾ÈÂÊ¿¡ ÀÖ´Â `$(x)'´Â `y'·Î È®ÀåµÇ°í ±×·¡¼ `$($(x))'´Â `$(y)'·Î È®ÀåµÇ¸ç ÀÌ°ÍÀº ´Ù½Ã `z'·Î È®ÀåµÈ´Ù; ÀÌÁ¦ ¿ì¸®´Â `$(z)'¸¦ °¡Áø´Ù. ÀÌ°ÍÀº `u'ÀÌ µÈ´Ù.
ÇϳªÀÇ º¯¼ö À̸§ ¾È¿¡¼ Àç±ÍÀûÀ¸·Î-È®ÀåµÇ´Â º¯¼öµé¿¡ ´ëÇÑ ÂüÁ¶´Â ÀϹÝÀûÀÎ ½ºÅ¸ÀÏ·Î ´Ù½Ã È®ÀåµÈ´Ù. ¿¹¸¦ µé¾î¼:
x = $(y) y = z z = Hello a := $($(x))
ÀÌ°ÍÀº a
¸¦ `Hello'·Î Á¤ÀÇÇÑ´Ù: `$($(x))'´Â
`$($(y))'ÀÌ µÇ°í ÀÌ°ÍÀº `$(z)'ÀÌ µÇ¸ç ÀÌ°ÍÀº ´Ù½Ã
`Hello'°¡ µÈ´Ù.
Æ÷°³Áø º¯¼ö ÂüÁ¶µéÀº ´Ù¸¥ ÂüÁ¶µé°ú ¸¶Âù°¡Áö·Î
º¯°æµÈ ÂüÁ¶µé°ú ÇÔ¼ö È£Ãâµé (see section ÅؽºÆ® º¯È¯À» À§ÇÑ ÇÔ¼ö(Functions for Transforming Text))À» °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼
subst
ÇÔ¼ö (see section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis))¸¦ »ç¿ëÇÏ´Â ´ÙÀ½ ¿¹Á¦´Â:
x = variable1 variable2 := Hello y = $(subst 1,2,$(x)) z = y a := $($($(z)))
°á±¹ a
¸¦ `Hello'·Î Á¤ÀÇÇÑ´Ù. ÀÌ°Í°ú °°ÀÌ
µÑµÑ ²¿ÀÎ Æ÷°³Áø ÂüÁ¶¸¦ ¾²°íÀÚ ÇÏ´Â »ç¶÷ÀÌ ÀÖÀ»·±Áö Àǽɽº·´Áö¸¸ ÀÌ°ÍÀº
Àß ÀÛµ¿ÇÏ´Â °ÍÀÌ´Ù: `$($($(z)))'´Â `$($(y))'·Î È®ÀåµÈ´Ù.
±×¸®°í ÀÌ°ÍÀº ´Ù½Ã `$($(subst 1,2,$(x)))'ÀÌ µÈ´Ù. ÀÌ°ÍÀº
x
·ÎºÎÅÍ `variable1' °ªÀ» ¾ò¾î¼ `variable2'·Î ´ëÀÔÇؼ
ÀÌ°ÍÀ» º¯°æÇÑ´Ù. ±×·¡¼ Àüü ¹®ÀÚ¿Àº `$(variable2)'ÀÌ µÈ´Ù. ±×¸®°í
ÀÌ°ÍÀº ±×°ÍÀÇ °ªÀÌ `Hello'ÀÎ ´Ü¼ø º¼ö ÂüÁ¶ÀÌ´Ù.
°è»êµÈ º¯¼ö À̸§Àº ´ÜÀÏ º¯¼ö ÂüÁ¶·Î ¿ÏÀüÈ÷ ÀÌ·ç¾îÁú ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ°ÍÀº ¸î°³ÀÇ º¯¼ö ÂüÁ¶µéÀ», ¸î°¡Áö ºÒº¯ ÅؽºÆ®¿Í ÇÔ²², °¡Áú ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î¼, ´ÙÀ½Àº
a_dirs := dira dirb 1_dirs := dir1 dir2 a_files := filea fileb 1_files := file1 file2 ifeq "$(use_a)" "yes" a1 := a else a1 := 1 endif ifeq "$(use_dirs)" "yes" df := dirs else df := files endif dirs := $($(a1)_$(df))
dirs
¿¡°Ô use_a
¿Í use_dirs
ÀÇ ¼³Á¤¿¡ Á¾¼ÓÀûÀ¸·Î,
a_dirs
, 1_dirs
, ¶Ç´Â 1_files
¿Í µ¿ÀÏÇÑ °ªÀ» ÁÙ
°ÍÀÌ´Ù.
°è»êµÈ º¯¼ö À̸§µéÀº ¶ÇÇÑ ´ëÀÔ ÂüÁ¶¿¡¼ ´ÙÀ½°ú °°ÀÌ »ç¿ëµÉ ¼ö ÀÖ´Ù:
a_objects := a.o b.o c.o 1_objects := 1.o 2.o 3.o sources := $($(a1)_objects:.o=.c)
ÀÌ°ÍÀº sources
¸¦, a1
ÀÇ °ª¿¡ µû¶ó¼,
`a.c b.c c.c'³ª `1.c 2.c 3.c'·Î Á¤ÀÇÇÑ´Ù.
Æ÷°³Áø º¯¼ö ÂüÁ¶µéÀÇ ÀÌ·± Á¾·ùÀÇ »ç¿ë¿¡ ´ëÇÑ À¯ÀÏÇÑ Á¦ÇÑÀº ±×µéÀÌ È£ÃâµÈ ÇÔ¼öÀÇ À̸§ÀÇ ÀϺθ¦ ÁöÁ¤ÇÒ ¼ö ¾ø´Ù´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº ÀÎ½ÄµÈ ÇÔ¼ö À̸§¿¡ ´ëÇÑ Å×½ºÆ®°¡ Æ÷°³Áø ÂüÁ¶µéÀÇ È®Àå ÀÌÀü¿¡ ÀÌ·ç¾îÁö±â ¶§¹®ÀÌ´Ù. ¿¹¸¦ µé¾î¼,
ifdef do_sort func := sort else func := strip endif bar := a d b g q c foo := $($(func) $(bar))
ÀÌ°ÍÀº sort
³ª strip
ÇÔ¼ö¿¡°Ô ¸Å°³º¯¼ö·Î½á `a d b g q
c'¸¦ ÁÖÁö ¾Ê°í, `foo'¿¡°Ô º¯¼ö `sort a d b g
q c'³ª `strip a d b g q c' ÀÇ °ªÀ» ÁØ´Ù. ÀÌ·± Á¦ÇÑÀº,
±×·± º¯È°¡ ÁÁÀº ¾ÆÀ̵ð¾î¶ó°í º¸¿©Áú °æ¿ì Á¦°ÅµÉ ¼öµµ ÀÖ´Ù.
º¯¼ö ÇÒ´çÀÇ ¿ÞÂÊÆí¿¡¼, ¶Ç´Â define
Áö½Ã¾î ¾È¿¡¼ ´ÙÀ½°ú °°ÀÌ
°è»êµÈ º¯¼ö À̸§µéÀ» »ç¿ëÇÒ¼öµµ ÀÖ´Ù:
dir = foo $(dir)_sources := $(wildcard $(dir)/*.c) define $(dir)_print lpr $($(dir)_sources) endef
ÀÌ ¿¹Á¦´Â º¯¼ö `dir', `foo_sources', ±×¸®°í `foo_print'¸¦ Á¤ÀÇÇÑ´Ù.
Æ÷°³Áø º¯¼ö ÂüÁ¶(nested variable references)´Â Àç±ÍÀûÀ¸·Î È®ÀåµÈ º¯¼ö(recursively expanded variables) (see section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables)) ¿Í, ºñ·Î ÀÌµé ¸ðµÎ makefile ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ ¾ÆÁÖ º¹ÀâÇÑ ¹æ½ÄÀ¸·Î »ç¿ëµÇÁö¸¸, ¸¹ÀÌ ´Ù¸£´Ù´Â °ÍÀ» ÁÖ¸ñÇÏÀÚ.
º¯¼öµéÀº ´ÙÀ½°ú °°Àº ¸î°¡Áö ¹æ¹ýÀ¸·Î °ªµéÀ» ¾òÀ» ¼ö ÀÕ´Ù:
make
¸¦ ½ÇÇàÇÒ ¶§ °ªÀ» ÁöÁ¤Çϰųª ¿À¹ö¶óÀ̵åÇÒ ¼ö ÀÖ´Ù.
See section º¯¼ö °ãÃľ²±â(Overriding Variables).
make
º¯¼öµéÀÌ µÈ´Ù.
See section ȯ°æÀ¸·ÎºÎÅÍÀÇ º¯¼öµé(Variables from the Environment).
makefile·ÎºÎÅÍ º¯¼ö¸¦ ¼³Á¤Çϱâ À§Çؼ´Â `='³ª `:='°¡ µÚ¿¡ ºÙÀº º¯¼ö À̸§À¸·Î ½ÃÀÛÇÏ´Â ¶óÀÎÀ» ÀÛ¼ºÇÑ´Ù. ±× ¶óÀο¡¼ `='³ª `:=' µÚ¿¡ ¿À´Â °ÍÀº ¹«¾ùÀÌµç °ª(value)ÀÌ µÈ´Ù. ¿¹¸¦ µé¾î¼ ´ÙÀ½Àº,
objects = main.o foo.o bar.o utils.o
objects
¶ó´Â À̸§ÀÇ º¯¼ö¸¦ Á¤ÀÇÇÑ´Ù. º¯¼öÀÇ ÁÖº¯¿¡ ÀÖ´Â
°ø¹é¹®ÀÚµé, `=' µÚ¿¡ ÀÖ´Â °ø¹é¹®ÀÚµéÀº ¹«½ÃµÈ´Ù.
`='·Î Á¤ÀÇµÈ º¯¼öµéÀº Àç±ÍÀûÀ¸·Î È®ÀåµÈ(recursively expanded) º¯¼öµéÀÌ´Ù. `:='·Î Á¤ÀÇµÈ º¯¼öµéÀº ´Ü¼øÇÏ°Ô È®ÀåµÈ(simply expanded) º¯¼öµåÀÌ´Ù; À̵é Á¤ÀǵéÀº ÀÌ Á¤ÀÇ°¡ ¸¸µé¾îÁö±â ÀÌÀü¿¡ È®ÀåµÇ¾úÀ» º¯¼ö ÂüÁ¶µéÀ» ´ãÀ» ¼öÀÖ´Ù. See section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables).
º¯¼ö À̸§Àº ÇÔ¼ö¿Í º¯¼ö ÂüÁ¶µéÀ» °¡Áú ¼ö ÀÖ´Ù. À̵éÀº ±× ¶óÀÎÀÌ »ç¿ëÇÒ ½ÇÁ¦ º¯¼ö À̸§À» ã±â À§Çؼ ÀÐÇôÁú ¶§ È®ÀåµÈ´Ù.
ÇÑ º¯¼öÀÇ °ªÀÇ ±æÀÌ´Â Á¦ÇÑÀÌ ¾ø´Ù. ´Ü ÄÄÇ»ÅÍÀÇ ½º¿ÍÇÎ °ø°£ÀÇ Å©±â¿¡
Á¾¼ÓÀûÀÌ´Ù. ¾î¶² º¯¼ö Á¤ÀÇ°¡ ±æ¸é ±×°ÍÀ» ¸î°³ÀÇ ¶óÀεé·Î ³ª´©°í ¿øÇÏ´Â
À§Ä¡¿¡ ¿ª½½·¡½¬-°³Ç๮ÀÚ¸¦ ³Ö¾î¼ ÂÉ°³´Â °Íµµ ÁÁÀº »ý°¢ÀÌ´Ù. ÀÌ°ÍÀº
make
ÀÇ ±â´É¿¡ ¿µÇâÀ» ¹ÌÄ¡Áö ¾Ê°í makefileÀÌ Á» ´õ ÀÐÈ÷±â ½±µµ·Ï
¸¸µé °ÍÀÌ´Ù.
´ëºÎºÐÀÇ º¯¼ö À̸§µéÀº ±×°ÍÀ» ÀüÇô ¼³Á¤ÇÏÁö ¾ÊÀ¸¸é, °ªÀ¸·Î½á ºó ¹®ÀÚ¿À» °¡Áö´Â °ÍÀ¸·Î »ý°¢µÈ´Ù. ¸î°¡Áö º¯¼öµéÀÌ ºó °ÍÀÌ ¾Æ´Ñ ³»Àå Ãʱ⠰ªµéÀ» °¡ÁöÁö¸¸ ¿©·¯ºÐÀº ±×°ÍµéÀ» ÀϹÝÀûÀÎ ¹æ½ÄÀ¸·Î ¼³Á¤ÇÒ ¼ö ÀÖ´Ù (see section ¹¬½ÃÀû ±ÔÄ¢¿¡ ÀÇÇØ »ç¿ëµÇ´Â º¯¼ö(Variables Used by Implicit Rules)). ¸î°¡Áö Ư¼ö º¯¼öµéÀÌ °¢ ±ÔÄ¢¿¡ ´ëÇؼ »õ·Î¿î °ªÀ¸·Î ¼³Á¤µÈ´Ù; ÀÌ·± °ÍµéÀº ÀÚµ¿(automatic) º¯¼ö¶ó°í ÇÑ´Ù (see section ÀÚµ¿ º¯¼öµé(Automatic Variables)).
¾î¶² º¯¼ö°¡ ±×°ÍÀÌ ¾Õ¼ ¼³Á¤µÇÁö ¾Ê¾ÒÀ» °æ¿ì¿¡¸¸ ¾î¶² °ªÀ¸·Î ¼³Á¤µÇ±â¸¦
¿øÇÑ´Ù¸é `=' ´ë½Å¿¡ ´ÜÃà ¿¬»êÀÚ `?='¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½
`FOO' º¯¼öÀÇ µÎ°¡Áö ¼³Á¤µéÀº µ¿ÀÏÇÏ´Ù (see section origin
ÇÔ¼ö(The origin
Function)):
FOO ?= bar
±×¸®°í
ifeq ($(origin FOO), undefined) FOO = bar endif
ÀÌ¹Ì Á¤ÀÇµÈ º¯¼öÀÇ °ª¿¡´Ù ÅؽºÆ®¸¦ Ãß°¡ÇÏ´Â °ÍÀº Á¾Á¾ À¯¿ëÇÏ´Ù. ¿©·¯ºÐÀº ÀÌ°ÍÀ» ´ÙÀ½°ú °°ÀÌ `+='ÀÌ ´ã°ÜÁø ¶óÀÎÀ¸·Î ÇÑ´Ù:
objects += another.o
ÀÌ°ÍÀº objects
º¯¼öÀÇ °ªÀ» ÃëÇؼ ÅؽºÆ® `another.o'¸¦
±×°Í¿¡ ´õÇÑ´Ù(¾Õ¿¡´Ù ÇϳªÀÇ °ø¹éÀ» ºÙÀδÙ). ±×·¡¼:
objects = main.o foo.o bar.o utils.o objects += another.o
ÀÌ°ÍÀº objects
¸¦ `main.o foo.o bar.o utils.o another.o'·Î
¼³Á¤ÇÑ´Ù.
`+='¸¦ »ç¿ëÇÏ´Â °ÍÀº ´ÙÀ½°ú ºñ½ÁÇÏ´Ù:
objects = main.o foo.o bar.o utils.o objects := $(objects) another.o
±×·¯³ª ¿©·¯ºÐÀÌ Á» ´õ º¹ÀâÇÑ °ªµéÀ» »ç¿ëÇÒ ¶§ Áß¿äÇØÁö´Â, ¹æ¹ý»ó¿¡¼ Â÷ÀÌ°¡ ³´Ù.
¹®Á¦ÀÇ º¯¼ö°¡ ÀÌÀü¿¡ Á¤ÀÇµÈ °ÍÀÌ ¾Æ´Ï¶ó¸é `+='´Â `='ÀÎ °Íó·³ ÀÛµ¿ÇÑ´Ù: ÀÌ°ÍÀº Àç±ÍÀûÀ¸·Î-È®ÀåµÈ º¯¼ö¸¦ Á¤ÀÇÇÑ´Ù. ±×·¯³ª ÀÌÀüÀÇ Á¤ÀÇ°¡ ÀÖ´Ù¸é, `+='°¡ ÇÏ´Â Á¤È®ÇÑ ÀÏÀº ¿ø·¡ Á¤ÀÇÇÑ º¯¼öÀÇ ÃëÇâÀÌ ¹«¾ùÀ̾ú´Â°¡¿¡ µû¶ó¼ ´Þ¶óÁø´Ù. º¯¼öÀÇ µÎ ÃëÇâ¿¡ ´ëÇÑ ¼³¸íÀ» º¸·Á¸é, See section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables).
¿©·¯ºÐÀÌ ¾î¶² º¯¼öÀÇ °ª¿¡´Ù `+='·Î ¹«¾ùÀΰ¡¸¦ µ¡ºÙÀÏ ¶§,
make
´Â ±âº»ÀûÀ¸·Î, ±× º¯¼öÀÇ Ãʱâ Á¤ÀÇ¿¡¼ ¿©ºÐÀÇ ÅؽºÆ®¸¦ Æ÷ÇÔÇÑ
°Íó·³ ÀÛµ¿ÇÑ´Ù. ¸Ç¸ÕÀú `:='·Î Á¤ÀÇÇؼ ´Ü¼ø È®Àå º¯¼ö¸¦
¸¸µé¾ú´Ù¸é `+='´Â ±×°Í¿¡´Ù ´Ü¼ø-È®Àå Á¤ÀǸ¦ Ãß°¡ÇÏ°í, `:='°¡
ÇÏ´Â °Íó·³ ÀÌÀü °ª¿¡´Ù ±×°ÍÀ» µ¡ºÙÀ̱â ÀÌÀü¿¡ »õ·Î¿î
ÅؽºÆ®·Î È®ÀåÇÑ´Ù.
(`:='ÀÇ ¿ÏÀüÇÑ ¼³¸í¿¡ ´ëÇؼ´Â, see section º¯¼ö ¼³Á¤(Setting Variables)).
»ç½Ç
variable := value variable += more
´Â ¿ÏÀüÈ÷ ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù:
variable := value variable := $(variable) more
ÇÑÆí ÀÏ¹Ý `='¸¦ »ç¿ëÇÏ¿© Àç±ÍÀûÀ¸·Î-È®ÀåµÇµµ·Ï ¸ÇóÀ½ Á¤ÀÇÇß´ø
º¯¼ö¿¡ `+='¸¦ »ç¿ëÇÑ´Ù¸é make
´Â Á¶±Ý ´Ù¸¥ °ÍÀ» ÇÑ´Ù.
Àç±ÍÀûÀ¸·Î-È®ÀåµÇ´Â º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ make
´Â ±× º¯¼ö¸¦ ¿©·¯ºÐÀÌ
º¯¼ö³ª ÇÔ¼ö ÂüÁ¶·Î ¼³Á¤ÇÑ °ªÀ¸·Î Áï°¢ È®ÀåÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ±â¾ïÇÏÀÚ.
±× ÅؽºÆ®¸¦ ÀÖ´Â ±×´ë·Î ³Ö´Â ´ë½Å¿¡ ÀÌ·± º¯¼ö¿Í ÇÔ¼ö ÂüÁ¶µéÀÌ
³ªÁß¿¡, »õ·Î¿î º¯¼ö¸¦ ÂüÁ¶ÇÒ ¶§, È®ÀåµÇµµ·Ï ÀúÀåÇÑ´Ù (see section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables)). Àç±ÍÀûÀ¸·Î-È®ÀåµÇ´Â º¯¼ö¿¡ ´ëÇؼ
`+='¸¦ »ç¿ëÇÒ ¶§ ¿©·¯ºÐÀÌ ÁöÁ¤ÇÑ »õ·Î¿î ÅؽºÆ®¸¦ make
°¡
¾îµð¿¡ µ¡ºÙÀÌ´Â °÷ÀÌ ¹Ù·Î ÀÌ È®ÀåµÇÁö ¾ÊÀº ÅؽºÆ®ÀÌ´Ù.
variable = value variable += more
ÀÌ°ÍÀº ´ÙÀ½°ú °ÅÀÇ µ¿ÀÏÇÏ´Ù:
temp = value variable = $(temp) more
´Ü Çϳª ¹°·Ð ÀÌ°ÍÀº temp
¶ó´Â º¯¼ö¸¦ Á¤ÀÇÇÏÁö ¾Ê´Â´Ù´Â Á¡À»
Á¦¿ÜÇÏ°í ¸»ÀÌ´Ù. ÀÌ°ÍÀÇ Á߿伺Àº ±× º¯¼öÀÇ ¿¹Àü °ªÀÌ º¯¼ö ÂüÁ¶¸¦ ´ã°í
ÀÖÀ» ¶§ ¹ß»ýÇÑ´Ù. ´ÙÀ½ ÀÏ¹Ý ¿¹Á¦¸¦ º¸ÀÚ:
CFLAGS = $(includes) -O ... CFLAGS += -pg # enable profiling
ù¹ø° ¶óÀÎÀº CFLAGS
º¯¼ö¸¦ ´Ù¸¥ º¯¼ö includes
¿¡ ´ëÇÑ
ÂüÁ¶·Î½á Á¤ÀÇÇÑ´Ù. (CFLAGS
´Â C ÄÄÆÄÀÏÀ» À§ÇÑ ±ÔÄ¢µé¿¡ ÀÇÇؼ
»ç¿ëµÈ´Ù; see section ¹¬½ÃÀû ±ÔÄ¢µéÀÇ Ä«´Þ·Î±×(Catalogue of Implicit Rules).) `='¸¦ Á¤ÀÇ¿¡¼ »ç¿ëÇÏ´Â °ÍÀº CFLAGS
°¡
Àç±ÍÀûÀ¸·Î-È®ÀåµÈ º¯¼ö·Î ¸¸µç´Ù. ÀÌ°ÍÀº `$(includes) -O'°¡,
make
°¡ CFLAGS
ÀÇ Á¤ÀǸ¦ ó¸®ÇÒ ¶§ È®ÀåµÇÁö
¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ±×·¡¼ includes
´Â ±×ÀÇ °ªÀÌ È¿·ÂÀ»
¹ßÈÖÇϵµ·Ï Á¤ÀÇµÉ ÇÊ¿ä°¡ ¾ÆÁ÷ ¾ø´Â °ÍÀÌ´Ù. ÀÌ°ÍÀº CFLAGS
¿¡ ´ëÇÑ
´Ù¸¥ ÂüÁ¶°¡ ÀÖ±âÀü¿¡ Á¤ÀǵDZ⸸ ÇÏ¸é µÈ´Ù. `+='¸¦ »ç¿ëÇÏÁö ¾Ê°í¼
CFLAGS
ÀÇ °ª¿¡´Ù ¹«¾ùÀΰ¡¸¦ µ¡ºÙÀÌ·Á°í ÇÑ´Ù¸é ¿ì¸®´Â ´ÙÀ½°ú °°ÀÌ
ÇÒ·±Áöµµ ¸ð¸¥´Ù:
CFLAGS := $(CFLAGS) -pg # enable profiling
ÀÌ°ÍÀº °ÅÀÇ ±Ù»çÇÑ °ÍÀÌÁö¸¸ ¿ì¸®°¡ ¿øÇÏ´Â ¹Ù·Î ±×°ÍÀº ¾Æ´Ï´Ù.
`:='¸¦ »ç¿ëÇϸé CFLAGS
¸¦ ´Ù½Ã ´Ü¼øÇÏ°Ô-È®ÀåµÇ´Â º¯¼ö·Î
ÀçÁ¤ÀÇÇعö¸°´Ù; ÀÌ°ÍÀº make
°¡ ±× º¯¼ö¸¦ ¼³Á¤Çϱâ Àü¿¡
`$(CFLAGS) -pg'¶ó´Â ÅؽºÆ®·Î È®ÀåÇعö¸°´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.
includes
°¡ ¾ÆÁ÷µµ Á¤ÀÇµÈ °ÍÀÌ ¾Æ´Ï¶ó¸é ¿ì¸®´Â ` -O
-pg'¸¦ ¾ò°í, ³ªÁß¿¡ ³ª¿Â includes
Á¤ÀÇ´Â ¾Æ¹«·± È¿·ÂÀ»
¹ßÈÖÇÏÁö ¸øÇÑ´Ù. ¿ªÀ¸·Î `+='¸¦ »ç¿ëÇÔÀ¸·Î½á ¿ì¸®´Â CFLAGS
¸¦
È®ÀåµÇÁö ¾ÊÀº °ª `$(includes) -O -pg'·Î ¼³Á¤ÇÑ´Ù. ±×·¡¼
¿ì¸®´Â includes
¿¡ ´ëÇÑ ÂüÁ¶¸¦ º¸Á¸ÇÑ´Ù. ±×·¯¹Ç·Î ±× °ªÀÌ ³ªÁß¿¡
Á¤ÀǸ¦ ¾ò°Ô µÇ¸é `$(CFLAGS)'¿Í °°Àº ÂüÁ¶´Â ¿©ÀüÈ÷ ±× °ªÀ» »ç¿ëÇÑ´Ù.
override
Áö½Ã¾î
¾î¶² º¯¼ö°¡ ¸í·É ¸Å°³º¯¼ö (see section º¯¼ö °ãÃľ²±â(Overriding Variables)) ·Î
¼³Á¤µÇ¾ú´Ù¸é makefile ¾ÈÀÇ ÀÏ¹Ý ÇÒ´çÀº ¹«½ÃµÈ´Ù. ¸í·É ¸Å°³º¯¼ö·Î ¼³Á¤µÈ
¹Ù ÀÖ´õ¶óµµ ±× º¯¼ö¸¦ makefile ¾È¿¡¼ ¼³Á¤ÇÏ°íÀÚ ÇÑ´Ù¸é override
Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº ´ÙÀ½°ú °°ÀÌ º¸ÀÌ´Â ¶óÀÎÀÌ´Ù:
override variable = value
¶Ç´Â
override variable := value
Á» ´õ ¸¹Àº ÅؽºÆ®¸¦ ¸í·É ¶óÀο¡¼ Á¤ÀÇµÈ º¯¼ö¿¡´Ù µ¡ºÙÀÌ·Á¸é ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÑ´Ù:
override variable += more text
See section º¯¼ö¿¡ ÅؽºÆ®¸¦ µ¡ºÙÀ̱â(Appending More Text to Variables).
override
Áö½Ã¾î´Â makefile°ú ¸í·É ¸Å°³º¯¼öµé °£ÀÇ ÀüÀï¿¡¼ ÀÚµ¿
Á¶ÀýÀ» À§Çؼ °í¾ÈµÈ °ÍÀÌ ¾Æ´Ï¾ú´Ù. ÀÌ°ÍÀº »ç¿ëÀÚ°¡ ¸í·É ¸Å°³º¯¼öµé·Î
ÁöÁ¤ÇÑ °ªµéÀ» º¯°æÇϰųª ´õÇÒ ¼ö ÀÖµµ·Ï °í¾ÈµÈ °ÍÀÌ´Ù.
¿¹¸¦ µé¾î¼ C ÄÄÆÄÀÏ·¯¸¦ ½ÇÇàÇÒ ¶§ ¾ðÁ¦³ª `-g' ½ºÀ§Ä¡¸¦ ¿øÇÑÁö¸¸
»ç¿ëÀÚ¿¡°Ô º¸Åëó·³ ¸í·É ¸Å°³º¯¼öµé·Î ´Ù¸¥ ½ºÀ§Ä¡¸¦ ÁöÁ¤ÇÏ´Â °ÍÀ»
Çã¶ôÇÏ°íÀÚ ÇÑ´Ù°í °¡Á¤ÇÏÀÚ. ±×·¯¸é ´ÙÀ½°ú °°ÀÌ override
Áö½Ã¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù:
override CFLAGS += -g
override
Áö½Ã¾î¸¦ define
Áö½Ã¾î·Î ¶ÇÇÑ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
ÀÌ°ÍÀº ¿©·¯ºÐÀÌ ±â´ëÇÏ´Â °Í°ú ºñ½ÁÇÏ°Ô ÀÛµ¿ÇÒ °ÍÀÌ´Ù:
override define foo bar endef
define
¿¡ ´ëÇÑ Á¤º¸´Â ´ÙÀ½ ¼½¼ÇÀ» ÂüÁ¶.
¾î¶² º¯¼öÀÇ °ªÀ» ¼³Á¤ÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº define
Áö½Ã¾î¸¦ »ç¿ëÇÏ´Â
°ÍÀÌ´Ù. ÀÌ Áö½Ã¾î´Â °³Çà ¹®ÀÚµéÀÌ ±× °ª¿¡ Æ÷ÇԵǴ °ÍÀ» Çã¿ëÇÏ´Â
ºñÀÏ»óÀûÀÎ ¹®¹ýÀ» °¡Áø´Ù. ÀÌ·¸°Ô ÇÏ´Â °ÍÀº ¸í·ÉµéÀÇ ¹ÀÎ ½ÃÄö½º(canned
sequence)¸¦ Á¤ÀÇÇÒ ¶§ Æí¸®ÇÏ´Ù.
define
Áö½Ã¾î´Â, µ¿ÀÏÇÑ ¶óÀο¡, ±× º¯¼öÀÇ À̸§ÀÌ µÚµû¶ó¿À°í
±×¿Ü´Â ¾Æ¹«°Íµµ ¾ø´Ù. º¯¼öÀÇ °ªÀº ´ÙÀ½¿¡ ÀÖ´Â ¶óÀε鿡 ³ªÅ¸³´Ù. °ªÀÇ
³¡Àº endef
¸¦ ´ã°í ÀÖ´Â ¶óÀο¡ ÀÇÇؼ Ç¥½ÃµÈ´Ù. ¹®¹ý»óÀÇ ÀÌ·±
Â÷ÀÌ¿Ü¿¡ define
Àº `='¿Í ºñ½ÁÇÏ°Ô ÀÛµ¿ÇÑ´Ù: ÀÌ°ÍÀº
Àç±ÍÀûÀ¸·Î-È®ÀåµÇ´Â º¯¼ö¸¦ »ý¼ºÇÑ´Ù
(see section º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of Variables)).
º¯¼öÀÇ À̸§Àº ÇÔ¼ö¿Í º¯¼ö ÂüÁ¶¸¦ ´ã°í ÀÖÀ» ¼ö ÀÖ´Ù. ÀÌ°ÍÀº »ç¿ëµÇ´Â
½ÇÁ¦ º¯¼ö À̸§À» ã±â À§Çؼ Áö½Ã¾î°¡ ÀÐÈú ¶§ È®ÀåµÈ´Ù.
define two-lines echo foo echo $(bar) endef
ÀÏ¹Ý ÇÒ´ç¿¡¼ÀÇ °ªÀº °³ÇàÀ» °¡ÁöÁö ¸øÇÑ´Ù; ±×·¯³ª define
¾ÈÀÇ
°ªµéÀÇ ¶óÀÎÀ» ³ª´©´Â °³ÇàµéÀº ±× º¯¼öÀÇ °ªÀÌ µÈ´Ù(endef
¾Õ¿¡
ÀÕ´Â ¸¶Áö¸· °³ÇàÀº ¿¹¿ÜÀε¥ ÀÌ°ÍÀº °ªÀÇ ÀϺηΠ»ý°¢µÇÁö ¾Ê´Â´Ù).
ÀÌÀü ¿¹Á¦´Â ±â´ÉÀûÀ¸·Î ´ÙÀ½°ú µ¿ÀÏÇÏ´Ù:
two-lines = echo foo; echo $(bar)
¼¼¹ÌÄÝ·ÐÀ¸·Î ³ª´¶ µÎ ¸í·ÉµéÀÌ µÎ°³ÀÇ ºÐÇÒµÈ ½©¸í·Éµé°ú ºñ½ÁÇÏ°Ô
ÀÛµ¿Çϱ⠶§¹®ÀÌ´Ù. ±×·¯³ª, µÎ°³ÀÇ ºÐ¸®µÈ ¶óÀÎÀ»µé »ç¿ëÇÏ´Â °ÍÀº
make
°¡ ½©À» µÎ¹ø È£ÃâÇÏ¿© °¢ ¶óÀο¡ ´ëÇؼ µ¶¸³µÈ ¼ºê½©¿¡¼
½ÇÇàµÈ´Ù´Â °ÍÀ» ÁÖ¸ñÇÏÀÚ. See section ¸í·É ½ÇÇà(Command Execution)
define
À¸·Î ¸¸µé¾îÁø º¯¼ö Á¤ÀǵéÀÌ ¸í·ÉÇà º¯¼ö Á¤Àǵ麸´Ù
¿ì¼±¼øÀ§°¡ ´õ ³ô±â¸¦ ¹Ù¶õ´Ù¸é define
°ú ÇÔ²² override
Áö½Ã¾î¸¦, ´ÙÀ½°ú °°ÀÌ ¹¾î¼ ¾µ ¼ö ÀÖ´Ù:
override define two-lines foo $(bar) endef
See section override
Áö½Ã¾î.
make
ÀÇ º¯¼öµéÀº make
°¡ ½ÇÇàÁßÀΠȯ°æÀ¸·ÎºÎÅÍ ¿Ã ¼ö
ÀÖ´Ù. make
°¡ ½ÃÀÛÇÒ ¶§ º» ¸ðµç ȯ°æº¯¼öµéÀº make
º¯¼ö·Î
µ¿ÀÏÇÑ À̸§°ú µ¿ÀÏÇÑ °ªÀ» °¡Áøä º¯È¯µÈ´Ù. ±×·¯³ª makefile¿¡¼ÀÇ
¸í½ÃÀû ÇÒ´çÀ̳ª, ¸í·É ¸Å°³º¯¼ö¸¦ »ç¿ëÇÑ ¸í½ÃÀû ÇÒ´çÀº ȯ°æÀ»
¿À¹ö¶óÀ̵åÇÑ´Ù. (`-e' Ç÷¡±×°¡ ÁöÁ¤µÇ¸é ȯ°æÀ¸·ÎºÎÅÍÀÇ °ªµéÀÌ
makefile¿¡ ÀÖ´Â ÇÒ´çµéÀ» ¿À¹ö¶óÀ̵åÇÑ´Ù.
See section ¿É¼ÇµéÀÇ ¿ä¾à(Summary of Options).
±×·¯³ª ÀÌ°ÍÀº ±ÇÀåµÇ´Â ¹Ù°¡ ¾Æ´Ï´Ù.)
±×·¡¼ CFLAGS
¶ó´Â º¯¼ö¸¦ ȯ°æ¿¡¼ ¼³Á¤Çϸé ÀÌ·± ÄÄÆÄÀÏ·¯
½ºÀ§Ä¡µéÀ» ´ëºÎºÐÀÇ makefile¤§¸£¿¡ ÀÖ´Â ¸ðµç C ÄÄÆÄÀÏÀÌ »ç¿ëÇϵµ·Ï ÇÒ
¼ö ÀÕ´Ù. ÀÌ°ÍÀº Ç¥ÁØ ¶Ç´Â ÀüÅëÀûÀÎ ÀǹÌÀÇ º¯¼öµé¿¡ ´ëÇؼ
¾ÈÀüÇÏ´Ù. ¿Ö³Ä¸é ¾î¶² makefileµµ ±×µéÀ» ´Ù¸¥ °ÍÀ¸·Î »ç¿ëÇÏÁö ¾ÊÀ»
°ÍÀ̶ó´Â °ÍÀ» ¿©·¯ºÐÀº ¾Ë°í Àֱ⠶§¹®ÀÌ´Ù. (±×·¯³ª ÀÌ°ÍÀº ¿ÏÀüÈ÷
¹ÏÀ»¸¸ÇÑ °ÍÀÌ ¾Æ´Ï´Ù; ¾î¶² makefileµéÀº CFLAGS
¸¦ ¸í½ÃÀûÀ¸·Î
ÁöÁ¤Çؼ ȯ°æ¿¡ ÀÕ´Â °ª¿¡ ÀÇÇؼ ¿µÇâÀ» ¹ÞÁö ¸øÇÒ ¼öµµ Àֱ⠶§¹®ÀÌ´Ù.)
make
°¡ Àç±ÍÀûÀ¸·Î È£ÃâµÉ ¶§ ¿ÜºÎ È£Ãâ¿¡¼ Á¤ÀÇµÈ º¯¼öµéÀº ³»ºÎ
È£Ãâ·Î, ȯ°æÀ» ÅëÇؼ Àü´ÞµÉ ¼ö ÀÖ´Ù
(see section make
ÀÇ Àç±ÍÀû »ç¿ë(Recursive Use of make
)).
µðÆúÆ®·Î ȯ°æÀ¸·ÎºÎÅÍ ¶Ç´Â ¸í·ÉÇàÀ¸·ÎºÎÅÍ ¿Â º¯¼öµé¸¸ÀÌ Àç±ÍÀû È£Ãâ¿¡
Àü´ÞµÈ´Ù. export
Áö½Ã¾î¸¦ »ç¿ëÇؼ ´Ù¸¥ º¯¼öµéÀ» ÀͽºÆ÷Æ®ÇÒ ¼ö
ÀÖ´Ù.
ÀÚ¼¼ÇÑ ³»¿ëÀº See section ¼ºê-make
¿¡ ´ëÇÑ Åë½Å º¯¼ö(Communicating Variables to a Sub-make
).
ȯ°æÀ¸·ÎºÎÅÍÀÇ º¯¼öµéÀ» ´Ù¸£°Ô »ç¿ëÇÏ´Â °ÍÀº ±ÇÀåµÇÁö ¾Ê´Â´Ù. makefileµéÀÌ ±×µéÀÇ ±â´ÉÀ» ±×µéÀÇ Á¦¾î ¹Ù±ù¿¡¼ ¼³Á¤µÈ ȯ°æº¯¼öµé¿¡ ÀÇÁ¸ÇÑ´Ù´Â °ÍÀº º°·Î Çö¸íÇÑ °ÍÀÌ ¾Æ´Ï´Ù. ¿Ö³Ä¸é ÀÌ·¸°Ô ÇÏ´Â °ÍÀº µ¿ÀÏÇÑ makefileÀ» °¡Áö°í ´Ù¸¥ »ç¿ëÀÚµéÀÌ ´Ù¸¥ °á°ú¸¦ ¾ò°Ô ¸¸µé±â ¶§¹®ÀÌ´Ù. ÀÌ°ÍÀº ´ëºÎºÐÀÇ makefileÀÇ Àüü ¸ñÀû¿¡ À§¹èµÈ´Ù.
±×·± ¹®Á¦µéÀº SHELL
À̶ó´Â º¯¼ö·Î, Ưº°È÷ Àß ÀϾ
°ÍÀÌ´Ù. ÀÌ°ÍÀº ÀϹÝÀûÀ¸·Î ȯ°æ¿¡¼ »ç¿ëÀÚÀÇ ÀÎÅÍ·ºÆ¼ºê ½©·Î ÁöÁ¤ÇÏ´Â
µ¥ »ç¿ëµÈ´Ù. ÀÌ·± ¼±ÅÃÀÌ make
¿¡ ¿µÇâÀ» ¹ÌÄ¡´Â °ÍÀº ¿øÇÏ´Â °ÍÀÌ
¾Æ´Ò °ÍÀÌ´Ù. ±×·¡¼ make
´Â SHELL
ȯ°æº¯¼öÀÇ °ªÀ»
¹«½ÃÇÑ´Ù (SHELL
ÀÌ º¸Åë ¼³Á¤µÇÁö ¾Ê´Â MS-DOS¿Í MS-Windows´Â
Á¦¿Ü. See section ¸í·É ½ÇÇà(Command Execution).)
make
¿¡ ÀÖ´Â º¯¼ö°ªµéÀº º¸Åë Àü¿ªÀûÀÌ´Ù; Áï, ±×µéÀÌ Æò°¡µÈ
À§Ä¡¿Í »ó°ü¾øÀÌ À̵éÀº µ¿ÀÏÇÏ´Ù(¹°·Ð ±×µéÀÌ ¸®¼ÂµÇÁö ¾Ê´Â´Ù¸é). ÇÑ°¡Áö
¿¹¿Ü´Â ÀÚµ¿ º¯¼öµéÀÇ °æ¿ìÀÌ´Ù
(see section ÀÚµ¿ º¯¼öµé(Automatic Variables)).
´Ù¸¥ ¿¹¿Ü´Â Ÿ°Ù-Á¾¼Ó º¯¼ö °ª(target-specific variable
values)ÀÌ´Ù. ÀÌ ±â´ÉÀº µ¿ÀÏÇÑ º¯¼ö¿¡ ´ëÇؼ, make
°¡ ÇöÀç
ºôµåÇÏ°í Àִ Ÿ°Ù¿¡ ±â¹ÝÇؼ, ´Ù¸¥ °ªµéÀ» Á¤ÀÇÇÒ ¼ö ÀÖµµ·Ï
ÇÑ´Ù. ÀÚµ¿º¯¼öÀÇ °æ¿ì ÀÌ·± °ªµéÀº ´ÜÁö Ÿ°ÙÀÇ ¸í·É ½ºÅ©¸³Æ®ÀÇ
³»¿ë¾È¿¡¼(±×¸®°í ´Ù¸¥ Ÿ°Ù-Á¾¼ÓÀûÀÎ ÇÒ´ç¿¡¼)¸¸ »ç¿ë °¡´ÉÇÏ´Ù.
Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼ö°ªÀº ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇÑ´Ù:
target ... : variable-assignment
¶Ç´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇÑ´Ù:
target ... : override variable-assignment
´Ù¼öÀÇ target °ªµéÀº Ÿ°Ù ¸®½ºÆ®ÀÇ °¢ ¸â¹ö¿¡ ´ëÇؼ Ÿ°Ù-Á¾¼ÓÀûÀÎ °ªÀ» °³º°ÀûÀ¸·Î »ý¼ºÇÑ´Ù.
variable-assignment ´Â ÇÒ´çÀÇ À¯È¿ÇÑ ÇüÅÂÀÌ¸é ¾Æ¹«°Å³ª µÈ´Ù; Àç±ÍÀû (`='), Á¤Àû (`:='), µ¡ºÙÀ̱â (`+=', ¶Ç´Â Á¶°Ç (`?='). variable-assignment¿¡ ³ªÅ¸³ª´Â ¸ðµç º¯¼öµéÀº Ÿ°ÙÀÇ ³»¿ë¹° ¾È¿¡¼ Æò°¡µÈ´Ù: ±×·¡¼ ÀÓÀÇÀÇ »çÀü-Á¤ÀÇµÈ Å¸°Ù-Á¾¼ÓÀûÀÎ º¯¼ö °ªµéÀÌ È¿·ÂÀ» ¹ßÈÖÇÒ °ÍÀÌ´Ù. ÀÌ º¯¼ö´Â ½ÇÁ¦·Î ¾î¶² "Àü¿ª" °ª°úµµ ±¸ºÐÀÌ µÈ´Ù´Â Á¡¿¡ ÁÖ¸ñÇÏÀÚ: µÎ º¯¼öµéÀÌ µ¿ÀÏÇÑ ÃëÇâ(Àç±ÍÀû vs. Á¤Àû)À» ¹Ýµå½Ã °¡Áú ÇÊ¿ä´Â ¾ø´Ù.
Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼öµéÀº ´Ù¸¥ makefile º¯¼ö¿Í µ¿ÀÏÇÑ ¿ì¼±¼øÀ§¸¦
°¡Áø´Ù. ¸í·ÉÇà¿¡¼ ÁÖ¾îÁø º¯¼öµéÀÌ(±×¸®°í `-e' ¿É¼ÇÀÌ ÁÖ¾îÁ³´Ù¸é
ȯ°æ¿¡¼ ÁÖ¾îÁø º¯¼öµéÀÌ) ¿ì¼±±ÇÀ» °¡Áú°ÍÀÌ´Ù. override
¸¦
ÁöÁ¤ÇÏ´Â °ÍÀº Ÿ°Ù-Á¾¼Ó º¯¼ö °ªÀÌ ´õ ¼±È£µÇµµ·Ï ÇÒ °ÍÀÌ´Ù.
Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼öµéÀÇ Æ¯¼öÇÑ ±â´ÉÀÌ Çϳª ´õ ÀÖ´Ù: Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼ö¸¦ Á¤ÀÇÇÒ ¶§ ±× º¯¼öÀÇ °ªÀÌ ¶ÇÇÑ ÀÌ Å¸°ÙÀÇ ¸ðµç Á¾¼Ó¹°µé¿¡ ´ëÇؼµµ ¿µÇâÀ» ¹ÌÄ£´Ù(´Ü ÀÌ·± Á¾¼Ó¹°µéÀÌ ±×µé ÀÚ½ÅÀÇ Å¸°Ù-Á¾¼ÓÀûÀÎ º¯¼ö °ªÀ¸·Î½á ±×°ÍÀ» ¿À¹ö¶óÀ̵åÇÏÁö ¾Ê¾Ò´Ù¸é ¸»ÀÌ´Ù). ±×·¡¼ ¿¹¸¦ µé¸é ´ÙÀ½°ú °°Àº ¹®ÀåÀº:
prog : CFLAGS = -g prog : prog.o foo.o bar.o
CFLAGS
¸¦ `prog'¿¡ ´ëÇÑ ¸í·É ½ºÅ©¸³Æ®¿¡¼ `-g'·Î
¼³Á¤ÇÒ °ÍÀÌ´Ù. ±×·¯³ª ÀÌ°ÍÀº ¶ÇÇÑ CFLAGS
¸¦ `prog.o',
`foo.o', ±×¸®°í `bar.o'¸¦ »ý¼ºÇÏ´Â ¸í·É ½ºÅ©¸³Æ®¾È¿¡¼,
±×¸®°í À̵éÀÇ Á¾¼Ó¹°µéÀ» »ý¼ºÇÏ´Â ÀÓÀÇÀÇ ¸í·É ½ºÅ©¸³Æ®µéÀ» »ý¼ºÇÏ´Â
¸í·É ½ºÅ©¸³Æ®µé ¾È¿¡¼ `-g'·Î ¼³Á¤ÇÒ °ÍÀÌ´Ù.
Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼ö°ª (see section Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼ö °ª( Target-specific Variable Values)) ¿¡ µ¡ºÙ¿©¼, GNU make
´Â ÆÐÅÏ-Á¾¼ÓÀûÀÎ º¯¼ö°ªÀ»
Áö¿øÇÑ´Ù. ÀÌ Çü¿¡¼ º¯¼ö´Â ÁöÁ¤µÈ ÆÐÅÏ°ú ÀÏÄ¡ÇÏ´Â ÀÓÀÇÀÇ Å¸°Ù¿¡ ´ëÇؼ
Á¤ÀǵȴÙ. ÀÌ·±½ÄÀ¸·Î Á¤ÀÇµÈ º¯¼öµéÀº, ±× Ÿ°Ù¿¡ ´ëÇؼ ¸í½ÃÀûÀ¸·Î
Á¤ÀÇµÈ ÀÓÀ¸ÀÇ Å¸°Ù-Á¾¼ÓÀûÀÎ º¯¼öµé ÀÌÈÄ¿¡, ±×¸®°í Ÿ°Ù Á¾¼ÓÀûÀÎ º¯¼ö°¡
¾î¹öÀÌ Å¸°Ù¿¡ ´ëÇؼ Á¤ÀǵDZâ Àü¿¡, °Ë»öµÈ´Ù.
ÆÐÅÏ-Á¾¼ÓÀûÀÎ º¯¼ö°ªÀº ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÑ´Ù:
pattern ... : variable-assignment
¶Ç´Â ´ÙÀ½°ú °°ÀÌ:
pattern ... : override variable-assignment
¿©±â¼ pattern ´Â %-ÆÐÅÏÀÌ´Ù. Ÿ°Ù-Á¾¼Ó º¯¼ö°ª°ú µ¿ÀÏÇÏ°Ô ´Ù¼öÀÇ
pattern °ªµéÀÌ °¢ ÆÐÅÏ¿¡ ´ëÇؼ °³º°ÀûÀ¸·Î ÆÐÅÏ-Á¾¼Ó º¯¼ö°ªÀ»
»ý¼ºÇÑ´Ù. variable-assignment ´Â À¯È¿ÇÑ ÇÒ´çÀÌ¸é ¹«¾ùÀ̵ç
µÈ´Ù. ÀÓÀÇÀÇ ¸í·ÉÇà º¯¼ö ¼³Á¤ÀÌ, override
°¡ ÁöÁ¤µÇÁö ¾Ê¾Ò´Ù¸é,
´õ ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áø´Ù.
¿¹¸¦ µé¾î¼:
%.o : CFLAGS = -O
ÀÌ°ÍÀº ÆÐÅÏ %.o
¿Í ÀÏÄ¡ÇÏ´Â ¸ðµç Ÿ°Ùµé¿¡ ´ëÇؼ `-O'¸¦
CFLAGS
ÀÇ °ªÀ¸·Î ÇÒ´çÇÒ °ÍÀÌ´Ù.
Go to the first, previous, next, last section, table of contents.