ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxC±à³Ì---makeÃüÁîµÄʹÓÃ

·¢²¼Ê±¼ä:2006-02-16 09:44:31À´Ô´:ºìÁª×÷Õß:ÌìɽÀÏͯ
¡¡¡¡ÕªÒª:ÔÚ¿ª·¢Ò»¸öϵͳʱ£¬Ò»°ãÊǽ«Ò»¸öϵͳ·Ö³É¼¸¸öÄ£¿é£¬ÕâÑù×öÌá¸ßÁËϵͳµÄ¿Éά»¤ÐÔ£¬µ«ÓÉÓÚ¸÷¸öÄ£¿é¼ä²»¿É±ÜÃâ´æÔÚ¹ØÁª£¬ËùÒÔµ±Ò»¸öÄ£¿é¸Ä¶¯ºó£¬ÆäËûÄ£¿éÒ²Ðí»áÓÐËù¸üУ¬µ±È»¶ÔСϵͳÀ´Ëµ£¬ÊÖ¹¤±àÒëÁ¬½ÓÊÇûÎÊÌ⣬µ«ÊÇÈç¹ûÊÇÒ»¸ö´óϵͳ£¬´æÔںܶà¸öÄ£¿é£¬ÄÇôÊÖ¹¤±àÒëµÄ·½·¨¾Í²»ÊÊÓÃÁË¡£Îª´Ë£¬ÔÚLinuxϵͳÖУ¬×¨ÃÅÌṩÁËÒ»¸ömakeÃüÁîÀ´×Ô¶¯Î¬»¤Ä¿±êÎļþ£¬ÓëÊÖ¹¤±àÒëºÍÁ¬½ÓÏà±È£¬makeÃüÁîµÄÓŵãÔÚÓÚËûÖ»¸üÐÂÐ޸ĹýµÄÎļþ£¨ÔÚLinuxÖУ¬Ò»¸öÎļþ±»´´½¨»ò¸üкóÓÐÒ»¸ö×îºóÐÞ¸Äʱ¼ä£¬makeÃüÁî¾ÍÊÇͨ¹ýÕâ¸ö×îºóÐÞ¸Äʱ¼äÀ´ÅжϴËÎļþÊÇ·ñ±»Ð޸ģ©£¬¶ø¶ÔûÐ޸ĵÄÎļþÔòÖÃÖ®²»Àí£¬²¢ÇÒmakeÃüÁî²»»á©µôÒ»¸öÐèÒª¸üеÄÎļþ¡£
¡¡¡¡ÔÚ¿ª·¢Ò»¸öϵͳʱ£¬Ò»°ãÊǽ«Ò»¸öϵͳ·Ö³É¼¸¸öÄ£¿é£¬ÕâÑù×öÌá¸ßÁËϵͳµÄ¿Éά»¤ÐÔ£¬µ«ÓÉÓÚ¸÷¸öÄ£¿é¼ä²»¿É±ÜÃâ´æÔÚ¹ØÁª£¬ËùÒÔµ±Ò»¸öÄ£¿é¸Ä¶¯ºó£¬ÆäËûÄ£¿éÒ²Ðí»áÓÐËù¸üУ¬µ±È»¶ÔСϵͳÀ´Ëµ£¬ÊÖ¹¤±àÒëÁ¬½ÓÊÇûÎÊÌ⣬µ«ÊÇÈç¹ûÊÇÒ»¸ö´óϵͳ£¬´æÔںܶà¸öÄ£¿é£¬ÄÇôÊÖ¹¤±àÒëµÄ·½·¨¾Í²»ÊÊÓÃÁË¡£Îª´Ë£¬ÔÚLinuxϵͳÖУ¬×¨ÃÅÌṩÁËÒ»¸ömakeÃüÁîÀ´×Ô¶¯Î¬»¤Ä¿±êÎļþ£¬ÓëÊÖ¹¤±àÒëºÍÁ¬½ÓÏà±È£¬makeÃüÁîµÄÓŵãÔÚÓÚËûÖ»¸üÐÂÐ޸ĹýµÄÎļþ£¨ÔÚLinuxÖУ¬Ò»¸öÎļþ±»´´½¨»ò¸üкóÓÐÒ»¸ö×îºóÐÞ¸Äʱ¼ä£¬makeÃüÁî¾ÍÊÇͨ¹ýÕâ¸ö×îºóÐÞ¸Äʱ¼äÀ´ÅжϴËÎļþÊÇ·ñ±»Ð޸ģ©£¬¶ø¶ÔûÐ޸ĵÄÎļþÔòÖÃÖ®²»Àí£¬²¢ÇÒmakeÃüÁî²»»á©µôÒ»¸öÐèÒª¸üеÄÎļþ¡£
¡¡¡¡
¡¡¡¡¡¡¡¡ ÎļþºÍÎļþ¼ä»òÄ£¿é»òÄ£¿é¼äÓпÉÄÜ´æÔÚÒÐÀµ¹Øϵ£¬makeÃüÁîÒ²ÊÇÒÀ¾ÝÕâÖÖÒÀÀµ¹ØϵÀ´½øÐÐά»¤µÄ£¬ËùÒÔÎÒÃÇÓбØÒªÁ˽âʲôÊÇÒÀÀµ¹Øϵ£»´ò¸ö×î±ÈÓ÷£ºÈç¹ûÎÒÃÇÏëÍæÓÎÏ·£¬±ØÐëÓÐÓÎÏ·¹âµúºÍµçÄÔ£¨ÕâÁ½Õß¼ä´æÔÚÒÀÀµ¹Øϵ£©£¬¶øÓÐÓÎÏ·¹âµúºÍµçÄÔµÄÇ°ÌáÌõ¼þÊDZØÐë¾­¼ÃÌõ¼þÔÊÐí£¬ÁíÍâµ±ÄãÓÐÁËÓÎÏ·¹âµúºó»¹Òª¸ù¾ÝÄãµÄÐÄÇéÀ´Ñ¡ÔñÊÇÍæÄÄÖÖÓÎÏ·£»ÈçÏÂͼ£º
¡¡¡¡
¡¡¡¡ ÍæÓÎÏ·
¡¡¡¡ /
¡¡¡¡ /
¡¡¡¡ ÓÎÏ·¹âµú µçÄÔ
¡¡¡¡ / /
¡¡¡¡ / /
¡¡¡¡ ÐÄÇé ¾­¼ÃÇé¿ö
¡¡¡¡
¡¡¡¡¡¡¡¡ makeÃüÁȻ²»»á×Ô¼ºÖªµÀÕâЩÒÀÀµ¹Øϵ£¬¶øÐèÒª³ÌÐòÔ±½«ÕâЩÒÀÀµ¹ØϵдÈëÒ»¸ö½ÐmakefileµÄÎļþÖС£MakefileÎļþÖаüº¬×ÅһЩĿ±ê£¬Í¨³£Ä¿±ê¾ÍÊÇÎļþÃû£¬¶Ôÿһ¸öÄ¿±ê£¬ÌṩÁËʵÏÖÕâ¸öÄ¿±êµÄÒ»×éÃüÁîÒÔ¼°ºÍÕâ¸öÄ¿±êÓÐÒÀÀµ¹ØϵµÄÆäËûÄ¿±ê»òÎļþÃû£¬ÒÔÏÂÊÇÒ»¸ö¼òµ¥µÄMakefileµÄ¼òµ¥Àý×Ó£º
¡¡¡¡
¡¡¡¡ #Ò»¸ö¼òµ¥µÄMakefile
¡¡¡¡
ÒýÓÃ:
prog:prog1.o prog2.o
¡¡¡¡ gcc prog1.o prog2.o -o prog
¡¡¡¡ prog1.o:prog1.c lib.h
¡¡¡¡ gcc -c -I. -o prog1.o prog1.c
¡¡¡¡ prog2.o:prog2.c
¡¡¡¡ gcc -c prog2.c

