Dev Workshop
º» ¹®¼ÀÇ ¹èÆ÷¸¦ ±ÝÇÕ´Ï´Ù. ¹èÆ÷¸¦ ±ÝÇÏ´Â ÀÌÀ¯´Â ¾ÆÁ÷ ¿Ï¼ºµÇÁö ¾Ê¾Ò±â ¶§¹®À̸ç, ¹èÆ÷¼öÁØÀ¸·Î ¿Ï¼ºÀÌ µÇ¸é,
¹®¼ ¶óÀ̼¾½º¸¦ ÀçÁ¤¸®ÇÏ¿© °øÁöÇÏ°Ú½À´Ï´Ù. ÇöÀç´Â º» »çÀÌÆ®¿¡¼ ¿¶÷¸¸ °¡´ÉÇÕ´Ï´Ù.
1.1. Àåºñ ¶
1.2. ¼ÒÇÁÆ® ¿þ¾î ¶
1.2.1. indent ¶GNU Tool·Î¼ http://www.gnu.org/software/indent/indent.html ¿¡¼ ±¸ÇÕ´Ï´Ù.
°¡Àå °£´ÜÇÑ indent ´Â ¼Ò½º¸¦ .indent.pro ¶ó´Â ¿É¼Ç ÆÄÀÏ ¼³Á¤¿¡ µû¶ó µé¿©¾²±â¸¦ ¹Ù²ãÁÖ´Â ÀÏÀ» ÇÕ´Ï´Ù.
óÀ½¿¡´Â ¿©°£ ¿É¼ÇµéÀ» ã±â°¡ Èûµé¸ç, ÆÀÀÌ ¿øÇÏ´Â ¸ðµç ±â´ÉÀ» Áö¿øÇÏÁö ¾ÊÀ» ¼ö µµ ÀÖ½À´Ï´Ù.
°á°ú¹°ÀÌ ¶Ç ¾î»öÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ¾à°£ÀÇ ¼ÕÁúÀ» Çؼ¶óµµ Á¶±Ý Àͼ÷ÇØÁö¸é, ¾ø´Â °Íº¸´Ù ÈξÀ ¼Ò½ºÀÇ ÅëÀÏ°¨À»
ÁÝ´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº CVSROOTÀÇ commitinfo¿¡¼ ¿¬µ¿ÇÏ¿© cvs¿¡ ¼Ò½º¸¦ ÀúÀåÇÒ ¶§ °Á¦·Î µé¿©¾²±â¸¦ ÅëÀÏ ÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù.
1.2.2. doxygen ¶http://www.stack.nl/~dimitri/doxygen/ ¿¡¼ ±¸ÇÕ´Ï´Ù.
°³¹ßÀÚÁß¿¡ ÁÖ¼® °ü¸® ´ã´çÀÚ¸¦ ÇÑ ¸í ¼±Á¤Çϵµ·ÏÇÏ¿© doxygenÀ» ÀÍÈ÷µµ·ÏÇÏ°í, ÀÌ »ç¶÷Àº ³ªÁß¿¡ ÃÖÁ¾ ¹®¼ »êÃâ¹°À»
°ü¸®ÇÏ´Â ¿ªÇÒÀ» ÇÏ¸ç ´Ù¸¥ »ç¶÷µé¿¡°Ô ±³À°À» ÇÏ¿© ÁÖ¼®À» Àß ´Þ ¼ö ÀÖµµ·Ï °í¹®°ü¿ªÇÒÀ» ¸Ã±é´Ï´Ù. ´Ù¸¥ °³¹ßÀÚµéÀº
doxygenÀÇ ÁÖ¼® ±ÔÄ¢À» ÀÍÈ÷µµ·Ï ÇؾßÇÕ´Ï´Ù. doxygenÀÌ º»ÀÎÀÌ ÀÌ¿ëÇØ º» °ø°³ Åø Áß¿¡¼´Â °¡Àå ³ªÀº Ãâ·ÂÀ» º¸¿©Áá½À´Ï´Ù.
¼Ò½º ÁÖ¼®Àº ÆÀ¿¡¼ Á¤ÇÏ´Â °Íµµ ÁÁÁö¸¸, doxygenÀÌ ¾Ë¾Æ µéÀ» ¼ö ÀÖµµ·Ï ´Ù´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
doxygenÀÇ ±Ô¾à¿¡ ¸ÂÃßµµ·ÏÇϽʽÿÀ. ±×·¯¸é, ³ªÁß¿¡ Æí¸®ÇÑ API ¹®¼¸¦ ¾òÀ» ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
1.2.3. cvs ¶http://www.cvshome.org/ ¿¡¼ ±¸ÇÕ´Ï´Ù.
cvs´Â óÀ½ °³³äÀÌ ¾î·Á¿öµµ ¹®¼°¡ ¸¹ÀÌ ÀÖÀ¸¹Ç·Î ÀÏ´Ü µû¶ó ¼³Ä¡Çغ¾´Ï´Ù. cvs Á¢¼ÓÀÌ firewall ¾È¿¡¼ switching hub¿¡ ¹°·Á
ÀÛ¾÷ÇÏ´Â ±×·ìÀ̶ó¸é ±»ÀÌ ext ¸ðµâ·Î ssh ¸¦ »ç¿ëÇÏÁö ¾Ê¾Æµµ ¹«¹æÇÕ´Ï´Ù. pserver´Â °£°áÇÏ¸ç ³ª¸§´ë·Î ºü¸¥ ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.
1.2.4. viewcvs ¶http://viewcvs.sourceforge.net/ ¿¡¼ ±¸ÇÕ´Ï´Ù.
ÇÊÀÚ´Â cvsweb º¸´Ù python±â¹ÝÀÇ viewcvs¸¦ ¼±È£Çϴµ¥, ±×°ÍÀº viewcvs¿¡ ÀÖ´Â enscript¿Í cvsgraph ¶ó´Â µÎ°¡Áö È®ÀåÀ» ÅëÇؼ
syntax coloring, revision tree ¸¦ º¸¿©Áֱ⠶§¹®ÀÔ´Ï´Ù. ÀÌ·± cvs viewer¸¦ ¼³Ä¡ÇÏ¿© °øµ¿ÀÛ¾÷ÇÏ´Â °æ¿ì´Â ¸¹Àº È®À强À» °¡Á®´ÙÁÝ´Ï´Ù.
1.2.5. cvsreport ¶http://cvs.kldp.net/viewcvs/hserver/CVSROOT/cvsreport ¿¡¼ ±¸ÇÕ´Ï´Ù.
cvs log¸¦ ¸ÞÀÏ·Î ¾Ë·ÁÁÖ´Â ±â´ÉÀ» Çϴµ¥, ¹Ù²î´Â ¼Ò½ºÀÇ viewcvs·Î ¿¬µ¿ÇÏ¿© diff URLÀ» º¸³»ÁÝ´Ï´Ù.
ÀÌ°ÍÀº °ü¸®ÀÚ·Î ÇÏ¿©±Ý ´ëÃæÀ̳ª¸¶ º¯°æ³»¿ëÀ» ¾Ë ¼ö ÀÖµµ·Ï µµ¿ÍÁÝ´Ï´Ù.
1.2.6. autotools ¶automake °¡ °¡Á®´Ù ÁÖ´Â make frameworkÀ» ÀÌÇØÇؾßÇÕ´Ï´Ù. automake ´Â
¿©±â±îÁö ÁغñÇϴµ¥ µé¾î°¡´Â ½Ã°£ ¾à 2~3ÀÏ ÀÔ´Ï´Ù.
2.1.1. ¼³Ä¡/»èÁ¦ ¶ÆÐÅ°Áö¸¦ ¸¸µé »ý°¢À̸é, rpm, ¼± package, HPUX depot µî¿¡¼ Á¦°øÇÏ´Â ¼³Ä¡ »èÁ¦¸¦ ÃßõÇÕ´Ï´Ù.
±×·¸Áö¸¸ °£´ÜÇÏ°Ô ÇÒ »ý°¢À̸é, make install ÀÌ Á¦°øÇÏ´Â °Íµµ ÇϳªÀÇ ¹æ¹ýÀ̸ç, ÀÌ´Â ¼Ò½º¸¦ ¼ö¹ÝÇϹǷÎ
°£´ÜÇÑ installer/uninstaller¸¦ ¸¸µé¾î µÎ´Â °ÍÀÌ ÁÁ½À´Ï´Ù. ¼³Ä¡/»èÁ¦ ÇÁ·Î±×·¥ÀÌ °¡Àå ¸ÕÀú ¸¸µé ¸ðµâÀÔ´Ï´Ù.
À̰ͺÎÅÍ ÇÏÁö ¾ÊÀ¸¸é ³ªÁß¿¡ µÎ ¹è·Î Èûµé °ÍÀÔ´Ï´Ù. ±× ÀÌÀ¯´Â °³¹ß°ú Å×½ºÆ®¸¦ ºÐ¸®ÇÏ´Â °úÁ¤¿¡¼
Å×½ºÅÍ¿¡°Ô Àü´ÞµÉ ¸ð½ÀÀÌ ¹ÙÀ̳ʸ® ´ÜÀ§·Î ³Ñ¾î°¡¸é Àý´ë ¾ÈµÇ´Â °ÍÀÌ°í, ÀνºÅ纻À¸·Î ³Ñ±â°í ÀνºÅ纻¿¡´ëÇÑ
Å×½ºÆ®°¡ ÀÌ·ç¾îÁ®¾ßÇϱ⠶§¹®ÀÔ´Ï´Ù.
¼³Ä¡ »èÁ¦¸¦ ½ºÅ©¸³Æ®·Î ¸¸µç´Ù¸é, ´ÙÀ½°ú °°Àº °ÍÀ» ÁغñÇϼ¼¿ä.
2.1.2. ·Î±× Æ÷¸Ë ¶´ÙÀ½À¸·Î Áß¿äÇÑ °ÍÀÌ ·Î±× Æ÷¸ËÀ» °áÁ¤ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â syslog¸¦ ¾µ ¼öµµ ÀÖ°í, ·Î±×ÆÄÀÏÀ» µÑ ¼öµµ ÀÖ½À´Ï´Ù.
¶ÇÇÑ ·Î±× ·¹º§À» µÑ ¼öµµ ÀÖ°í, ·Î±× º° ¾ÆÀ̵𸦠µÑ ¼öµµ ÀÖ½À´Ï´Ù. ¾î·µç ÀÌ ·Î±×¸¦ ³²±â´Â °øÅë API¸¦ ¸ÕÀú
¸¸µå½Ê½Ã¿À. ´ÙÀ½°ú °°Àº °ÍÀ¸·Î ¿ä¾àÇÒ ¼ö ÀÖ½À´Ï´Ù.
2.1.3. ±¸¼ºÈÀÏ Æ÷¸Ë ¶ÀϹÝÀûÀ¸·Î ±¸¼ºÈÀÏÀº ÀüÅëÀûÀ¸·Î Unix Çü½ÄÀ̶ó¸é Text ÆÄÀÏÀÔ´Ï´Ù. À©µµ¿ì¿¡´Â ini ÆÄÀÏÇüÅ°¡ ¾²ÀÌ´Ù°¡ ·¹Áö½ºÆ®¸®·Î ¹Ù²î¾úÁö¿ä.
ÀÌ Æ÷¸ËÀ» °øÅëÀ¸·Î µÎ¾î ¸¸µç´Ù¸é ¿©·¯ ¸ðµâ¿¡¼ »ç¿ëÇÒ °ÍÀÌ¸ç °³¹ßÆÀÀÇ ÀÚ»êÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù.
2.1.4. ¸í·ÉÇà Æļ ¶°¡Àå ÈçÈ÷ getopt¸¦ »ç¿ëÇÕ´Ï´Ù. À̸¦ ±â¹ÝÀ¸·Î ¸ðµç ¸ðµâÀÌ °øÅëÀûÀ¸·Î ó¸®ÇÒ ¼ö ÀÖ´Â ¿É¼Çµé¿¡ ´ëÇØ ±âº»ÀûÀ¸·Î ÆĽÌÇÏ¿© ó¸®ÇÒ ¼ö ÀÖ¾î¾ßÇÕ´Ï´Ù.
2.1.5. PID file ¶ÇÁ·Î¼¼½º ¾ÆÀ̵ð ÆÄÀÏÀ» °øÅëÀ¸·Î »ç¿ëÇÏ¿© ½ÇÇàÇÏ´Â µ¥¸óÀÌ ÀÚµ¿À¸·Î ±â·ÏÇÒ ¼ö ÀÖµµ·ÏÁö¿øÇÕ´Ï´Ù. ÀÌ´Â ÇöÀç ½ÇÇà ÁßÀÎ µ¥¸óÀÇ PID¸¦ ¾ò´Âµ¥ »ç¿ëµÇ´Â
ºñ¿ëÀ» ÁÙÀÌ°íÀÚ »ç¿ëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÇÁ·Î¼¼½º ½ÇÇà/Á¾·á/Àç½ÇÇà¿¡ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù.
¿©±â±îÁö°¡ ¸ðµç ÇÁ·ÎÁ§Æ®°¡ °øÅëÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Â ±âº»ÀûÀΠȯ°æÀÔ´Ï´Ù. ÀÌ¹Ì Á¤¸®µÇ¾î ÀÖ°í ÆÀÀÇ ¹®È·Î ¸¸µé¾î ÀÖ´Ù¸é, ´ÙÀ½ ÇÁ·ÎÁ§Æ®¸¦ ½ÃÀÛÇϴµ¥
µµ¿òÀÌ ¸¹ÀÌ µÉ °ÍÀÔ´Ï´Ù.
2.2. °³¹ß ÀýÂ÷ ¼Â¾÷ ¶ÀÌ ¹®¼¿¡¼ ´Ù·çÁö ¾Ê´Â °ÍÀº »êÃâ¹° ¸®½ºÆ®ÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, »ç¾ç¼, ¼³°è¼, DFD, ERD, API, UI Guide µîÀÔ´Ï´Ù. ±×·± ¹®¼µéÀº ÀûÀýÇÏ°Ô °ü¸®µÇ¾î¾ßÇÏ¸ç ¿ö³« °Á¶ÇϹǷΠµû·Î ´õ °Á¶ÇÏÁö ¾Ê½À´Ï´Ù.
2.2.1. Coding Rule ¶ÄÚµù ±ÔÄ¢Àº µÎ Á¾·ù·Î ³ª´¹´Ï´Ù. Çϳª´Â ÀÚµ¿À¸·Î ½ºÅ¸ÀÏÀ» ¹Ù²Ü ¼ö ÀÖ´Â °Í Çϳª´Â Èûµé¿© ÄÚµù°¡À̵带 µû¶ó¾ß¸¸ÇÏ´Â °ÍÀÔ´Ï´Ù. ÄÚµù ±ÔÄ¢Àº ³Ê¹«³ª °³ÀÎ ÀûÀÎ ¼ºÇâÀÌ °ÇÏ°Ô ³ªÅ¸³ª¹Ç·Î ÆÀÀÌ °³¹ß ÇÒ °æ¿ì¿¡ °É¸²µ¹ÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. ´ë°³ ÄÚµù °¡À̵å´Â
µîÀÇ Ä¿´Ù¶õ ÁÖÁ¦·Î ³ª´¹´Ï´Ù. ±×Áß¿¡¼ ÀÚµ¿È Çϰųª ±ÔÄ¢À» ¾î°å´ÂÁö¸¦ Å×½ºÆ®ÇÏ¿© °æ°í¸¦ ÁÙ ¼ö ¾ø´Ù¸é, ÄÚµå ¸®ºä¸¦ ÇϱâÀü±îÁö´Â ¾Ë ¼ö°¡ ¾ø½À´Ï´Ù. °ú°Å¿¡´Â ÄÚµù ±ÔÄ¢¸¸ Á¤Çسõ°í µû¸£Áö ¾Ê´Â °æ¿ì°¡ Çã´ÙÇß½À´Ï´Ù. ½À°ü°ú °ü°èµÇ¾ú±â ¶§¹®ÀÔ´Ï´Ù. ÇÏÁö¸¸ ¿äÁò¿¡´Â code beautifier°¡ ¸¹±â ¶§¹®¿¡ ¸¶À½´ë·Î ÀÛ¼ºÇÏ°í ÄÚµù ±ÔÄ¢¿¡ ¸Â´Â optionÀ» ¼±ÅÃÇÏ¿© code beautifier¸¦ µ¹·ÁÁÖ¸é µË´Ï´Ù.
±¸±Û·Î code beautifier ȤÀº source beautifier ·Î °Ë»öÇÏ¸é »ó´çÈ÷ ¸¹Àº °Ë»öÀ» ¾òÀ» ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. Á¦°¡ Áñ°Ü¾²´Â °ÍÀº GNUÀÇ indentÀÔ´Ï´Ù. indent ÀÚü¿¡´Â GNU style°ú BSD style·Î ¸ÂÃçÁÖµµ·Ï ÇÏ´Â ¿É¼ÇÀÌ ÀÖ¾î¼, ¸¹Àº GNU toolÀ̳ª BSD toolµéÀÌ ÀÌ·± À¯Æ¿¸®Æ¼ÀÇ »êÃâ¹° ÇüÅ·Πµî·ÏµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
ÄÚµù ±ÔÄ¢¿¡´Â ÆÄÀÏ À̸§ Á¤ÇÏ´Â °ÍÀ̳ª ÇÔ¼ö À̸§, º¯¼ö À̸§µîÀ» °áÁ¤ÇÏ´Â °ÍÀÌ µû¶ó °©´Ï´Ù. ÀÌµé ¶ÇÇÑ ctags -x ¸¦ »ç¿ëÇϸé ÇÔ¼ö¿Í º¯¼öº°·Î Á¤ÀÇµÈ À§Ä¡¸¦ ÆľÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÔ¼ö,º¯¼ö À̸§ ±ÔÄ¢Àº ¹Ýµå½Ã Á¤±ÔÇ¥Çö½ÄÀ¸·Î °áÁ¤ÇÒ ¼ö ÀÖ¾î¾ßÇÏ°í, ctags -x ÀÇ Ãâ·Â¹°À» Á¤±ÔÇ¥Çö½ÄÀ¸·Î ÇϳªÇϳª Á¶»çÇÏ¿© ±ÔÄ¢ À§¹Ý ¿©ºÎ¸¦ ¸®Æ÷ÆÃÇÏ´Â °Íµµ ÄÚµù ±ÔÄ¢ÀÌ ¹®¼·Î¸¸ Á¸ÀçÇÏ´Â °ÍÀ» ¸·¾Æ ÁÖ°Ô µË´Ï´Ù.
2.2.2. ¹®¼È Åø ¶¹®¼È ÅøÀ» ¼±ÅÃÇÏ´Â °ÍÀº ÁÖ¼®À» ¾î¶»°Ô ó¸®ÇÒ °ÍÀÌ³Ä¿Í ¹ÐÁ¢ÇÑ ¿¬°ü¼ºÀÌ ÀÖ½À´Ï´Ù. ÀÚµ¿À¸·Î ¹®¼È¸¦ ÇÑ´Ù´Â °ÍÀº, ÄÚµå·ÎºÎÅÍ ÁÖ¼®À» ÃßÃâÇÏ°í À̸¦ ¹ÙÅÁÀ¸·Î call-graph, class »ó¼Ó°ü°è, api ¼³¸í¼ µîÀ» ¸¸µé ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ÁÖ¼®À» ÀÏÀÏÀÌ ´Ù´Â ÄÚµù ±ÔÄ¢À» ¸¸µå´Â °Íº¸´Ù ¹®¼È ÅøÀ» Á¤ÇÏ°í ÀÌ ÅøÀÌ ¿ä±¸ÇÏ´Â ´ë·Î ÀÛ¼ºÇϵµ·ÏÇÏ´Â °ÍÀÌ ÀÌÁßÀÇ ¼ö°í¸¦ ¸·½À´Ï´Ù. ÁÖ¼®µû·Î ¹®¼µû·Îº¸´Ù´Â ¾î´ÀÁ¤µµ °øÀ¯Çϵµ·Ï ¸¸µå´Â °ÍÀÌ ÁÁ½À´Ï´Ù.
¿©·¯ ¹®¼ÅøÀÌ Á¸ÀçÇÕ´Ï´Ù. automatic documentation tools µîÀ¸·Î °Ë»öÇغ¸½Ã±â ¹Ù¶ø´Ï´Ù. ¹®¼È ÅøÀ» ´Ù¸¥ ¿ëµµ·Î ÀÌ¿ëÇÏ´Â ¹æ¹ýÀº ¹®¼È ÅøÀÌ ÇÊ¿äÇÑ ÁÖ¼®ÀÌ ¾ø´Â °ÍÀ» warningÀ¸·Î ó¸®ÇØÁÙ ¶§, °³¹ßÀڵ鿡°Ô ÇÊ¿äÇÑ ÁÖ¼®À» ´Þµµ·Ï Áö½ÃÇÒ ¼ö ÀÖ´Â ±Ù°Å°¡ µÉ ¼ö ÀÖ½À´Ï´Ù. Áï, °³¹ß ÆÀÀÇ ´ëȸ¦ ÅøÀ» »ç¿ëÇؼ ÇÏ´Â °ÍÀ¸·Î ÇؾßÁö Äڵ带 º¸¸é º¼ ¼ö·Ï ã¾Æ³»°Ô µÇ´Â ¹æ¹ýÀ¸·Î ÇÏ¸é »ý»ê¼ºÀÌ ÀúÇϵȴٴ °ÍÀÔ´Ï´Ù.
2.2.3. ÄÚµå Skeleton ¶ÄÚµåÀÇ TemplateÀ» ÁغñÇÏ´Â °ÍÀº °£´ÜÇÑ ÀÏÀÌÁö¸¸, Äڵ尡 ¸¹¾ÆÁö¸é ¸¹¾ÆÁú ¼ö·Ï ÀÏÁ¾ÀÇ Ã¼°è¸¦ Áֱ⠶§¹®¿¡ ÁÁ½À´Ï´Ù. ƯÈ÷³ª vim, emacs µî¿¡¼ Á¦°øÇÏ´Â skeleton À» ÀÌ¿ëÇÑ »õ ÆÄÀÏ ÀÛ¼º¹æ¹ýÀº Äڵ带 Çϳª ¸¸µé ¶§ ¾ÆÁÖ À¯¿ëÇÕ´Ï´Ù. Àú´Â vimÀ» ÁÖ·Î »ç¿ëÇϹǷΠvim pluginÀ» ¼Ò°³ÇÏÀÚ¸é,
ÆÄÀÏÀ» skel.c, skel.h µîÀ¸·Î ÁغñÇØµÎ¸é »õ·Î¿î ÆÄÀÏÀ» ¸¸µé ¶§ ÀÚµ¿À¸·Î Àоî¿À°Ô µË´Ï´Ù.
ÀÌ·± skeletonÀÌ Á¦°øÇÏ´Â °ÍÀº Å©°Ô ¶óÀ̼¾½º Á¶Ç×, Æ÷ÇÔ Çì´õ, Àü¿ª º¯¼ö ¼±¾ðºÎ, ŸÀÔ, ¸ÅÅ©·Î ¼±¾ðºÎ, Àü¿ª º¯¼ö ¼±¾ðºÎ, export ÇÔ¼ö ¼±¾ðºÎ, static ÇÔ¼ö Àü¹æ ¼±¾ðºÎ µîÀÌ ÀÖ½À´Ï´Ù. ÀÌ·± ¼±¾ðºÎµéÀ» ¿©·¯ÁÙÀÇ ÁÖ¼®À¸·Î °Á¶ÇÏ´Â °Íµµ ÇÑ ¹æ¹ýÀÔ´Ï´Ù.
±×¸®°í, Áß¿äÇÑ °ÍÀº cvs ¸¦ »ç¿ëÇÒ °æ¿ì ÆÄÀÏ ¾ÆÀ̵𸦠³Ö¾î ÁÖ´Â °ÍÀÔ´Ï´Ù. ÀÌ°ÍÀº cvs ÀÇ keyword ġȯÀ» ÅëÇØ ÀϾ¸ç, .h ÆÄÀÏ°ú .c ÆÄÀÏÀÌ ¾à°£ ´Ù¸¨´Ï´Ù.
header ¿¡¼´Â
/* $Id: DevWorkshop,v 1.3 2012/04/04 01:57:34 kss Exp kss $ */
.c ¿¡¼´Â
static char id[] = "$Id: DevWorkshop,v 1.3 2012/04/04 01:57:34 kss Exp kss $";
GCC ¸¸ ¾µ °ÍÀ̶ó¸é,
static char id[] __attribute__((unused)) = "$Id: DevWorkshop,v 1.3 2012/04/04 01:57:34 kss Exp kss $";
µîÀ¸·Î Ç¥½Ã ÇصӴϴÙ. ÀÌ·¸°Ô Ç¥½ÃÇÔÀ¸·Î¼ cvs server´Â commit µÇ¾î¿À´Â ÆÄÀÏ¿¡¼ $Id: $ ºÎºÐÀ» ³¯Â¥, ID, Revision µîÀ» ¼¯¾î¼ Àû´çÈ÷ Ç¥ÇöÇØÁÝ´Ï´Ù. ÀÚ¼¼ÇÑ °ÍÀº cvs keyword ·Î °Ë»öÇØ º¸½Ã±â ¹Ù¶ø´Ï´Ù. ±×¸®°í, .c ÆÄÀÏ¿¡¼ static ¹®ÀÚ¿·Î ÁÖ´Â ÀÌÀ¯´Â ³ªÁß¿¡ »ý±ä ¹ÙÀ̳ʸ®¸¦ ident ¶ó´Â ¸í·ÉÀ¸·Î È®ÀÎÇغ¸¸é ¾î¶² ¼Ò½º°¡µé¾î °¬´ÂÁö¸¦ È®ÀÎÇØ º¼ ¼ö Àֱ⠶§¹®¿¡ µð¹ö±ë ÈùÆ®¸¦ ÁÙ ¼ö ÀÖ½À´Ï´Ù.
ident´Â indent¿Í È¥µ¿ÇÏÁö ¸¶½Ã±â ¹Ù¶ø´Ï´Ù.
skeleton ¸¶Áö¸·¿¡
/*
$Log: DevWorkshop,v $ Revision 1.3 2012/04/04 01:57:34 kss 113.160.52.170;;xvip87;; Revision 1.2 2004/12/04 12:17:45 kss 61.74.173.192;;infiniterun;; Revision 1.1 2004/12/04 12:17:04 kss 61.74.173.192;;infiniterun;; */ ¸¦ µÒÀ¸·Î½á, cvs commit ¸Þ½ÃÁö¸¦ ¼Ò½º¿¡ °è¼Ó Ãß°¡ ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. µû¶ó¼ cvs¸¦ Àß È°¿ëÇϸé, ¼Ò½º º¯°æ¿¡ ´ëÇÑ °ÍÀ» µû·Î °ü¸®ÇÏÁö ¾Ê¾Æµµ cvs°¡ ÀÚµ¿À¸·Î ġȯÇØÁÖ°Ô µË´Ï´Ù. Log ´Â ÁÖÀÇÇؼ »ç¿ëÇؾßÇÏ´Â °ÍÀº merge¿Í °ü·ÃÇÑ ¹®Á¦ ¶§¹®¿¡ ¼Ò½º ¸¶Áö¸·¿¡ µÑ °ÍÀ» ±ÇÀåÇÏ°í ÀÖ½À´Ï´Ù.
2.3.1. Å×½ºÆ®¸¦ À§ÇÑ ±¸Á¶ ¶¸ðµâȸ¦ ÇÏ´Â ¸ñÀûÀº ±× ¸ðµâÀÇ Àç»ç¿ë¼º¿¡ ÀÖ½À´Ï´Ù. ÀûÀýÇÑ ¸ðµâȸ¦ ÅëÇØ ¾òÀ» ¼ö Àִµ¥, ¾î¶² °æ¿ì´Â Áö³ªÄ£ ¸ðµâÈ ¶Ç´Â ¾Ö¸ÅÇÑ ¸ðµâÈ ¶§¹®¿¡ ¸ðµâÈÀÇ Àǵµ°¡ Èå·ÁÁö´Â °æ¿ì°¡ ÀÖ½À´Ï´Ù. ÀÌ·± °æ¿ì¸¦ ´ëºñÇؼ »çÀü¿¡ »ý°¢ÇؾßÇÒ °ÍÀº ¾î¶»°Ô Å×½ºÆ®¸¦ À§ÇÑ ¸ðµâȸ¦ ´Ã ¿°µÎ¿¡ µÎ¶ó´Â °ÍÀÔ´Ï´Ù. ±×·¸°Ô µÇ¸é º¸´Ù ÀûÀýÇÑ ¸ðµâ ±¸ºÐÀÌ »ý±é´Ï´Ù.
2.3.2. Real main, Test main ¶´ÙÀ½°ú °°Àº ÄÚµåµéÀÌ ÀÖ´Ù°í ÇսôÙ.
file.c
----- int file_send( const char * host, int port, const char * file ) { .... } int file_recv( char * buf, int size ) { .... } comm.c ------ #include "file.h" void setup() { } int main( int argc, char * argv[] ) { char buf[1024]; setup(); file_send( "localhost", 1122, "test.txt" ); file_recv( buf, sizeof buf ); } test_comm.c ----------- #include "file.h" void test_file_recv() { assert(...); } void test_file_send() { assert(...); } int main( int argc, char * argv[] ) { test_file_send(); test_file_recv(); } À§ Äڵ带 ´ë·« ÀÐ°Ô µÇ¸é, file.c ¶ó´Â ¸ðµâ(?)ÀÌ Çϳª ÀÖ°í, ¿©±â¿¡ ÀÖ´Â ÇÔ¼ö¸¦ ½ÇÁ¦ ÀÌ¿ëÇÏ´Â comm.c ¶ó´Â main ÇÔ¼ö ¸ðµâ°ú test_comm.c ¶ó´Â Å×½ºÆ®¿ë ¸ðµâÀÌ ÀÖÀ½À» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ¾Æ¸¶µµ comm À̶ó´Â À¯Æ¿¸®Æ¼ÀÇ ÀϺÎÀÏ °Í °°°í, ±× main ÇÔ¼ö´Â comm.c¿¡ ÀÖ´Â °ÍÀε¥, ÀÌ·¸°Ô ºÐ¸®ÇÏ´Â °ÍÀº, file.cÀÇ ³»¿ëÀ» comm.c ¿¡ ³õÀ» ¼öµµ ÀÖ½À´Ï´Ù¸¸, ±×·¸°Ô ÇÏÁö ¾Ê°í ºÐ¸®Çß½À´Ï´Ù. ȤÀÚ´Â comm.c ¿¡ main2 ¶ó°í ³Ö¾î¼ ÇÊ¿ä½Ã¸¶´Ù main°ú À̸§À» ¹Ù²ã°¡¸ç Å×½ºÆ®ÇÒ °ÍÀÔ´Ï´Ù. ÇÏÁö¸¸ ±×·¸°Ô ÇÏ´Â °ÍÀº ÇÁ·Î±×·¥À» ¹è¿ï¶§³ª ÇÏ´Â °ÍÀÌ¸ç ½ÇÀü¿¡¼´Â ±×·¸°Ô Å×½ºÆ®ÇÏ¸é ³ªÁß¿¡ ÇÊ¿äÇÑ Å×½ºÆ®¸¦ ¸øÇÏ°Ô µË´Ï´Ù. Å×½ºÆ® Äڵ嵵 ÄÚµùÀÇ ¸ÞÀÎÀ̸ç, Ç×»ó ÄÄÆÄÀ쵃 ¼ö ÀÖ´Â »óŸ¦ À¯ÁöÇؾßÇÕ´Ï´Ù.
ÀÚ, Real main°ú Test mainÀ» µÑ ¼ö ÀÖ´Ù´Â °¡Á¤ÇÏ¿¡ ¸ðµâ·Î ³ª´· ¼ö ÀÖÀ½À» º¼ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» Á»´õ ¹ßÀü½ÃÄÑ »ý°¢ÇÑ´Ù¸é, °°Àº Å×½ºÆ® ±×·ì¿¡ ÀÖ´Â °Íµé ³¢¸® ¸ð¾Æ³õÀ» ¶§ ÀûÀýÇÑ ¸ðµâÈÀÇ ½À°üÀ» ±â¸¦ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.
2.3.3. ºÎºÐ Archive ¶À§¿¡¼ »ìÆ캻 °ÍÀº ´ÜÁö main ÇÔ¼ö¸¸À» »ìÆì º¸¾Ò½À´Ï´Ù¸¸, ¿©±â¿¡ Ãß°¡ÇÏ¿© ´õ »ý°¢Çغ¼ ¼ö ÀÖ´Â °ÍÀÌ ÀÖ½À´Ï´Ù. main ÇÔ¼ö°¡ µé¾î ÀÖ´Â ÆÄÀÏÀ» Á¦¿ÜÇÑ ³ª¸ÓÁö ÆÄÀÏÀ» static library Áï, archive·Î ¸¸µé°í, ÀÌ°ÍÀ» main ÇÔ¼ö°¡ µé¾î ÀÖ´Â °Í°ú ¸µÅ©¸¦ Ç϶ó´Â °ÍÀÔ´Ï´Ù.
Makefile
-------- libcomm.a: file.o tcp.o udp.o serv.o ar cr libcomm.a $? comm: libcomm.a comm.o gcc libcomm.a comm.o -o comm test_comm: libcomm.a comm.o gcc libcomm.a test_comm.o -o test_comm ¹°·Ð autotoolÀ» ½á¼ ÁøÇàÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù¸¸, ¿¹¸¦ µé¾îº¾´Ï´Ù. ÀÌ·¸°Ô ºÎºÐ archive¸¦ ±¸ÇÏ´Â ÀÌÀ¯´Â Àǹ̻óÀÖ´Â °ÍÀε¥, ¸¸ÀÏ file.o °¡ commÀ» ¸¸µé±â À§Çؼ ÀÇÁ¸°ü°è¿¡ ÀÇÇØ ÄÄÆÄÀϵǾú´Ù¸é, ¾ö¹ÐÈ÷ ¸»Çؼ test_commÀ» À§Çؼ´Â ´Ù¸¥ file.o¸¦ ¸¸µå´Â °ÍÀÌ ¿Ç½À´Ï´Ù. °£È¤, ÇϳªÀÇ ½ÇÇà ÆÄÀÏÀ» ¸¸µé±â À§ÇØ ÄÄÆÄÀÏ ¿É¼ÇÀÌ ´Þ¶óÁø´Ù¸é, ÀǵµÇÏÁö ¾ÊÀº ¹ÙÀ̳ʸ®¸¦ Å×½ºÆ®¸¦ ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù.
½ÇÁ¦, autotoolÀ» ÀÌ¿ëÇÒ °æ¿ì, ÇϳªÀÇ ¼Ò½º°¡ ´Ù¸¥ ¹ÙÀ̳ʸ® »ý¼º¿¡ Âü¿©ÇÏ°Ô µÈ´Ù¸é, ±×¸®°í ¿É¼ÇÀÌ ´Þ¶óÁø´Ù¸é, À§ÀÇ °æ¿ì comm-file.o ¶ó´Â ÆÄÀÏ°ú test_comm-file.o ¿Í °°ÀÌ Âü¿©ÇÏ°Ô µÉ ¹ÙÀ̳ʸ®¸¦ prefix·Î ÇÏ´Â ¿ÀºêÁ§Æ®¸íÀÌ »ç¿ëµË´Ï´Ù. ÀÌ·± °æ¿ì Å×½ºÆ®¿¡ ¾î·Á¿òÀÌ ÀÖÀ» ¼ö Àֱ⠶§¹®¿¡ °°Àº ¿ÀºêÁ§Æ®¸¦ Å×½ºÆ®Çϱâ À§Çؼ ºÎºÐ archive¸¦ ¸¸µé¾î ¸µÅ©ÇÏ´Â °ÍÀ» ±ÇÀåÇÕ´Ï´Ù.
|
His heart was yours from the first moment that you met. |