Chapter 21. »õ·Î¿î Ä¿³Î ¼³Á¤ ¿É¼Ç Ãß°¡Çϱâ

Table of Contents
21.1. ±×·³, Ä¿³Î ¿É¼ÇÀ̶õ ¹«¾ùÀϱî¿ä?
21.2. ±×·³ ÀÌÁ¦ ¾î¶°ÇÑ ÀÏÀ» ÇØ¾ß ÇÒ±î¿ä?

Jörg Wunsch ÀÛ¼º

À忬¿í ¹ø¿ª

Note: ÀÌ ÀåÀ» Àбâ Àü¿¡ Ä¿³Î ¼³Á¤¿¡ ´ëÇؼ­ Àͼ÷ÇØ ÀÖ¾î¾ß ÇÕ´Ï´Ù.

21.1. ±×·³, Ä¿³Î ¿É¼ÇÀ̶õ ¹«¾ùÀϱî¿ä?

Ä¿³Î ¿É¼ÇÀÇ ±âº»ÀûÀÎ »ç¿ë¿¡ ´ëÇؼ­´ÂÄ¿³Î ¼³Á¤Àå¿¡¼­ ±â¼úÇÏ°í ÀÖ½À´Ï´Ù. ¶ÇÇÑ, ±× Àå¿¡¼­´Â "±âÁ¸ÀÇ" ¿É¼Ç°ú "»õ·Î¿î ½ºÅ¸ÀÏÀÇ" ¿É¼Ç¿¡ ´ëÇؼ­µµ ±â¼úÇÏ°í ÀÖ½À´Ï´Ù. ±Ã±ØÀûÀ¸·Î´Â Ä¿³Î¿¡¼­ Áö¿øµÇ´Â ¸ðµç ¿É¼ÇÀ» »õ·Î¿î ½ºÅ¸ÀÏ·Î ¹Ù²Ù¾î¼­ »ç¿ëÀÚµéÀÌ config(8) À» ½ÇÇà½ÃÅ°°í Ä¿³Î µð·ºÅ丮¿¡¼­ make depend ¸í·ÉÀ» ½ÇÇà½ÃÄ×À» ¶§ Ä¿³Î »ý¼º ÀÛ¾÷¿¡¼­ ÀÚµ¿ÀûÀ¸·Î º¯°æµÈ »çÇ׸¸À» °ñ¶ó³»°í ÇÊ¿äÇÑ ÆÄÀϸ¸À» ÄÄÆÄÀÏÇϵµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù.Áö±Ý°ú °°ÀÌ ¸Å¹ø config(8) À» ¼öÇàÇÒ ¶§¸¶´Ù ±âÁ¸ÀÇ ÄÄÆÄÀÏ µð·ºÅ丮¸¦ »èÁ¦ÇÏ´Â ÀÛ¾÷Àº ÀÌÁ¦(´Ù½Ã?) ¾ø¾îÁú ¼öµµ ÀÖ½À´Ï´Ù.

±âº»ÀûÀ¸·Î Ä¿³Î ¿É¼ÇÀ̶ó´Â °ÍÀº Ä¿³ÎÀ» ÄÄÆÄÀÏÇÏ´Â °úÁ¤¿¡ ÇÊ¿äÇÑ C Àü󸮱⠸ÅÅ©·Î¸¦ Á¤ÀÇÇÏ´Â °Í¿¡ ºÒ°úÇÕ´Ï´Ù. ºôµå¸¦ ÁøÁ¤ ¼±ÅÃÀûÀ¸·Î ¸¸µé±â À§Çؼ­´Â ´ëÀÀµÇ´Â Ä¿³ÎÀÇ ¼Ò½º ºÎºÐ ( ¶Ç´Â Ä¿³ÎÀÇ .h )ÀÌ ¿É¼ÇÀ̶ó´Â °³³äÀ¸·Î ´Ù½Ã ÀÛ¼ºµÇ¾î¾ß ÇÕ´Ï´Ù. ´Ù½Ã ¸»ÇÏÀÚ¸é, ¼³Á¤ ¿É¼Ç¿¡ ±âº»°ªÀÌ ÁßøµÉ ¼ö ÀÖ¾î¾ß ÇÏ´Â °ÍÀ̶ó ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ´Â ´ÙÀ½°ú °°ÀÌ ÁöÁ¤µÉ ¼ö ÀÖ°ÚÁÒ.

    #ifndef THIS_OPTION
    #define THIS_OPTION (¾î¶² ±âº»°ª(default value))
    #endif /* THIS_OPTION */

ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î ÀÚ½ÅÀÇ ¼³Á¤ ÆÄÀÏ ³»¿¡ ÀÖ´Â ¿É¼Ç¿¡ »õ·Î¿î °ªÀ» ºÎ¿©ÇÏ°íÀÚ ÇÏ´Â °ü¸®ÀÚ´Â ±âº»°ªÀÌ ¹ÌÄ¡´Â ¿µÇâÀ» ¾ø¾Ö°í, »õ·Î¿î °ªÀ» ºÎ¿©ÇÏ°Ô µË´Ï´Ù. Àü󸮱Ⱑ ¼öÇàµÇ¸é¼­ ¼Ò½º´Â »õ·Î¿î °ªÀ¸·Î ´ëüµË´Ï´Ù. ±×·¯¹Ç·Î ±×°ÍÀº ±âº»°ªÀÌ ¾î¶°ÇÑ °ÍÀ̾úµçÁö °£¿¡ À¯È¿ÇÑ(valid) C ±¸¹®À̾î¾ß ÇÕ´Ï´Ù. .