¡¡¡¡
¡¡¡¡¡¡¡¡ ÒÔÉÏMamefileÖж¨ÒåÁËÈý¸öÄ¿±ê£ºprog¡¢prog1ºÍprog2£¬·ÖºÅºóÊÇÒÀÀµÎļþÁÐ±í£¬ÖмäÓÃÒ»¸ö·ÖºÅ¸ô¿ª£»
¡¡¡¡
¡¡¡¡¡¡¡¡¶ÔÓÚµÚÒ»¸öÄ¿±êÎļþprogÀ´Ëµ£¬ËûÓÐÁ½¸öÒÀÀµÎļþ£ºprog1.oºÍprog2.o£¬ÈκÎÒ»¸öÒÀÀµÎļþ¸üУ¬progÒ²ÒªËæÖ®¸üУ¬ÃüÁîgcc prog1.o prog2.o -o progÊÇÉú³ÉprogµÄÃüÁî¡£make¼ì²éÄ¿±êÊÇ·ñÐèÒª¸üÐÂʱ²ÉÓõݹéµÄ·½·¨£¬µÝ¹é´Óµ×²ãÏòÉ϶ԹýʱĿ±ê½øÐиüУ¬Ö»Óе±Ò»¸öÄ¿±êËùÒÀÀµµÄËùÓÐÄ¿±ê¶¼Îª×îÐÂʱ£¬Õâ¸öÄ¿±ê²Å»á±»¸üС£ÒÔÉÏÃæµÄMakefileΪÀý£¬ÎÒÃÇÐÞ¸ÄÁËprog2.c£¬Ö´ÐÐmakeʱ£¬ÓÉÓÚÄ¿±êprogÒÀÀµprog1.oºÍprog2.o£¬ËùÒÔÒªÏȼì²éprog1.oºÍprog2.oÊÇ·ñ¹ýʱ£¬Ä¿±êprog1.oÒÀÀµprog1.cºÍlib.h£¬ÓÉÓÚÎÒÃDz¢Ã»ÐÞ¸ÄÕâÁ½¸öÎļþ£¬ËùÒÔËûÃǶ¼Ã»ÓйýÆÚ£¬½ÓÏÂÀ´ÔÙ¼ì²éÄ¿±êprog2.o£¬ËûÒÀÀµprog2.c£¬ÓÉÓÚÎÒÃÇÐÞ¸ÄÁËprog2.c£¬ËùÒÔprog2.c±ÈÄ¿±êÎļþprog2.oҪУ¬¼´prog2.o¹ýÆÚ£¬¶øµ¼ÖÂÁËÒÀÀµprog2.oµÄËùÓÐÄ¿±ê¶¼¹ýʱ£»ÕâÑùmake»áÏȸüÐÂprog2.oÔÙ¸üÐÂprog¡£
¡¡¡¡
¡¡¡¡¡¡¡¡ Èç¹ûijһÐйý³¤£¬ÒѾ­µ½ÁËÎı¾±à¼­Æ÷µÄÓұ߽磬¿ÉÓÃÒ»¸ö·´Ð±¸Ü£¨£©×ö»»Ðзû£¬·´Ð±¸ÜËùÁ¬½ÓµÄËùÓÐÐж¼»á±»µ±³ÉÒ»ÐÐÀ´´¦Àí£»ÁíÍâÔÚMakefileÖÐÉæ¼°µÄÎļþÃûÔÊÐíʹÓÃͨÅä·û£¨?»ò*£©¡£
¡¡¡¡
¡¡¡¡¡¡¡¡ ÓÐʱºòΪÁ˼ò»¯ÃüÁîµÄÊéд£¬¿ÉÒÔÔÚMakefileÖж¨ÒåһЩºêºÍʹÓÃËõд£¬ÏÂÃæÊǼ¸¸öºÜʹÓõÄËõд£º
¡¡¡¡
¡¡¡¡¡¡¡¡ $@ ´ú±í¸ÃÄ¿±êµÄÈ«Ãû
¡¡¡¡
¡¡¡¡¡¡¡¡ $* ´ú±íÒѾ­É¾³ýÁ˺ó׺µÄÄ¿±êÃû
¡¡¡¡
¡¡¡¡¡¡¡¡ $< ´ú±í¸ÃÄ¿±êµÄµÚÒ»¸öÏà¹ØÄ¿±êÃû
¡¡¡¡
¡¡¡¡¡¡¡¡ ÏÖÔھͿÉÒÔʹÓÃËõд¶ÔÒÔÉÏMakefile×öÏàÓ¦µÄÐ޸ģº
¡¡¡¡
¡¡¡¡ #ʹÓÃËõдµÄMakefile
¡¡¡¡
ÒýÓÃ:
prog:prog1.o prog2.o
¡¡¡¡ gcc prog1.o prog2.o -o $@
¡¡¡¡ prog1.o:prog1.c lib.h
¡¡¡¡ gcc -c -I. -o $@ $<
¡¡¡¡ prog2.o:prog2.c
¡¡¡¡ gcc -c $*.c

