°¡²û ºñ±³Àû Å« m4
ÀÀ¿ë ½ºÅ©¸³Æ®µéÀº ¼ö¹é °³ÀÇ Á¤ÀÇ¿Í ±× ¿ÜÀÇ ¿À·¡
°É¸®´Â Ãʱâȸ¦ Æ÷ÇÔÇÏ´Â °øÅëÀûÀÎ ±â¹Ý À§¿¡ ÀÛ¼ºµÇ¾î ÀÖÀ» ¼ö ÀÖ´Ù. º¸Åë,
°øÅëÀûÀÎ ±â¹ÝÀº ÇÑ °³ ¶Ç´Â ¿©·¯ °³ÀÇ ¼±¾ð À§ÁÖÀÇ ÆÄÀϵ鿡 µû·Î ¸ð¾ÆµÐ´Ù.
ÀÌ·± ÆÄÀϵéÀº °¢°¢ÀÇ m4
ºÒ·¯³»±â¿¡¼ »ç¿ëÀÚÀÇ ÀÔ·Â ÆÄÀϺ¸´Ù ¸ÕÀú
³ª¿µÇµç°¡, ¾Æ´Ï¸é ÀÌ ÀÔ·Â ÆÄÀÏ(¿ªÀÚÁÖ: »ç¿ëÀÚÀÇ ÀÔ·Â ÆÄÀÏ)·ÎºÎÅÍ
include
µÈ´Ù.
Å« ÀÀ¿ë ½ºÅ©¸³Æ®¿¡¼ÀÇ °øÅëÀûÀÎ ±â¹ÝÀ» Àд °ÍÀ» ¸Å¹ø °è¼ÓÇؼ ¹Ýº¹ÇÑ´Ù¸é
±×°ÍÀº ½Ã°£ÀÇ ³¶ºñÀÏ ¼ö ÀÖ´Ù. GNU m4
´Â ±æ´Ù¶õ °øÅë ±â¹ÝÀ» »ç¿ëÇÏ´Â
ÀÀ¿ë ½ºÅ©¸³Æ®ÀÇ ½ÃÀÛ ¼ÓµµÀÇ Çâ»óÀ» ²ÒÇÏ´Â ¸î °¡ÁöÀÇ ÀåÄ¡¸¦ Á¦°øÇÑ´Ù.
»ç¿ëÀÚ°¡ ´ÙÀ½°ú °°ÀÌ ¹Ýº¹ÀûÀ¸·Î »ç¿ëÇÑ´Ù°í °¡Á¤Çغ¸ÀÚ.
m4 base.m4 input.m4
`base.m4'¿¡´Â °íÁ¤ÀûÀÎ ³»¿ëÀÌ ´ã°Ü ÀÖ°í, `input.m4'¿¡´Â °¡º¯ÀûÀÎ ³»¿ëÀÌ ´ã°Ü ÀÖ´Ù°í ÇÏÀÚ. ±×·¯¸é, »ç¿ëÀÚ´Â ¾Æ±î¿Í´Â ´Þ¸® ´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÒ ¼öµµ ÀÖ´Ù.
m4 -F base.m4f base.m4
óÀ½ ÇÑ ¹øÀº À§¿Í °°ÀÌ ½ÇÇà½ÃÅ°°í, ÀÌÈÄ¿¡´Â
m4 -R base.m4f input.m4
ÀÌ·¸°Ô °¡º¯ÀûÀÎ ÀÔ·ÂÀ¸·Î ½ÇÇà½ÃŲ´Ù. -F
¿É¼ÇÀÌ ÀÖ´Â, óÀ½ È£Ãâ¿¡¼´Â
´ÜÁö `base.m4'¸¸À» ÀÐ°í ½ÇÇà½ÃÄѼ, ´Ù¾çÇÑ ÀÀ¿ë ¸ÅÅ©·ÎµéÀ» Á¤ÀÇÇϰųª
´Ù¸¥ ÃʱâÈ °è»êÀ» ÇÑ´Ù. ´ÜÁö ÇÑ ¹ø¸¸ `base.m4'°¡ ¿ÏÀüÇÏ°Ô Ã³¸®µÇ°í,
GNU m4
´Â `base.m4f'¶ó´Â À̸§À» °¡Áø frozen ÆÄÀÏÀ»
»ý¼ºÇϴµ¥, ÀÌ°ÍÀº m4
ÀÇ ³»ºÎÀûÀÎ »óŸ¦ ´ãÀº ÀÏÁ¾ÀÇ ½º³À¼¦(snapshot)À»
Æ÷ÇÔÇÏ°í ÀÖ´Ù.
-R
¿É¼ÇÀÌ ÀÖ´Â, ±× ´ÙÀ½ È£ÃâµéÀº ´Ù¸¥ ¾î¶² ÆÄÀϵ麸´Ù ¸ÕÀú,
`base.m4f'·ÎºÎÅÍ m4
ÀÇ ¸Þ¸ð¸® ³»ºÎ »óŸ¦ ´Ù½Ã ÀûÀç(load)ÇÒ ¼ö ÀÖ´Ù.
ÀÌ·± ¼ö´ÜÀ¸·Î, °æÇè ¾ø´Â (¿ªÀÚÁÖ: ¿ø¹®Àº virginÀÓ) m4
º¹»çº»À¸·Î
½ÃÀÛÇÏ´Â °Í°ú´Â ´Þ¸®, ¿¹Àü¿¡ ½ÇÇàµÈ È¿°ú¸¦ º¹±¸ÇÑ ÈÄ¿¡ ÀÔ·ÂÀ» ÀÐ¾î µéÀÌ°Ô µÈ´Ù.
¿ì¸®ÀÇ ¿¹¿¡¼´Â, ±× È¿°ú´Â ¸¶Ä¡ `base.m4'¸¦ óÀ½ºÎÅÍ ´Ù½Ã ÀоîµéÀÎ °Í°ú
µ¿ÀÏÇÏ´Ù. ±×·¯³ª ±× È¿°ú°¡ ÈξÀ ´õ ºü¸£°Ô ´Þ¼ºµÈ´Ù.
ÇѹøÀÇ m4
½ÇÇà¿¡¼´Â µü Çϳª¸¸ÀÇ frozen ÆÄÀÏÀ» ¸¸µé°Å³ª ÀоîµéÀÏ
¼ö ÀÖ´Ù. µÎ °³ÀÇ frozen ÆÄÀÏÀ» ÇѲ¨¹ø¿¡ ó¸®ÇÏ´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù.
¾î·µç, -R
°ú -F
¿É¼ÇÀ» µ¿½Ã¿¡ »ç¿ëÇÏ¿© @frozen ÆÄÀϵéÀÌ
Á¡ÁøÀûÀ¸·Î(incrementally) °»½ÅµÉ ¼ö ÀÖ´Ù. ¿¹¸¦ µç´Ù¸é, ¾à°£¸¸ ½Å°æÀ» ¾´´Ù¸é,
´ÙÀ½ÀÇ ¸í·ÉÀº
m4 file1.m4 file2.m4 file3.m4 file4.m4
´ÙÀ½°ú °°Àº ¼øÂ÷ÀûÀÎ ¸í·Éµé·Î ÂÉ°³Áú ¼ö ÀÖÀ¸¸ç, °°Àº Ãâ·ÂÀ» ½×°Ô µÈ´Ù.
m4 -F file1.m4f file1.m4 m4 -R file1.m4f -F file2.m4f file2.m4 m4 -R file2.m4f -F file3.m4f file3.m4 m4 -R file3.m4f file4.m4
¾à°£ ÁÖÀÇ°¡ ÇÊ¿äÇѵ¥, ±× ÀÌÀ¯´Â ¸ðµç °æ¿ì¿¡ ÀÌ°ÍÀÌ Á¦´ë·Î ÀÛµ¿Çϵµ·Ï ÇÒ ¸ðµç
³ë·ÂÀ» ¾ÆÁ÷ ±â¿ïÀÌÁö ¾ÊÀº »óÅÂÀ̱⠶§¹®ÀÌ´Ù. ƯÈ÷, ¸ÅÅ©·ÎÀÇ ÃßÀû(trace)
¼Ó¼ºÀº 󸮵ÇÁö ¾ÊÀ¸¸ç, °Ô´Ù°¡ changeword
ÀÇ ÇöÀç ¼³Á¤µµ ¸¶Âù°¡ÁöÀÌ´Ù.
¶ÇÇÑ ÇÑ ¹øÀÇ È£Ãâ¿¡¼ »ç¿ëµÈ m4
ÀÇ ¾î¶² ¿É¼ÇÀÌ ±× ´ÙÀ½¿¡´Â »ç¿ëµÇÁö ¾ÊÀ»
¶§ÀÇ »óÈ£ÀÛ¿ëÀº ¾ÆÁ÷ ¿ÏÀüÈ÷ ºÐ¼®µÇÁö ¾Ê¾Ò´Ù. ¹Ý¸é¿¡, pushdef
µÈ Á¤ÀǵéÀÇ
½ºÅõéÀÌ ¿Ã¹Ù¸£°Ô ó¸®µÉ °ÍÀº È®½ÇÇϸç, ¶ÇÇÑ undefine
µÇ°Å³ª À̸§ º¯°æµÈ
³»Àå-¸ÅÅ©·Îµé, º¯°æµÈ ÀοëºÎÈ£¿ë ¹®ÀÚ¿°ú º¯°æµÈ ÁÖ¼®Ç¥½Ã¿ë ¹®ÀÚ¿µµ
¸¶Âù°¡ÁöÀÌ´Ù.
m4
°¡ ³Ãµ¿µÉ ¶§(¿ªÀÚÁÖ: ¹®¸Æ¿¡ ¸Â°Ô ÀÇ¿ªÇϸé, `frozen ÆÄÀÏÀ»
¸¸µé ¶§'ÀÓ), ½ÇÇàÀÇ ³¡¿¡¼ ÀϾ´Â ÀÚµ¿ÀûÀÎ Àüȯ-µÇµ¹¸®±â(undiversion)´Â
¾ïÁ¦µÈ´Ù. ´ë½Å¿¡, ¾ç¼ö°ªÀÎ ¹øÈ£°¡ ºÙ¿©Áø ¸ðµç ÀüȯµéÀº frozen ÆÄÀÏ ³»ºÎ·Î
ÀúÀåµÈ´Ù. È°¼º »óÅÂÀÎ ÇöÀç Àüȯ ¹øÈ£µµ ¿ª½Ã µé¾î°£´Ù.
´Ù½Ã ÀûÀç(reload)ÇÒ frozen ÆÄÀÏÀÌ ²À ÇöÀç ÀÛ¾÷ µð·ºÅ丮¿¡ ÀÖ¾î¾ß ÇÒ ÇÊ¿ä´Â
¾ø´Ù. include
ÆÄÀÏ°ú ¶È°°Àº ¹æ¹ýÀ¸·Î °Ë»öµÈ´Ù. (see section »ðÀÔÇÒ ÆÄÀÏ °Ë»öÇϱâ)
frozen ÆÄÀÏÀº ¼·Î ´Ù¸¥ ¾ÆÅ°ÅØó »çÀÌ¿¡¼ °øÀ¯°¡ °¡´ÉÇÏ´Ù. ÇϳªÀÇ ±â°è¿¡¼
frozen ÆÄÀÏÀ» ÀÛ¼ºÇÑ ÈÄ, °°°Å³ª ¾Æ´Ï¸é ´õ »õ·Î¿î ¹öÀüÀÇ GNU m4
¸¦
»ç¿ëÇÏ´Â ´Ù¸¥ ±â°è¿¡¼ ÀоîµéÀÌ´Â °ÍÀº ¾ÈÀüÇÏ´Ù. frozen ÆÄÀÏÀº ´Ü¼øÇÑ (ÆíÁý
°¡´ÉÇÑ) ÅؽºÆ® ÆÄÀÏÀ̸ç, ¿©·¯ °³ÀÇ Áö½ÃÀÚ·Î ±¸¼ºµÇ¾î ÀÖ´Ù. °¢°¢ÀÇ ½ÃÀÛÀº
´ë¹®ÀÚ·Î µÇ¾î ÀÖÀ¸¸ç ÁÙ¹Ù²Þ ¹®ÀÚ(NL)·Î ³¡³´Ù. Áö½ÃÀÚ°¡ ±â´ëµÇ´Â °÷
¾îµð¼³ª # ¹®ÀÚ´Â ÁÖ¼®À» ¸¸µç´Ù. ºó ÁÙ ¶ÇÇÑ ¹«½ÃµÈ´Ù. ¾Æ·¡ÀÇ ¼³¸í¿¡¼
¾ðÁ¦³ª, length´Â ´ëÀÀÇÏ´Â stringÀÇ ±æÀ̸¦ °¡¸®Å²´Ù. ¼ýÀÚ´Â ¾ðÁ¦³ª
10Áø¼ö·Î Ç¥½ÃµÈ´Ù. Áö½ÃÀÚµéÀº ´ÙÀ½°ú °°´Ù.
V number NL
C length1 , length2 NL string1 string2 NL
Q length1 , length2 NL string1 string2 NL
F length1 , length2 NL string1 string2 NL
pushdef
¸¦ »ç¿ëÇÏ¿©, ³»Àå ¸ÅÅ©·Î ¿ø·¡ ¸íĪÀÌ
string2ÀÎ ±â´ÉÀ¸·Î È®ÀåÇÏ¿© Á¤ÀÇÇÑ´Ù.
T length1 , length2 NL string1 string2 NL
pushdef
¸¦ »ç¿ëÇÏ¿©, string2·Î ÁÖ¾îÁø
ÅؽºÆ®·Î È®ÀåÇÏ¿© Á¤ÀÇÇÑ´Ù.
D number, length NL string NL
Go to the first, previous, next, last section, table of contents.