¶ÇÇÑ Äڵ带 ´ÙÀ½°ú °°Àº ºí·° ³»¿¡ À§Ä¡½ÃÅ´À¸·Î½á ´Ü¼øÈ÷ ÄÑ°í ²ô±â¸¸ ÇÏ´Â ¿É¼ÇÀ» ¸¸µé¾î ³¾ ¼öµµ ÀÖ½À´Ï´Ù.

    #ifdef THAT_OPTION
    
    [¿©±â¿¡ ¿©·¯ºÐÀÇ Äڵ尡 µé¾î°©´Ï´Ù.]
    
    #endif

´Ü¼øÈ÷ THAT_OPTION À» ¼³Á¤ ÆÄÀÏ¿¡ ¼±¾ðÇÔÀ¸·Î½á(¾î¶² °ªÀ» ÁöÁ¤ÇϵçÁö, ¾Æ´Ï¸é ¾Æ¹« °ªµµ ÁöÁ¤ÇÏÁö ¾ÊµçÁö °£¿¡) ÇØ´ç ºÎºÐÀÇ Äڵ带 Æ÷ÇѽÃųÁö ¿©ºÎ¸¦ °áÁ¤ÇÏ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.

¸¸¾à ¿©·¯ºÐÀÌ C ¾ð¾î¿¡ Àͼ÷ÇÏ´Ù¸é, ÂüÁ¶ÇÏ´Â ÇϳªÀÇ #ifdef¸¸ À־ ¹Ù·Î "¼³Á¤ ¿É¼Ç"À¸·Î ÀνÄÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸, ¸¹Àº »ç¶÷µéÀº ¼³Á¤ ÆÄÀÏ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ°í

    options		notyet,notdef

¿Ö °è¼Ó Ä¿³Î ÄÄÆÄÀÏ¿¡ ½ÇÆÐÇÏ´ÂÁö ÀǾÆÇØ ÇÒ ÀÏÀº ¾ø°ÚÁö¿ä :-)

È®½ÇÈ÷, ¿É¼Ç¿¡ ´ëÇؼ­ ÀÓÀÇÀÇ À̸§À» »ç¿ëÇϸé, Ä¿³Î ¼Ò½º Æ®¸® ³»¿¡¼­ ±× À̸§µéÀ» ã¾Æ³»±â´Â ¾î·Á¿öÁý´Ï´Ù. »õ·Î¿î ½ºÅ¸ÀÏ ¿¡¼­ÀÇ ±Ùº» ³í¸®´Â °¢ ¿É¼ÇÀÌ Ä¿³Î ÄÄÆÄÀÏ µð·ºÅ丮 ³»¿¡ ÀÖ´Â °¢°¢ÀÇ ºÐ¸®µÈ .h ³»¿¡ µé¾î°¡°Ô µÈ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °¢°¢ÀÇ ÆÄÀÏÀº opt_foo.h°ú °°ÀÌ ¸í¸íµË´Ï´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á Åë»óÀûÀÎ Makefile¿¡ ´ëÇÑ ÀÇÁ¸¼ºÀÌ Àû¿ëµÉ ¼ö ÀÖÀ¸¸ç, make¸í·ÉÀº Çѹø º¯°æµÈ ¿É¼Ç¿¡ ´ëÇؼ­ ¾î¶² °ÍµéÀÌ »õ·Î ÄÄÆÄÀϵǾî¾ß ÇÏ´ÂÁö¸¦ ÆľÇÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.

ÀÌÀü ½ºÅ¸ÀÏÀÇ ¿É¼Ç ±¸Á¶´Â »¡¸® »ç¶óÁö°Ô µÉ ·ÎÄà ¿É¼ÇÀ̳ª ½ÇÇèÀûÀÎ ¿É¼Ç¿¡ ´ëÇؼ­´Â ÇÑ°¡Áö ÀåÁ¡À» °¡Áö°í ÀÖ½À´Ï´Ù. Ä¿³Î ¼Ò½º¿¡ #ifdef¸¸ Ãß°¡ÇÏ¸é ½±°Ô Ãß°¡ÇÒ ¼ö ÀÖÀ¸¸ç, ÀÌ¹Ì Ä¿³Î ¼³Á¤ ¿É¼ÇÀ¸·Î ¸¸µé¾îÁö±â ¶§¹®ÀÔ´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, ±× ¿É¼ÇÀ» »ç¿ëÇÏ°íÀÚ ÇÏ´Â °ü¸®ÀÚ´Â ±× ¿É¼Ç¿¡ ´ëÇÑ ¾Ï¹¬ÀûÀÎ »ç½Çµé¿¡ ´ëÇÑ Áö½ÄÀ» °¡Áö°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. (±×¸®°í ¾Æ¸¶µµ ±× ÀÚ½ÅÀÇ Ä¿³Î ³»¿¡¼­ ¾î¶² ºÎºÐÀ» Á÷Á¢ ÀçÄÄÆÄÀÏÇØ ÁÖ¾î¾ß ÇÒ °ÍÀÔ´Ï´Ù. ) ÀÏ´Ü Áö¿øµÇ´Â ¸ðµç ¿É¼Ç¿¡ ´ëÇÑ ÁöÁ¤ ÀÛ¾÷ÀÌ ³¡³ª¸é, config(8)´Â Áö¿øµÇÁö ¾Ê´Â ¿É¼ÇÀ» ¼±ÅÃÇÏ¿´´Ù°í °æ°í¸¦ º¸³¾ °ÍÀÔ´Ï´Ù. ±×·¸Áö¸¸, Ä¿³ÎÀÇ Makefile¿¡´Â ±× ¿É¼ÇÀÌ ÁöÁ¤µÉ °ÍÀÔ´Ï´Ù.