¡¡¡¡
¡¡¡¡¡¡¡¡ ÔÚÒ»¸öÏîÄ¿ÖУ¬¿ÉÄܼ¸¸öÄ¿±êÖÐʹÓÃͬһ¸öÎļþa.c£¬Èç¹ûÒÔºóÕâ¸öÎļþ±»Ð޸ģ¬ÄÇôÐèÒªÐÞ¸ÄMakefileÖÐËùÓеÄa.c£¬ÕâÑù¾Í±È½ÏÂé·³£¬¿ÉÒÔ¶¨ÒåºêÀ´½â¾öÕâ¸öÎÊÌ⣬ºê¿ÉÒÔʹMakefile¸ü¼ÓÇåÎú£º
¡¡¡¡
¡¡¡¡ #ʹÓÃËõдºÍºêµÄMakefile
¡¡¡¡
ÒýÓÃ:
MARCO = prog1.o prog2.o
¡¡¡¡ prog:$(MARCO)
¡¡¡¡ gcc prog1.o prog2.o -o $@
¡¡¡¡ prog1.o:prog1.c lib.h
¡¡¡¡ gcc -c -I. -o $@ $<
¡¡¡¡ prog2.o:prog2.c
¡¡¡¡ gcc -c $*.c

¡¡¡¡
¡¡¡¡¡¡¡¡ ¶ÔÓںܴóµÄÏîÄ¿À´Ëµ£¬×Ô¼ºÊÖдMakefile·Ç³£Âé·³£¬¶ø±ê×¼µÄGNUÈí¼þ£¨ÈçApacle£©¶¼ÊÇÔËÐÐÒ»¸öconfigure½Å±¾ÎļþÀ´²úÉúMakefile£»GNUÈí¼þautomakeºÍautoconf¾ÍÊÇ×Ô¶¯Éú³ÉconfigureµÄ¹¤¾ß¡£¿ª·¢ÈËÔ±Ö»ÐèÒªÏȶ¨ÒåºÃºê£¬automake´¦Àíºó»á²úÉú¹©autoconfʹÓõÄMakefine.in£¬ÔÙÓÃautoconf¾Í¿ÉÒÔ²úÉúconfigure¡£ÒªÊ¹ÓÃautomakeºÍautoconf±ØÐë°²×°£ºGNU Automake£¬GNU Autoconf£¬GNU m4£¬perlºÍGNU Libtool¡£
¡¡¡¡
¡¡¡¡¡¡¡¡ ¼ÙÉèÄãÓÐÒ»¸öÔ´Îļþtest.c£¬ÓÃautoscan¿ÉÒÔ²úÉúÒ»¸öconfigure.scanÎļþ£¬±à¼­Õâ¸öÎļþ
¡¡¡¡
¡¡¡¡
ÒýÓÃ:
dnl Process this file with autoconf to produce a configure script.
¡¡¡¡ AC_INIT(test.c)
¡¡¡¡ AC_INIT_AUTOMAKE(test,1.0)
¡¡¡¡ dnl Checks for programs.
¡¡¡¡ AC_PROG_CC
¡¡¡¡ dnl Checks for libraries.
¡¡¡¡ dnl Checks for header files.
¡¡¡¡ dnl Checks for typedefs, structures, and compiler characteristics.
¡¡¡¡ dnl Checks for library functions.
¡¡¡¡ AC_OUTPUT(Makefile)

¡¡¡¡
¡¡¡¡¡¡¡¡ ½Ó׎«configure.scan¸ÄÃûΪcnfigure.in£¬ÔÙÖ´ÐÐaclocalºÍautoconf£¬»á²úÉúaclocal.m4ºÍconfigureÁ½¸öÎļþ£ºÎÒÃÇÔٱ༭Makefile.amÎļþ£¬Makefile.amÎļþÖаüº¬ÁËÎÒÃÇ×Ô¼º¶¨ÒåµÄºêÒÔ¼°Ä¿±êÎļþ£¬automake»á¶ÁÈçÕâ¸öÎļþ²¢¸ù¾ÝÎÒÃÇ×Ô¼º¶¨ÒåµÄºê²úÉúÏàÓ¦µÄMakefile.inÎļþ£º
¡¡¡¡
¡¡¡¡ AUTOMAKE_OPTIONS=foreign
¡¡¡¡ run_PROG=test
¡¡¡¡ test_SOURCE=test.c
¡¡¡¡
¡¡¡¡¡¡¡¡ ½ÓÏÂÀ´Ö´ÐÐautomake -a£¬µ½Ä¿Ç°ÎªÖ¹£¬configureÎļþÒѾ­³É¹¦Éú³É¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