Á¶°Ç(conditional) Àº makefileÀÇ ¾î¶² ºÎºÐÀÌ º¯¼öÀÇ °ª¿¡ µû¶ó¼
»ç¿ëµÇ°Å³ª ¹«½ÃµÇµµ·Ï ÇÑ´Ù. Á¶°ÇÀº ÇÑ º¯¼ö¸¦ ´Ù¸¥ °Í°ú, ¶Ç´Â ÇÑ º¯¼öÀÇ
°ªÀ» »ó¼ö ¹®ÀÚ¿°ú ºñ±³ÇÒ ¼ö ÀÖ´Ù. Á¶°ÇÀº make
°¡ ½ÇÁ¦·Î
makefile¿¡¼ "º¸´Â" °ÍÀ» Á¦¾îÇÑ´Ù. ±×·¯¹Ç·Î ½ÇÇà½ÃÀÇ ½© ¸í·ÉµéÀ»
Á¦¾îÇÏ´Â µ¥¿¡´Â »ç¿ëµÉ ¼ö ¾ø´Ù.
´ÙÀ½ Á¶°ÇÀÇ ¿¹Á¦´Â make
¿¡°Ô CC
º¯¼ö°¡ `gcc'À̶ó¸é
ÀÏ´ÜÀÇ ¶óÀ̺귯¸® ¸ðÀ½À» »ç¿ëÇ϶ó°í ¸»ÇÏ´Â °ÍÀÌ´Ù. ±×·¸Áö ¾Ê´Ù¸é ´Ù¸¥
¶óÀ̺귯¸® ¸ðÀ½À» »ç¿ëÇϵµ·Ï ¸»ÇÏ´Â °ÍÀÌ´Ù. µÎ ¸í·É ¶óÀεé ÁßÀÇ ¾î¶²
°ÍÀÌ ¾î¶² ±ÔÄ¢¿¡ ´ëÇؼ »ç¿ëµÉ °ÍÀΰ¡¸¦ Á¦¾îÇÔÀ¸·Î½á ÀÛµ¿ÇÑ´Ù. ±×
°á°ú·Î make
¿¡ ´ëÇÑ ¸Å°³º¯¼ö·Î½á `CC=gcc'¸¦ ¾²¸é, ¾î¶²
ÄÄÆÄÀÏ·¯°¡ »ç¿ëµÉ °ÍÀΰ¡ »Ó¸¸ ¾Æ´Ï¶ó ¾î¶² ¶óÀ̺귯¸®µéÀÌ ¸µÅ©µÉ
°ÍÀΰ¡¸¦ º¯°æÇÑ´Ù.
libs_for_gcc = -lgnu normal_libs = foo: $(objects) ifeq ($(CC),gcc) $(CC) -o foo $(objects) $(libs_for_gcc) else $(CC) -o foo $(objects) $(normal_libs) endif
ÀÌ Á¶°ÇÀº ¼¼°¡Áö Áö½Ã¾îµéÀ» »ç¿ëÇÑ´Ù: Çϳª´Â ifeq
, Çϳª´Â
else
, ±×¸®°í ³ª¸ÓÁö Çϳª´Â endif
.
ifeq
Áö½Ã¾î´Â Á¶°ÇÀ» ½ÃÀÛÇÏ°í Á¶°ÇÀ» ÁöÁ¤ÇÑ´Ù. ÄÞ¸Ó·Î ºÐ¸®µÇ°í
°ýÈ£·Î µÑ·¯½ÎÀÎ µÎ°³ÀÇ ¸Å°³º¯¼öµéÀ» °¡Áø´Ù. º¯¼ö ´ëÀÔÀÌ µÎ
¸Å°³º¯¼öµé¿¡ ´ëÇؼ ¼öÇàµÇ°í ³ µÚ¿¡ ±×µéÀÌ ºñ±³µÈ´Ù. ifeq
µÚ¿¡
¿À´Â makefileÀÇ ¶óÀεéÀº µÎ ¸Å°³º¯¼öµéÀÌ ÀÏÄ¡ÇÒ °æ¿ì »ç¿ëµÈ´Ù; ±×·¸Áö
¾ÊÀ¸¸é ±×µéÀº ¹«½ÃµÈ´Ù.
else
Áö½Ã¾î´Â ´ÙÀ½ ¶óÀεéÀÌ, ÀÌÀü Á¶°ÇÀÌ ½ÇÆÐÇÏ¿´´Ù¸é,
¼öÇàµÇµµ·Ï ÇÑ´Ù. À§ÀÇ ¿¹Á¦¿¡¼ ÀÌ°ÍÀº µÎ¹ø° ´ë¾È ¸µÅ© ¸í·ÉÀÌ, ù¹ø°
´ë¾ÈÀÌ »ç¿ëµÇÁö ¾ÊÀ»¶§¸¶´Ù, »ç¿ëµÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. else
¸¦
Á¶°Ç¿¡ °¡Áö´Â °ÍÀº ¼±ÅÃÀÌ´Ù.
endif
Áö½Ã¾î´Â Á¶°ÇÀ» Á¾·áÇÑ´Ù. ¸ðµç Á¶°ÇÀº ¹Ýµå½Ã
endif
·Î Á¾·áÇØ¾ß ÇÑ´Ù. ÀÌ µÚ¿¡ Á¶°ÇÀÌ ¾Æ´Ñ makefileÀÇ ÅؽºÆ®°¡
¿Â´Ù.
¿¹Á¦°¡ ¿¹½ÃÇÏ´Â °Íó·³ Á¶°ÇÀº ÅؽºÆ® ·¹º§¿¡¼ ÀÛµ¿ÇÑ´Ù: Á¶°ÇÀÇ ¶óÀεéÀº Á¶°Ç¿¡ µû¶ó¼ makefileÀÇ ÀϺηΠÃë±ÞµÇ°Å³ª ¾Æ´Ï¸é ¹«½ÃµÈ´Ù. ÀÌ°ÍÀº ±ÔÄ¢°ú °°Àº makefileÀÇ ´õ Å« ¹®¹ý À¯´ÖµéÀÌ ¿Ö Á¶°ÇÀÇ ½ÃÀÛÀ̳ª ³¡°ú °ãÃÄÁ® ÀÖÀ» ¼ö Àִ°¡¿¡ ´ëÇÑ ÀÌÀ¯ÀÌ´Ù.
º¯¼ö CC
°¡ º¯¼ö `gcc'¸¦ °¡Áú ¶§ À§ÀÇ ¿¹Á¦´Â ´ÙÀ½°ú °°Àº
È¿°ú¸¦ °¡Áø´Ù:
foo: $(objects) $(CC) -o foo $(objects) $(libs_for_gcc)
º¯¼ö CC
°¡ ÀÓÀÇÀÇ ´Ù¸¥ °ªÀ» °¡Áø´Ù¸é ±× °á°ú´Â ´ÙÀ½°ú °°À» °ÍÀÌ´Ù:
foo: $(objects) $(CC) -o foo $(objects) $(normal_libs)
¾î¶² º¯¼ö ÇÒ´çÀ» Á¶°ÇÈÇؼ º¯¼ö¸¦ ¹«Á¶°Ç »ç¿ëÇÔÀ¸·Î½á, µ¿ÀÏÇÑ °á°ú°¡ ´Ù¸¥ ½ÄÀ¸·Î ¾ò¾îÁú ¼ö ÀÖ´Ù:
libs_for_gcc = -lgnu normal_libs = ifeq ($(CC),gcc) libs=$(libs_for_gcc) else libs=$(normal_libs) endif foo: $(objects) $(CC) -o foo $(objects) $(libs)
else
¸¦ °¡ÁöÁö ¾Ê´Â ´Ü¼øÇÑ Á¶°ÇÀÇ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù:
conditional-directive text-if-true endif
text-if-true´Â ÀÓÀÇ ¶óÀÎÀÇ ÅؽºÆ®ÀÏ ¼ö ÀÖ´Ù. ÀÌ°ÍÀº Á¶°ÇÀÌ ÂüÀÏ ¶§ makefileÀÇ ÀϺηΠ¿©°ÜÁø´Ù. Á¶°ÇÀÌ °ÅÁþÀÌ¸é ¾î¶² ÅؽºÆ®µµ »ç¿ëµÇÁö ¾Ê´Â´Ù.
º¹ÀâÇÑ Á¶°ÇÀÇ ¹®Á¢Àº ´ÙÀ½°ú °°´Ù:
conditional-directive text-if-true else text-if-false endif
Á¶°ÇÀÌ ÂüÀ̸é text-if-true°¡ »ç¿ëµÈ´Ù; ±×·¸Áö ¾ÊÀ¸¸é text-if-false ÀÌ »ç¿ëµÈ´Ù. text-if-false´Â ÀÓÀÇ ¶óÀÎÀÇ ÅؽºÆ®ÀÏ ¼ö ÀÖ´Ù.
conditional-directive ÀÇ ¹®¹ýÀº Á¶°ÇÀÌ ´Ü¼øÇϵçÁö ¾Æ´Ï¸é º¹ÀâÇϵçÁö µ¿ÀÏÇÏ´Ù. ¼·Î ´Ù¸¥ Á¶°ÇµéÀ» Å×½ºÆ®ÇÏ´Â ¼·Î ´Ù¸¥ Áö½Ã¾îµéÀÌ ³×°³ ÀÖ´Ù. À̵éÀº ´ÙÀ½°ú °°´Ù:
ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"
strip
ÇÔ¼ö see section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis)) ¸¦
»ç¿ëÇؼ °ø¹é¹®ÀÚ¸¦ ºó°ÍÀÌ ¾Æ´Ñ °ªÀ¸·Î Çؼ®ÇÏ´Â °ÍÀ» ÇÇÇÒ ¼ö
ÀÖ´Ù. ¿¹¸¦ µé¸é:
ifeq ($(strip $(foo)),) text-if-empty endifÀÌ°ÍÀº
$(foo)
ÀÇ È®ÀåÀÌ °ø¹é¹®ÀÚ¸¦ ´ã°í ÀÖ´Ù°í ÇÏ´õ¶óµµ
text-if-empty ¸¦ Æò°¡ÇÒ °ÍÀÌ´Ù.
ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"
ifdef variable-name
ifdef
´Â ¾î¶² º¯¼ö°¡ °ªÀ» °¡Áö´ÂÁö ¾È°¡Áö´ÂÁö¿¡ ´ëÇؼ¸¸
Å×½ºÆ®ÇÑ´Ù´Â °Í¿¡ ÁÖÀÇÇÏÀÚ. ÀÌ°ÍÀº, °ªÀÌ ºó°ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ º¸±â À§Çؼ
º¯¼ö¸¦ È®ÀåÇÏÁö ¾Ê´Â´Ù. °á°úÀûÀ¸·Î ifdef
¸¦ »ç¿ëÇÑ Å×½ºÆ®µéÀº
foo =
¿Í °°Àº °ÍµéÀ» Á¦¿ÜÇÑ ¸ðµç Á¤Àǵ鿡 ´ëÇؼ ÂüÀ»
¸®ÅÏÇÑ´Ù. ºó °ª¿¡ ´ëÇÑ Å×½ºÆ®¸¦ ÇÏ·Á¸é ifeq ($(foo),)
¸¦
»ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î¼,
bar = foo = $(bar) ifdef foo frobozz = yes else frobozz = no endifÀÌ°ÍÀº `frobozz'¸¦ `yes'·Î ¼³Á¤ÇÏ´Â ¹Ý¸é¿¡ ´ÙÀ½Àº:
foo = ifdef foo frobozz = yes else frobozz = no endif`frobozz'¸¦ `no'·Î ¼³Á¤ÇÑ´Ù.
ifndef variable-name
Á¶°Ç Áö½Ã¾î ¶óÀο¡¼ ¸Ç¾Õ¿¡ ÀÖ´Â ¿©ºÐÀÇ °ø¹éµéÀº Çã¿ëµÇ°í À̵éÀº ¹«½ÃµÈ´Ù. ±×·¯³ª ÅÇÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. (ÅÇÀ¸·Î ½ÃÀÛÇÑ´Ù¸é ±ÔÄ¢ÀÇ ¸í·ÉÀ¸·Î »ý°¢µÉ °ÍÀÌ´Ù.) ÀÌ·± °Í ¿Ü¿¡ ¿©ºÐÀÇ °ø¹éµéÀ̳ª ÅǵéÀÌ Áö½Ã¾î À̸§À̳ª ¸Å°³º¯¼ö ¾ÈÀ» Á¦¿ÜÇÏ°í´Â, ¾îµð¿¡¼³ª ¾Æ¹«·± È¿°ú¾øÀÌ »ðÀ﵃ ¼ö ÀÖ´Ù. `#' ·Î ½ÃÀÛÇÏ´Â ÁÖ¼®ÀÌ ¶óÀÎÀÇ ¸¶Áö¸·¿¡ ¿Ã ¼ö ÀÖ´Ù.
Á¶°ÇÀÇ ÀϺÎÀÎ ´Ù¸¥ µÎ Áö½Ã¾îµéÀº else
¿Í endif
ÀÌ´Ù. ÀÌ·±
Áö½Ã¾îµé °¢°¢Àº ´ÜÀÏ ¿öµå·Î, ¸Å°³º¯¼ö ¾øÀÌ »ç¿ëµÈ´Ù. ¿©ºÐÀÇ °ø¹éµéÀÌ
±× ¶óÀÎÀÇ ¸ÇóÀ½¿¡ ¿Ã ¼öµµ ÀÖÀ¸¸ç À̵éÀº ¹«½ÃµÈ´Ù. ±×¸®°í ¶óÀÎÀÇ ³¡¿¡
°ø¹éµéÀ̳ª ÅǵéÀÌ ¿Ã ¼ö ÀÖ´Ù. `#'·Î ½ÃÀÛÇÏ´Â ÁÖ¼®Àº ¶óÀÎÀÇ ³¡¿¡
³ªÅ¸³¯ ¼ö ÀÖ´Ù.
Á¶°ÇÀº makefileÀÇ ¾î¶² ¶óÀεéÀ» make
°¡ »ç¿ëÇÒ °ÍÀΰ¡¿¡ ¿µÇâÀ»
¹ÌÄ£´Ù. Á¶°ÇÀÌ ÂüÀ̸é, make
´Â text-if-true ¶óÀεéÀ»
makefileÀÇ ÀϺηΠÀд´Ù; Á¶°ÇÀÌ °ÅÁþÀ̸é make
´Â ÀÌ·± ¶óÀεéÀ»
¿ÏÀüÈ÷ ¹«½ÃÇÑ´Ù. ±ÔÄ¢°ú °°Àº makefileÀÇ ¹®¹ý À¯´ÖµéÀÌ Á¶°ÇÀÇ
³¡À̳ª óÀ½¿¡ °ÉÃÄ ¾ÈÀüÇÏ°Ô ÂÉ°³Áú ¼ö ÀÖ´Ù.
make
´Â ±×°ÍÀÌ makefileÀ» ÀÐÀ» ¶§ Á¶°ÇµéÀ» Æò°¡ÇÑ´Ù. °á°úÀûÀ¸·Î
Á¶°ÇÀÇ Å×½ºÆ® ¾È¿¡¼ ÀÚµ¿ º¯¼öµéÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ¿Ö³Ä¸é ±×µéÀº
¸í·ÉµéÀÌ ½ÇÇàµÇ±â Àü¿¡´Â Á¤ÀǵÇÁö ¾Ê±â ¶§¹®ÀÌ´Ù
(see section ÀÚµ¿ º¯¼öµé(Automatic Variables)).
ÂüÀ»¼ö ¾ø´Â È¥µ¿À» ¸·±â À§Çؼ ÇϳªÀÇ makefile¾È¿¡¼ Á¶°ÇÀ» ½ÃÀÛÇÏ°í
´Ù¸¥ makefile ¾È¿¡¼ ³¡³»Áö´Â °ÍÀº Çã¿ëµÇÁö ¾Ê´Â´Ù. ±×·¯³ª,
include
Áö½Ã¾î¸¦ Á¶°Ç ¾È¿¡ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ´Ü ±× includeµÈ ÆÄÀÏ
¾È¿¡¼ ±× Á¶°ÇÀ» Á¾·áÇÏ·Á°í ½ÃµµÇÏÁö ¾Ê´Â´Ù¸é ¸»ÀÌ´Ù.
`-t'¿Í °°Àº make
¸í·É Ç÷¡±×µéÀ», º¯¼ö MAKEFLAGS
°ú
findstring
ÇÔ¼ö (see section ¹®ÀÚ ´ëÀÔ°ú ºÐ¼®À» À§ÇÑ ÇÔ¼öµé(Functions for String Substitution and Analysis)) ¸¦ »ç¿ëÇÔÀ¸·Î½á, °Ë»çÇÏ´Â Á¶°ÇÀ» ÀÛ¼ºÇÒ ¼ö
ÀÖ´Ù. ÀÌ°ÍÀº touch
°¡ ÆÄÀÏÀÌ ¾÷µ¥ÀÌÆ®µÈ °ÍÀ¸·Î ¸¸µé±â¿¡ ÃæºÐÇÏÁö
¾ÊÀ» ¶§ À¯¿ëÇÏ´Ù.
findstring
ÇÔ¼ö´Â ÇÑ ¹®ÀÚ¿ÀÌ ´Ù¸¥ °ÍÀÇ ºÎºÐ¹®ÀÚ¿·Î ³ªÅ¸³
°ÍÀΰ¡ ¾Æ´Ñ°¡¸¦ °áÁ¤ÇÑ´Ù. `=t' Ç÷¡±×¸¦ Å×½ºÆ®ÇÏ°íÀÚ ÇÑ´Ù¸é
`t'¸¦ ù¹ø° ¹®ÀÚ¿·Î, MAKEFLAGS
¸¦ ´Ù¸¥ ¹®ÀÚ¿·Î »ç¿ëÇÑ´Ù.
¿¹¸¦ µé¾î¼ ´ÙÀ½Àº ¾ÆÄ«À̺ê ÆÄÀÏÀÌ °»½ÅµÈ °ÍÀ¸·Î Ç¥½ÃÇÏ´Â °ÍÀ» ³¡³»µµ·Ï Çϱâ À§Çؼ, `ranlib -t'¸¦ »ç¿ëÇؼ Á¤¸®ÇÏ´Â ¹æ¹ýÀÌ´Ù:
archive.a: ... ifneq (,$(findstring t,$(MAKEFLAGS))) +touch archive.a +ranlib -t archive.a else ranlib archive.a endif
`+' ÇÁ¸®ÇȽº´Â ÀÌ·± ¸í·É ¶óÀεéÀÌ "Àç±ÍÀû" ÀÌ¾î¼ ±×µéÀÌ
`-t' Ç÷¡±×¿¡µµ ºÒ±¸ÇÏ°í ½ÇÇàµÉ °ÍÀ̶ó´Â °ÍÀ» Ç¥½ÃÇÑ´Ù.
See section make
ÀÇ Àç±ÍÀû »ç¿ë(Recursive Use of make
).
Go to the first, previous, next, last section, table of contents.