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


º¯¼ö »ç¿ë ¹æ¹ý(How to Use Variables)

º¯¼ö(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).

º¯¼ö ÂüÁ¶ÀÇ ±âº»(Basics of Variable References)

º¯¼öÀÇ °ªÀ» ´ëÀÔÇϱâ À§Çؼ­ º¯¼öÀÇ À̸§À» °ýÈ£³ª Áß°ýÈ£·Î ¹­Àº µÚ¿¡ ´Þ·¯ ±âÈ£¸¦ ¾Õ¿¡ ºÙÀδÙ: `$(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))ÀÇ °æ¿ì¸¦ Á¦¿ÜÇÏ°í´Â »ç¿ëµÇÁö ¾Êµµ·Ï °­ÇÏ°Ô ±ÇÀåµÇ°í ÀÖ´Ù.

º¯¼öÀÇ µÎ ÃëÇâ(The Two Flavors of 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

ºó °ªÀ¸·Î ¼³Á¤µÈ º¯¼öµµ ¿©ÀüÈ÷ Á¤ÀÇµÈ °ÍÀ̱⠶§¹®¿¡, `?='´Â ±× º¯¼ö¸¦ ¼³Á¤ÇÏÁö ¾Ê´Â´Ù´Â °Í¿¡ ÁÖÀÇÇÏÀÚ.

º¯¼ö ÂüÁ¶ÀÇ °í±Þ ±â´É(Advanced Features for Reference to Variables)

ÀÌ ¼½¼ÇÀº Á» ´õ À¯¿¬ÇÑ ¹æ½ÄÀ¸·Î º¯¼öµéÀ» ÂüÁ¶ÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â °í±Þ ±â´ÉµéÀ» ¸î°¡Áö ¼³¸íÇÑ´Ù.

´ëÀÔ ÂüÁ¶(Substitution References)

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'·Î ¼³Á¤ÇÑ´Ù.

°è»êµÈ º¯¼ö À̸§(Computed Variable Names)

°è»êµÈ º¯¼ö À̸§µéÀº Á¤±³ÇÑ 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 ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§ ¾ÆÁÖ º¹ÀâÇÑ ¹æ½ÄÀ¸·Î »ç¿ëµÇÁö¸¸, ¸¹ÀÌ ´Ù¸£´Ù´Â °ÍÀ» ÁÖ¸ñÇÏÀÚ.

º¯¼ö°¡ °ªÀ» ¾ò´Â ¹æ¹ý(How Variables Get Their Values)

º¯¼öµéÀº ´ÙÀ½°ú °°Àº ¸î°¡Áö ¹æ¹ýÀ¸·Î °ªµéÀ» ¾òÀ» ¼ö ÀÕ´Ù:

º¯¼ö ¼³Á¤(Setting Variables)

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

º¯¼ö¿¡ ÅؽºÆ®¸¦ µ¡ºÙÀ̱â(Appending More Text to Variables)

ÀÌ¹Ì Á¤ÀÇµÈ º¯¼öÀÇ °ª¿¡´Ù ÅؽºÆ®¸¦ Ãß°¡ÇÏ´Â °ÍÀº Á¾Á¾ À¯¿ëÇÏ´Ù. ¿©·¯ºÐÀº ÀÌ°ÍÀ» ´ÙÀ½°ú °°ÀÌ `+='ÀÌ ´ã°ÜÁø ¶óÀÎÀ¸·Î ÇÑ´Ù:

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¿¡ ´ëÇÑ Á¤º¸´Â ´ÙÀ½ ¼½¼ÇÀ» ÂüÁ¶.

Ãà¾î º¯¼ö Á¤ÀÇ(Defining Variables Verbatim)

¾î¶² º¯¼öÀÇ °ªÀ» ¼³Á¤ÇÏ´Â ´Ù¸¥ ¹æ¹ýÀº 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 Áö½Ã¾î.

ȯ°æÀ¸·ÎºÎÅÍÀÇ º¯¼öµé(Variables from the Environment)

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).)

Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼ö °ª( Target-specific Variable Values)

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'·Î ¼³Á¤ÇÒ °ÍÀÌ´Ù.

ÆÐÅÏ-Á¾¼ÓÀûÀÎ º¯¼ö°ª(Pattern-specific Variable Values)

Ÿ°Ù-Á¾¼ÓÀûÀÎ º¯¼ö°ª (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.