Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
½ÌÄãдMakefile£¨ºÜÈ«£¬º¬Óй¤×÷¾­ÑéµÄ£©
 
  3128  次浏览      28
 2018-7-31
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁËMakefile,ÒÔ¼°ËüµÄʹÓùæÔò¡¢ÈçºÎ¹¤×÷¡¢×Ô¶¯ÍƵ¼ÒÔ¼°±äÁ¿Ê¹ÓõÈÏà¹ØÖªÊ¶¡£

Makefile

ÖµµÃÒ»ÌáµÄÊÇ£¬ÔÚMakefileÖеÄÃüÁ±ØÐëÒªÒÔ[Tab]¼ü¿ªÊ¼¡£

ʲôÊÇmakefile£¿»òÐíºÜ¶àWinodwsµÄ³ÌÐòÔ±¶¼²»ÖªµÀÕâ¸ö¶«Î÷£¬ÒòΪÄÇЩWindowsµÄIDE¶¼ÎªÄã×öÁËÕâ¸ö¹¤×÷£¬µ«ÎÒ¾õµÃÒª×÷Ò»¸öºÃµÄºÍprofessionalµÄ³ÌÐòÔ±£¬makefile»¹ÊÇÒª¶®¡£Õâ¾ÍºÃÏñÏÖÔÚÓÐÕâô¶àµÄHTMLµÄ±à¼­Æ÷£¬µ«Èç¹ûÄãÏë³ÉΪһ¸öרҵÈËÊ¿£¬Ä㻹ÊÇÒªÁ˽âHTMLµÄ±êʶµÄº¬Òå¡£ÌØ±ðÔÚUnixϵÄÈí¼þ±àÒ룬Äã¾Í²»Äܲ»×Ô¼ºÐ´makefileÁË£¬»á²»»áдmakefile£¬´ÓÒ»¸ö²àÃæËµÃ÷ÁËÒ»¸öÈËÊÇ·ñ¾ß±¸Íê³É´óÐ͹¤³ÌµÄÄÜÁ¦¡£ÒòΪ£¬makefile¹ØÏµµ½ÁËÕû¸ö¹¤³ÌµÄ±àÒë¹æÔò¡£Ò»¸ö¹¤³ÌÖеÄÔ´Îļþ²»¼ÆÊý£¬Æä°´ÀàÐÍ¡¢¹¦ÄÜ¡¢Ä£¿é·Ö±ð·ÅÔÚÈô¸É¸öĿ¼ÖУ¬makefile¶¨ÒåÁËһϵÁеĹæÔòÀ´Ö¸¶¨£¬ÄÄЩÎļþÐèÒªÏȱàÒ룬ÄÄЩÎļþÐèÒªºó±àÒ룬ÄÄЩÎļþÐèÒªÖØÐ±àÒ룬ÉõÖÁÓÚ½øÐиü¸´ÔӵŦÄܲÙ×÷£¬ÒòΪmakefile¾ÍÏñÒ»¸öShell½Å±¾Ò»Ñù£¬ÆäÖÐÒ²¿ÉÒÔÖ´ÐвÙ×÷ϵͳµÄÃüÁî¡£makefile´øÀ´µÄºÃ´¦¾ÍÊÇ¡ª¡ª¡°×Ô¶¯»¯±àÒ롱£¬Ò»µ©Ð´ºÃ£¬Ö»ÐèÒªÒ»¸ömakeÃüÁÕû¸ö¹¤³ÌÍêÈ«×Ô¶¯±àÒ룬¼«´óµÄÌá¸ßÁËÈí¼þ¿ª·¢µÄЧÂÊ¡£makeÊÇÒ»¸öÃüÁ¾ß£¬ÊÇÒ»¸ö½âÊÍmakefileÖÐÖ¸ÁîµÄÃüÁ¾ß£¬Ò»°ãÀ´Ëµ£¬´ó¶àÊýµÄIDE¶¼ÓÐÕâ¸öÃüÁ±ÈÈ磺DelphiµÄmake£¬Visual C++µÄnmake£¬LinuxÏÂGNUµÄmake¡£¿É¼û£¬makefile¶¼³ÉΪÁËÒ»ÖÖÔÚ¹¤³Ì·½ÃæµÄ±àÒë·½·¨¡£

ÔÚÕâÆªÎĵµÖУ¬½«ÒÔC/C++µÄÔ´Âë×÷ΪÎÒÃÇ»ù´¡£¬ËùÒÔ±ØÈ»É漰һЩ¹ØÓÚC/C++µÄ±àÒëµÄ֪ʶ£¬Ïà¹ØÓÚÕâ·½ÃæµÄÄÚÈÝ£¬»¹Çë¸÷λ²é¿´Ïà¹ØµÄ±àÒëÆ÷µÄÎĵµ¡£ÕâÀïËùĬÈϵıàÒëÆ÷ÊÇUNIXϵÄGCCºÍCC¡£

1 ¹ØÓÚ³ÌÐòµÄ±àÒëºÍÁ´½Ó

ÔÚ´Ë£¬ÎÒÏë¶à˵¹ØÓÚ³ÌÐò±àÒëµÄһЩ¹æ·¶ºÍ·½·¨£¬Ò»°ãÀ´Ëµ£¬ÎÞÂÛÊÇC¡¢C++¡¢»¹ÊÇpas£¬Ê×ÏÈÒª°ÑÔ´Îļþ±àÒë³ÉÖмä´úÂëÎļþ£¬ÔÚWindowsÏÂÒ²¾ÍÊÇ.objÎļþ£¬UNIXÏÂÊÇ.oÎļþ£¬¼´Object File£¬Õâ¸ö¶¯×÷½Ð×ö±àÒ루compile£©¡£È»ºóÔÙ°Ñ´óÁ¿µÄObject FileºÏ³ÉÖ´ÐÐÎļþ£¬Õâ¸ö¶¯×÷½Ð×÷Á´½Ó£¨link£©¡£

±àÒëʱ£¬±àÒëÆ÷ÐèÒªµÄÊÇÓï·¨µÄÕýÈ·£¬º¯ÊýÓë±äÁ¿µÄÉùÃ÷µÄÕýÈ·¡£¶ÔÓÚºóÕߣ¬Í¨³£ÊÇÄãÐèÒª¸æËß±àÒëÆ÷Í·ÎļþµÄËùÔÚλÖã¨Í·ÎļþÖÐÓ¦¸ÃÖ»ÊÇÉùÃ÷£¬¶ø¶¨ÒåÓ¦¸Ã·ÅÔÚC/C++ÎļþÖУ©£¬Ö»ÒªËùÓеÄÓï·¨ÕýÈ·£¬±àÒëÆ÷¾Í¿ÉÒÔ±àÒë³öÖмäÄ¿±êÎļþ¡£Ò»°ãÀ´Ëµ£¬Ã¿¸öÔ´Îļþ¶¼Ó¦¸Ã¶ÔÓ¦ÓÚÒ»¸öÖмäÄ¿±êÎļþ£¨OÎļþ»òÊÇOBJÎļþ£©¡£

Á´½Óʱ£¬Ö÷ÒªÊÇÁ´½Óº¯ÊýºÍÈ«¾Ö±äÁ¿£¬ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÕâЩÖмäÄ¿±êÎļþ£¨OÎļþ»òÊÇOBJÎļþ£©À´Á´½ÓÎÒÃǵÄÓ¦ÓóÌÐò¡£Á´½ÓÆ÷²¢²»¹Üº¯ÊýËùÔÚµÄÔ´Îļþ£¬Ö»¹Üº¯ÊýµÄÖмäÄ¿±êÎļþ£¨Object File£©£¬ÔÚ´ó¶àÊýʱºò£¬ÓÉÓÚÔ´ÎļþÌ«¶à£¬±àÒëÉú³ÉµÄÖмäÄ¿±êÎļþÌ«¶à£¬¶øÔÚÁ´½ÓʱÐèÒªÃ÷ÏÔµØÖ¸³öÖмäÄ¿±êÎļþÃû£¬Õâ¶ÔÓÚ±àÒëºÜ²»·½±ã£¬ËùÒÔ£¬ÎÒÃÇÒª¸øÖмäÄ¿±êÎļþ´ò¸ö°ü£¬ÔÚWindowsÏÂÕâÖÖ°ü½Ð¡°¿âÎļþ¡±£¨LibraryFile)£¬Ò²¾ÍÊÇ .libÎļþ£¬ÔÚUNIXÏ£¬ÊÇArchive File£¬Ò²¾ÍÊÇ .aÎļþ¡£

×ܽáһϣ¬Ô´ÎļþÊ×ÏÈ»áÉú³ÉÖмäÄ¿±êÎļþ£¬ÔÙÓÉÖмäÄ¿±êÎļþÉú³ÉÖ´ÐÐÎļþ¡£ÔÚ±àÒëʱ£¬±àÒëÆ÷Ö»¼ì²â³ÌÐòÓï·¨£¬ºÍº¯Êý¡¢±äÁ¿ÊÇ·ñ±»ÉùÃ÷¡£Èç¹ûº¯Êýδ±»ÉùÃ÷£¬±àÒëÆ÷»á¸ø³öÒ»¸ö¾¯¸æ£¬µ«¿ÉÒÔÉú³ÉObject File¡£¶øÔÚÁ´½Ó³ÌÐòʱ£¬Á´½ÓÆ÷»áÔÚËùÓеÄObject FileÖÐÕÒѰº¯ÊýµÄʵÏÖ£¬Èç¹ûÕÒ²»µ½£¬Äǵ½¾Í»á±¨Á´½Ó´íÎóÂ루Linker Error£©£¬ÔÚVCÏ£¬ÕâÖÖ´íÎóÒ»°ãÊÇ£ºLink 2001´íÎó£¬Òâ˼˵ÊÇ˵£¬Á´½ÓÆ÷δÄÜÕÒµ½º¯ÊýµÄʵÏÖ¡£ÄãÐèÒªÖ¸¶¨º¯ÊýµÄObjectFile.

ºÃ£¬ÑÔ¹éÕý´«£¬GNUµÄmakeÓÐÐí¶àµÄÄÚÈÝ£¬ÏÐÑÔÉÙÐ𣬻¹ÊÇÈÃÎÒÃÇ¿ªÊ¼°É¡£

1 Makefile ½éÉÜ

makeÃüÁîÖ´ÐÐʱ£¬ÐèÒªÒ»¸ö MakefileÎļþ£¬ÒÔ¸æËßmakeÃüÁîÐèÒªÔõôÑùµÄÈ¥±àÒëºÍÁ´½Ó³ÌÐò¡£

Ê×ÏÈ£¬ÎÒÃÇÓÃÒ»¸öʾÀýÀ´ËµÃ÷MakefileµÄÊéд¹æÔò¡£ÒÔ±ã¸ø´ó¼ÒÒ»¸ö¸ÐÐËÈÏʶ¡£Õâ¸öʾÀýÀ´Ô´ÓÚGNUµÄmakeʹÓÃÊֲᣬÔÚÕâ¸öʾÀýÖУ¬ÎÒÃǵŤ³ÌÓÐ8¸öCÎļþ£¬ºÍ3¸öÍ·Îļþ£¬ÎÒÃÇҪдһ¸öMakefileÀ´¸æËßmakeÃüÁîÈçºÎ±àÒëºÍÁ´½ÓÕ⼸¸öÎļþ¡£ÎÒÃǵĹæÔòÊÇ£º

1.Èç¹ûÕâ¸ö¹¤³ÌûÓбàÒë¹ý£¬ÄÇôÎÒÃǵÄËùÓÐCÎļþ¶¼Òª±àÒë²¢±»Á´½Ó¡£

2.Èç¹ûÕâ¸ö¹¤³ÌµÄij¼¸¸öCÎļþ±»Ð޸ģ¬ÄÇôÎÒÃÇÖ»±àÒë±»Ð޸ĵÄCÎļþ£¬²¢Á´½ÓÄ¿±ê³ÌÐò¡£

3.Èç¹ûÕâ¸ö¹¤³ÌµÄÍ·Îļþ±»¸Ä±äÁË£¬ÄÇôÎÒÃÇÐèÒª±àÒëÒýÓÃÁËÕ⼸¸öÍ·ÎļþµÄCÎļþ£¬²¢Á´½ÓÄ¿±ê³ÌÐò¡£

Ö»ÒªÎÒÃǵÄMakefileдµÃ¹»ºÃ£¬ËùÓеÄÕâÒ»ÇУ¬ÎÒÃÇÖ»ÓÃÒ»¸ömakeÃüÁî¾Í¿ÉÒÔÍê³É£¬makeÃüÁî»á×Ô¶¯ÖÇÄܵظù¾Ýµ±Ç°µÄÎļþÐ޸ĵÄÇé¿öÀ´È·¶¨ÄÄЩÎļþÐèÒªÖØ±àÒ룬´Ó¶ø×Ô¼º±àÒëËùÐèÒªµÄÎļþºÍÁ´½ÓÄ¿±ê³ÌÐò¡£

1.1 MakefileµÄ¹æÔò

ÔÚ½²ÊöÕâ¸öMakefile֮ǰ£¬»¹ÊÇÈÃÎÒÃÇÏÈÀ´´ÖÂԵؿ´Ò»¿´MakefileµÄ¹æÔò¡£

target...: prerequisites ...(Ô¤±¸ÖªÊ¶£¬ÏȾöÌõ¼þ)

command£¨Ö¸Á

...

...

----------------------------------------------
---------------------------------

targetÒ²¾ÍÊÇÒ»¸öÄ¿±êÎļþ£¬¿ÉÒÔÊÇObject File£¬Ò²¿ÉÒÔÊÇÖ´ÐÐÎļþ¡£»¹¿ÉÒÔÊÇÒ»¸ö±êÇ©£¨Label£©£¬¶ÔÓÚ±êÇ©ÕâÖÖÌØÐÔ£¬ÔÚºóÐøµÄ¡°Î±Ä¿±ê¡±Õ½ÚÖлáÓÐÐðÊö¡£

prerequisites¾ÍÊÇ£¬ÒªÉú³ÉÄǸötargetËùÐèÒªµÄÎļþ»òÊÇÄ¿±ê¡£

commandÒ²¾ÍÊÇmakeÐèÒªÖ´ÐеÄÃüÁî¡££¨ÈÎÒâµÄShellÃüÁ

ÕâÊÇÒ»¸öÎļþµÄÒÀÀµ¹ØÏµ£¬Ò²¾ÍÊÇ˵£¬targetÕâÒ»¸ö»ò¶à¸öµÄÄ¿±êÎļþÒÀÀµÓÚprerequisitesÖеÄÎļþ£¬ÆäÉú³É¹æÔò¶¨ÒåÔÚcommandÖС£Ëµ°×Ò»µã¾ÍÊÇ˵£¬prerequisitesÖÐÈç¹ûÓÐÒ»¸öÒÔÉϵÄÎļþ±ÈtargetÎļþÒªÐµĻ°£¬commandËù¶¨ÒåµÄÃüÁî¾Í»á±»Ö´ÐС£Õâ¾ÍÊÇMakefileµÄ¹æÔò¡£Ò²¾ÍÊÇMakefileÖÐ×îºËÐĵÄÄÚÈÝ¡£

˵µ½µ×£¬MakefileµÄ¶«Î÷¾ÍÊÇÕâÑùÒ»µã£¬ºÃÏñÎÒµÄÕâÆªÎĵµÒ²¸Ã½áÊøÁË¡£ºÇºÇ¡£»¹²»¾¡È»£¬ÕâÊÇMakefileµÄÖ÷ÏߺͺËÐÄ£¬µ«ÒªÐ´ºÃÒ»¸öMakefile»¹²»¹»£¬ÎÒ»áÒÔºóÃæÒ»µãÒ»µãµØ½áºÏÎҵŤ×÷¾­Ñ鏸ÄãÂýÂýµ½À´¡£ÄÚÈÝ»¹¶à×ÅÄØ¡££©

1.2 Ò»¸öʾÀý

ÕýÈçÇ°ÃæËù˵µÄ£¬Èç¹ûÒ»¸ö¹¤³ÌÓÐ3¸öÍ·Îļþ£¬ºÍ8¸öCÎļþ£¬ÎÒÃÇΪÁËÍê³ÉÇ°ÃæËùÊöµÄÄÇÈý¸ö¹æÔò£¬ÎÒÃǵÄMakefileÓ¦¸ÃÊÇÏÂÃæµÄÕâ¸öÑù×ӵġ£

edit : main.o kbd.o command.o display.o insert.osearch.o files.o utils.o

cc-o edit main.o kbd.o command.o display.o insert.o search.o files.outils.o
main.o : main.c defs.h
cc-c main.c
kbd.o : kbd.c defs.hcommand.h
cc-c kbd.c
command.o : command.cdefs.h command.h
cc-c command.c
display.o : display.cdefs.h buffer.h
cc-c display.c
insert.o : insert.cdefs.h buffer.h
cc-c insert.c
search.o : search.cdefs.h buffer.h
cc-c search.c
files.o : files.c defs.hbuffer.h command.h
cc-c files.c
utils.o : utils.c defs.h
cc-c utils.c
clean :
rmedit main.o kbd.o command.o display.o insert.o search.o files.o utils.o

·´Ð±¸Ü£¨\£©ÊÇ»»ÐзûµÄÒâ˼¡£ÕâÑù±È½Ï±ãÓÚMakefileµÄÒ×¶Á¡£ÎÒÃÇ¿ÉÒÔ°ÑÕâ¸öÄÚÈݱ£´æÔÚÎļþΪ¡°Makefile¡±»ò¡°makefile¡±µÄÎļþÖУ¬È»ºóÔÚ¸ÃĿ¼ÏÂÖ±½ÓÊäÈëÃüÁî¡°make¡±¾Í¿ÉÒÔÉú³ÉÖ´ÐÐÎļþedit¡£Èç¹ûҪɾ³ýÖ´ÐÐÎļþºÍËùÓеÄÖмäÄ¿±êÎļþ£¬ÄÇô£¬Ö»Òª¼òµ¥µØÖ´ÐÐһϡ°make clean¡±¾Í¿ÉÒÔÁË¡£

ÔÚÕâ¸ömakefileÖУ¬Ä¿±êÎļþ£¨target£©°üº¬£ºÖ´ÐÐÎļþeditºÍÖмäÄ¿±êÎļþ£¨*.o£©£¬ÒÀÀµÎļþ£¨prerequisites£©¾ÍÊÇðºÅºóÃæµÄÄÇЩ .c ÎļþºÍ .hÎļþ¡£Ã¿Ò»¸ö .o Îļþ¶¼ÓÐÒ»×éÒÀÀµÎļþ£¬¶øÕâЩ .o ÎļþÓÖÊÇÖ´ÐÐÎļþ edit µÄÒÀÀµÎļþ¡£ÒÀÀµ¹ØÏµµÄʵÖÊÉϾÍÊÇ˵Ã÷ÁËÄ¿±êÎļþÊÇÓÉÄÄЩÎļþÉú³ÉµÄ£¬»»ÑÔÖ®£¬Ä¿±êÎļþÊÇÄÄЩÎļþ¸üеġ£

ÔÚ¶¨ÒåºÃÒÀÀµ¹ØÏµºó£¬ºóÐøµÄÄÇÒ»Ðж¨ÒåÁËÈçºÎÉú³ÉÄ¿±êÎļþµÄ²Ù×÷ϵͳÃüÁһ¶¨ÒªÒÔÒ»¸öTab¼ü×÷Ϊ¿ªÍ·¡£¼Çס£¬make²¢²»¹ÜÃüÁîÊÇÔõô¹¤×÷µÄ£¬ËûÖ»¹ÜÖ´ÐÐËù¶¨ÒåµÄÃüÁî¡£make»á±È½ÏtargetsÎļþºÍprerequisitesÎļþµÄÐÞ¸ÄÈÕÆÚ£¬Èç¹ûprerequisitesÎļþµÄÈÕÆÚÒª±ÈtargetsÎļþµÄÈÕÆÚҪУ¬»òÕßtarget²»´æÔڵϰ£¬ÄÇô£¬make¾Í»áÖ´ÐкóÐø¶¨ÒåµÄÃüÁî¡£

ÕâÀïҪ˵Ã÷Ò»µãµÄÊÇ£¬clean²»ÊÇÒ»¸öÎļþ£¬ËüÖ»²»¹ýÊÇÒ»¸ö¶¯×÷Ãû×Ö£¬ÓеãÏñCÓïÑÔÖеÄlableÒ»Ñù£¬ÆäðºÅºóʲôҲûÓУ¬ÄÇô£¬make¾Í²»»á×Ô¶¯È¥ÕÒÎļþµÄÒÀÀµÐÔ£¬Ò²¾Í²»»á×Ô¶¯Ö´ÐÐÆäºóËù¶¨ÒåµÄÃüÁî¡£ÒªÖ´ÐÐÆäºóµÄÃüÁ¾ÍÒªÔÚmakeÃüÁîºóÃ÷ÏÔµÃÖ¸³öÕâ¸ölableµÄÃû×Ö¡£ÕâÑùµÄ·½·¨·Ç³£ÓÐÓã¬ÎÒÃÇ¿ÉÒÔÔÚÒ»¸ömakefileÖж¨Òå²»ÓõıàÒë»òÊǺͱàÒëÎ޹صÄÃüÁ±ÈÈç³ÌÐòµÄ´ò°ü£¬³ÌÐòµÄ±¸·Ý£¬µÈµÈ¡£

1.3 makeÊÇÈçºÎ¹¤×÷µÄ

ÔÚĬÈϵķ½Ê½Ï£¬Ò²¾ÍÊÇÎÒÃÇÖ»ÊäÈëmakeÃüÁî¡£ÄÇô£¬

make»áÔÚµ±Ç°Ä¿Â¼ÏÂÕÒÃû×ֽС°Makefile¡±»ò¡°makefile¡±µÄÎļþ¡£

Èç¹ûÕÒµ½£¬Ëü»áÕÒÎļþÖеĵÚÒ»¸öÄ¿±êÎļþ£¨target£©£¬ÔÚÉÏÃæµÄÀý×ÓÖУ¬Ëû»áÕÒµ½¡°edit¡±Õâ¸öÎļþ£¬²¢°ÑÕâ¸öÎļþ×÷Ϊ×îÖÕµÄÄ¿±êÎļþ¡£

Èç¹ûeditÎļþ²»´æÔÚ£¬»òÊÇeditËùÒÀÀµµÄºóÃæµÄ .o ÎļþµÄÎļþÐÞ¸Äʱ¼äÒª±ÈeditÕâ¸öÎļþУ¬ÄÇô£¬Ëû¾Í»áÖ´ÐкóÃæËù¶¨ÒåµÄÃüÁîÀ´Éú³ÉeditÕâ¸öÎļþ¡£

Èç¹ûeditËùÒÀÀµµÄ.oÎļþÒ²´æÔÚ£¬ÄÇômake»áÔÚµ±Ç°ÎļþÖÐÕÒÄ¿±êΪ.oÎļþµÄÒÀÀµÐÔ£¬Èç¹ûÕÒµ½ÔòÔÙ¸ù¾ÝÄÇÒ»¸ö¹æÔòÉú³É.oÎļþ¡££¨ÕâÓеãÏñÒ»¸ö¶ÑÕ»µÄ¹ý³Ì£©

µ±È»£¬ÄãµÄCÎļþºÍHÎļþÊÇ´æÔÚµÄÀ²£¬ÓÚÊÇmake»áÉú³É .o Îļþ£¬È»ºóÔÙÓà .o ÎļþÉùÃ÷makeµÄÖÕ¼«ÈÎÎñ£¬Ò²¾ÍÊÇÖ´ÐÐÎļþeditÁË¡£

Õâ¾ÍÊÇÕû¸ömakeµÄÒÀÀµÐÔ£¬make»áÒ»²ãÓÖÒ»²ãµØÈ¥ÕÒÎļþµÄÒÀÀµ¹ØÏµ£¬Ö±µ½×îÖÕ±àÒë³öµÚÒ»¸öÄ¿±êÎļþ¡£ÔÚÕÒѰµÄ¹ý³ÌÖУ¬Èç¹û³öÏÖ´íÎ󣬱ÈÈç×îºó±»ÒÀÀµµÄÎļþÕÒ²»µ½£¬ÄÇômake¾Í»áÖ±½ÓÍ˳ö£¬²¢±¨´í£¬¶ø¶ÔÓÚËù¶¨ÒåµÄÃüÁîµÄ´íÎ󣬻òÊDZàÒë²»³É¹¦£¬make¸ù±¾²»Àí¡£makeÖ»¹ÜÎļþµÄÒÀÀµÐÔ£¬¼´£¬Èç¹ûÔÚÎÒÕÒÁËÒÀÀµ¹ØÏµÖ®ºó£¬Ã°ºÅºóÃæµÄÎļþ»¹ÊDz»ÔÚ£¬ÄÇô¶Ô²»Æð£¬ÎҾͲ»¹¤×÷À²¡£

ͨ¹ýÉÏÊö·ÖÎö£¬ÎÒÃÇÖªµÀ£¬ÏñcleanÕâÖÖ£¬Ã»Óб»µÚÒ»¸öÄ¿±êÎļþÖ±½Ó»ò¼ä½Ó¹ØÁª£¬ÄÇôËüºóÃæËù¶¨ÒåµÄÃüÁ²»»á±»×Ô¶¯Ö´ÐУ¬²»¹ý£¬ÎÒÃÇ¿ÉÒÔÏÔʾҪmakeÖ´ÐС£¼´ÃüÁ¡ª¡°make clean¡±£¬ÒÔ´ËÀ´Çå³ýËùÓеÄÄ¿±êÎļþ£¬ÒÔ±ãÖØ±àÒë¡£

ÓÚÊÇÔÚÎÒÃDZà³ÌÖУ¬Èç¹ûÕâ¸ö¹¤³ÌÒѱ»±àÒë¹ýÁË£¬µ±ÎÒÃÇÐÞ¸ÄÁËÆäÖÐÒ»¸öÔ´Îļþ£¬±ÈÈçfile.c£¬ÄÇô¸ù¾ÝÎÒÃǵÄÒÀÀµÐÔ£¬ÎÒÃǵÄÄ¿±êfile.o»á±»ÖرàÒ루Ҳ¾ÍÊÇÔÚÕâ¸öÒÀÐÔ¹ØÏµºóÃæËù¶¨ÒåµÄÃüÁ£¬ÓÚÊÇfile.oµÄÎļþÒ²ÊÇ×îеÄÀ²£¬ÓÚÊÇfile.oµÄÎļþÐÞ¸Äʱ¼äÒª±ÈeditҪУ¬ËùÒÔeditÒ²»á±»ÖØÐÂÁ´½ÓÁË£¨Ïê¼ûeditÄ¿±êÎļþºó¶¨ÒåµÄÃüÁ¡£¶øÈç¹ûÎÒÃǸıäÁË¡°command.h¡±£¬ÄÇô£¬kdb.o¡¢command.oºÍfiles.o¶¼»á±»ÖرàÒ룬²¢ÇÒ£¬edit»á±»ÖØÁ´½Ó¡£

1.4 makefileÖÐʹÓñäÁ¿

ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÏÈÈÃÎÒÃÇ¿´¿´editµÄ¹æÔò£º

edit : main.okbd.o command.o display.o insert.o search.o files.o utils.o

cc -o edit main.okbd.o command.o display.o insert.o search.o files.o utils.o

ÎÒÃÇ¿ÉÒÔ¿´µ½[.o]ÎļþµÄ×Ö·û´®±»Öظ´ÁËÁ½´Î£¬Èç¹ûÎÒÃǵŤ³ÌÐèÒª¼ÓÈëÒ»¸öеÄ[.o]Îļþ£¬ÄÇôÎÒÃÇÐèÒªÔÚÁ½¸öµØ·½¼Ó£¨Ó¦¸ÃÊÇÈý¸öµØ·½£¬»¹ÓÐÒ»¸öµØ·½ÔÚcleanÖУ©¡£µ±È»£¬ÎÒÃǵÄmakefile²¢²»¸´ÔÓ£¬ËùÒÔÔÚÁ½¸öµØ·½¼ÓÒ²²»ÀÛ£¬µ«Èç¹ûmakefile±äµÃ¸´ÔÓ£¬ÄÇôÎÒÃǾÍÓпÉÄÜ»áÍüµôÒ»¸öÐèÒª¼ÓÈëµÄµØ·½£¬¶øµ¼Ö±àÒëʧ°Ü¡£ËùÒÔ£¬ÎªÁËmakefileµÄÒ×ά»¤£¬ÔÚmakefileÖÐÎÒÃÇ¿ÉÒÔʹÓñäÁ¿¡£makefileµÄ±äÁ¿Ò²¾ÍÊÇÒ»¸ö×Ö·û´®£¬Àí½â³ÉCÓïÑÔÖеĺê¿ÉÄÜ»á¸üºÃ¡£±ÈÈ磬ÎÒÃÇÉùÃ÷Ò»¸ö±äÁ¿£¬½Ðobjects,OBJECTS, objs, OBJS, obj, »òÊÇ OBJ£¬·´Õý²»¹ÜʲôÀ²£¬Ö»ÒªÄܹ»±íʾobjÎļþ¾ÍÐÐÁË¡£ÎÒÃÇÔÚmakefileÒ»¿ªÊ¼¾ÍÕâÑù¶¨Ò壺

objects = main.okbd.o command.o display.o insert.o search.o files.o utils.o

ÓÚÊÇ£¬ÎÒÃǾͿÉÒԺܷ½±ãµØÔÚÎÒÃǵÄmakefileÖÐÒÔ¡°$(objects)¡±µÄ·½Ê½À´Ê¹ÓÃÕâ¸ö±äÁ¿ÁË£¬ÓÚÊÇÎÒÃǵĸÄÁ¼°æmakefile¾Í±ä³ÉÏÂÃæÕâ¸öÑù×Ó£º

objects= main.o kbd.o command.o display.o insert.osearch.o files.o utils.o
edit: $(objects)
cc-o edit $(objects)
main.o: main.c defs.h
cc-c main.c
kbd.o: kbd.c defs.h command.h
cc-c kbd.c
command.o: command.c defs.h command.h
cc-c command.c
display.o: display.c defs.h buffer.h
cc-c display.c
insert.o: insert.c defs.h buffer.h
cc-c insert.c
search.o: search.c defs.h buffer.h
cc-c search.c
files.o: files.c defs.h buffer.h command.h
cc-c files.c
utils.o: utils.c defs.h
cc-c utils.c
clean:
rmedit $(objects)

ÓÚÊÇÈç¹ûÓÐÐ嵀 .o Îļþ¼ÓÈ룬ÎÒÃÇÖ»Ðè¼òµ¥µØÐÞ¸ÄÒ»ÏÂobjects ±äÁ¿¾Í¿ÉÒÔÁË¡£

¹ØÓÚ±äÁ¿¸ü¶àµÄ»°Ì⣬ÎÒ»áÔÚºóÐø¸øÄãÒ»Ò»µÀÀ´¡£

1.5 ÈÃmake×Ô¶¯ÍƵ¼

GNUµÄmakeºÜÇ¿´ó£¬Ëü¿ÉÒÔ×Ô¶¯ÍƵ¼ÎļþÒÔ¼°ÎļþÒÀÀµ¹ØÏµºóÃæµÄÃüÁÓÚÊÇÎÒÃǾÍû±ØÒªÈ¥ÔÚÿһ¸ö[.o]Îļþºó¶¼Ð´ÉÏÀàËÆµÄÃüÁÒòΪ£¬ÎÒÃǵÄmake»á×Ô¶¯Ê¶±ð£¬²¢×Ô¼ºÍƵ¼ÃüÁî¡£Ö»Òªmake¿´µ½Ò»¸ö[.o]Îļþ£¬Ëü¾Í»á×Ô¶¯µÄ°Ñ[.c]Îļþ¼ÓÔÚÒÀÀµ¹ØÏµÖУ¬Èç¹ûmakeÕÒµ½Ò»¸öwhatever.o£¬ÄÇôwhatever.c£¬¾Í»áÊÇwhatever.oµÄÒÀÀµÎļþ¡£²¢ÇÒ cc -c whatever.c Ò²»á±»ÍƵ¼³öÀ´£¬ÓÚÊÇ£¬ÎÒÃǵÄmakefileÔÙÒ²²»ÓÃдµÃÕâô¸´ÔÓ¡£ÎÒÃǵÄÊÇеÄmakefileÓÖ³ö¯ÁË¡£

objects= main.o kbd.o command.o display.o insert.o search.o files.o utils.o
edit :$(objects)
cc-o edit $(objects)
main.o: defs.h
kbd.o: defs.h command.h
command.o: defs.h command.h
display.o: defs.h buffer.h
insert.o: defs.h buffer.h
search.o: defs.h buffer.h
files.o: defs.h buffer.h command.h
utils.o: defs.h
.PHONY: clean
clean:
rmedit $(objects)

ÕâÖÖ·½·¨£¬Ò²¾ÍÊÇmakeµÄ¡°Òþ»Þ¹æÔò¡±¡£ÉÏÃæÎļþÄÚÈÝÖУ¬¡°.PHONY¡±±íʾ£¬cleanÊǸöαĿ±êÎļþ¡£

¹ØÓÚ¸üΪÏêϸµÄ¡°Òþ»Þ¹æÔò¡±ºÍ¡°Î±Ä¿±êÎļþ¡±£¬ÎÒ»áÔÚºóÐø¸øÄãÒ»Ò»µÀÀ´¡£

1.6 ÁíÀà·ç¸ñµÄmakefile

¼´È»ÎÒÃǵÄmake¿ÉÒÔ×Ô¶¯ÍƵ¼ÃüÁÄÇôÎÒ¿´µ½ÄǶÑ[.o]ºÍ[.h]µÄÒÀÀµ¾ÍÓе㲻ˬ£¬ÄÇô¶àµÄÖØ¸´µÄ[.h]£¬Äܲ»ÄÜ°ÑÆäÊÕ£ÆðÀ´£¬ºÃ°É£¬Ã»ÓÐÎÊÌ⣬Õâ¸ö¶ÔÓÚmakeÀ´ËµºÜÈÝÒ×£¬Ë­½ÐËüÌṩÁË×Ô¶¯ÍƵ¼ÃüÁîºÍÎļþµÄ¹¦ÄÜÄØ£¿À´¿´¿´×îзç¸ñµÄmakefile°É¡£

objects= main.o kbd.o command.o display.o insert.o search.o files.o utils.o
edit: $(objects)
cc-o edit $(objects)
$(objects): defs.h
kbd.ocommand.o files.o : command.h
display.oinsert.o search.o files.o : buffer.h
.PHONY : clean //¡°.PHONY¡±±íʾ£¬cleanÊǸöαĿ±êÎļþ
clean:
rmedit $(objects)

ÕâÖÖ·ç¸ñ£¬ÈÃÎÒÃǵÄmakefile±äµÃºÜ¼òµ¥£¬µ«ÎÒÃǵÄÎļþÒÀÀµ¹ØÏµ¾ÍÏÔµÃÓеãÁèÂÒÁË¡£ÓãºÍÐÜÕÆ²»¿É¼æµÃ¡£»¹¿´ÄãµÄϲºÃÁË¡£ÎÒÊDz»Ï²»¶ÕâÖÖ·ç¸ñµÄ£¬Ò»ÊÇÎļþµÄÒÀÀµ¹ØÏµ¿´²»Çå³þ£¬¶þÊÇÈç¹ûÎļþÒ»¶à£¬Òª¼ÓÈ뼸¸öеÄ.oÎļþ£¬ÄǾÍÀí²»Çå³þÁË¡£

1.7 Çå¿ÕÄ¿±êÎļþµÄ¹æÔò

ÿ¸öMakefileÖж¼Ó¦¸Ãдһ¸öÇå¿ÕÄ¿±êÎļþ£¨.oºÍÖ´ÐÐÎļþ£©µÄ¹æÔò£¬Õâ²»½ö±ãÓÚÖØ±àÒ룬ҲºÜÀûÓÚ±£³ÖÎļþµÄÇå½à¡£ÕâÊÇÒ»¸ö¡°ÐÞÑø¡±£¨ºÇºÇ£¬»¹¼ÇµÃÎҵġ¶±à³ÌÐÞÑø¡·Â𣩡£Ò»°ãµÄ·ç¸ñ¶¼ÊÇ£º

clean:

rmedit $(objects)

¸üΪÎȽ¡µÄ×ö·¨ÊÇ£º

.PHONY : clean

clean:

-rmedit $(objects)

Ç°ÃæËµ¹ý£¬.PHONYÒâ˼±íʾcleanÊÇÒ»¸ö¡°Î±Ä¿±ê¡±¡£¶øÔÚrmÃüÁîÇ°Ãæ¼ÓÁËÒ»¸öС¼õºÅµÄÒâ˼¾ÍÊÇ£¬Ò²ÐíijЩÎļþ³öÏÖÎÊÌ⣬µ«²»Òª¹Ü£¬¼ÌÐø×öºóÃæµÄÊ¡£µ±È»£¬cleanµÄ¹æÔò²»Òª·ÅÔÚÎļþµÄ¿ªÍ·£¬²»È»£¬Õâ¾Í»á±ä³ÉmakeµÄĬÈÏÄ¿±ê£¬ÏàÐÅË­Ò²²»Ô¸ÒâÕâÑù¡£²»³ÉÎÄµÄ¹æ¾ØÊÇ¡ª¡ª¡°clean´ÓÀ´¶¼ÊÇ·ÅÔÚÎļþµÄ×îºó¡±¡£

ÉÏÃæ¾ÍÊÇÒ»¸ömakefileµÄ¸Åò£¬Ò²ÊÇmakefileµÄ»ù´¡£¬ÏÂÃæ»¹ÓкܶàmakefileµÄÏà¹ØÏ¸½Ú£¬×¼±¸ºÃÁËÂð£¿×¼±¸ºÃÁ˾ÍÀ´¡£

2 Makefile ×ÜÊö

2.1 MakefileÀïÓÐʲô£¿

MakefileÀïÖ÷Òª°üº¬ÁËÎå¸ö¶«Î÷£ºÏÔʽ¹æÔò¡¢Òþ»Þ¹æÔò¡¢±äÁ¿¶¨Òå¡¢ÎļþָʾºÍ×¢ÊÍ¡£

1. ÏÔʽ¹æÔò¡£ÏÔʽ¹æÔò˵Ã÷ÁË£¬ÈçºÎÉú³ÉÒ»¸ö»ò¶àµÄµÄÄ¿±êÎļþ¡£ÕâÊÇÓÉMakefileµÄÊéдÕßÃ÷ÏÔÖ¸³ö£¬ÒªÉú³ÉµÄÎļþ£¬ÎļþµÄÒÀÀµÎļþ£¬Éú³ÉµÄÃüÁî¡£

2. Òþ»Þ¹æÔò¡£ÓÉÓÚÎÒÃǵÄmakeÓÐ×Ô¶¯ÍƵ¼µÄ¹¦ÄÜ£¬ËùÒÔÒþ»ÞµÄ¹æÔò¿ÉÒÔÈÃÎÒÃDZȽϴֲڵؼòÂÔµØÊéдMakefile£¬ÕâÊÇÓÉmakeËùÖ§³ÖµÄ¡£

3. ±äÁ¿µÄ¶¨Òå¡£ÔÚMakefileÖÐÎÒÃÇÒª¶¨ÒåһϵÁеıäÁ¿£¬±äÁ¿Ò»°ã¶¼ÊÇ×Ö·û´®£¬Õâ¸öÓеãÄãCÓïÑÔÖеĺ꣬µ±Makefile±»Ö´ÐÐʱ£¬ÆäÖеıäÁ¿¶¼»á±»À©Õ¹µ½ÏàÓ¦µÄÒýÓÃλÖÃÉÏ¡£

4. Îļþָʾ¡£Æä°üÀ¨ÁËÈý¸ö²¿·Ö£¬Ò»¸öÊÇÔÚÒ»¸öMakefileÖÐÒýÓÃÁíÒ»¸öMakefile£¬¾ÍÏñCÓïÑÔÖеÄincludeÒ»Ñù£»ÁíÒ»¸öÊÇÖ¸¸ù¾ÝijЩÇé¿öÖ¸¶¨MakefileÖеÄÓÐЧ²¿·Ö£¬¾ÍÏñCÓïÑÔÖеÄÔ¤±àÒë#ifÒ»Ñù£»»¹ÓоÍÊǶ¨ÒåÒ»¸ö¶àÐеÄÃüÁî¡£ÓйØÕâÒ»²¿·ÖµÄÄÚÈÝ£¬ÎÒ»áÔÚºóÐøµÄ²¿·ÖÖн²Êö¡£

5. ×¢ÊÍ¡£MakefileÖÐÖ»ÓÐÐÐ×¢ÊÍ£¬ºÍUNIXµÄShell½Å±¾Ò»Ñù£¬Æä×¢ÊÍÊÇÓá°#¡±×Ö·û£¬Õâ¸ö¾ÍÏñC/C++Öеġ°//¡±Ò»Ñù¡£Èç¹ûÄãÒªÔÚÄãµÄMakefileÖÐʹÓá°#¡±×Ö·û£¬¿ÉÒÔÓ÷´Ð±¿ò½øÐÐתÒ壬È磺¡°\#¡±¡£

×îºó£¬»¹ÖµµÃÒ»ÌáµÄÊÇ£¬ÔÚMakefileÖеÄÃüÁ±ØÐëÒªÒÔ[Tab]¼ü¿ªÊ¼¡£

2.2MakefileµÄÎļþÃû

ĬÈϵÄÇé¿öÏ£¬makeÃüÁî»áÔÚµ±Ç°Ä¿Â¼Ï°´Ë³ÐòÕÒѰÎļþÃûΪ¡°GNUmakefile¡±¡¢¡°makefile¡±¡¢¡°Makefile¡±µÄÎļþ£¬ÕÒµ½Á˽âÊÍÕâ¸öÎļþ¡£ÔÚÕâÈý¸öÎļþÃûÖУ¬×îºÃʹÓá°Makefile¡±Õâ¸öÎļþÃû£¬ÒòΪ£¬Õâ¸öÎļþÃûµÚÒ»¸ö×Ö·ûΪ´óд£¬ÕâÑùÓÐÒ»ÖÖÏÔÄ¿µÄ¸Ð¾õ¡£×îºÃ²»ÒªÓá°GNUmakefile¡±£¬Õâ¸öÎļþÊÇGNUµÄmakeʶ±ðµÄ¡£ÓÐÁíÍâһЩmakeÖ»¶ÔȫСдµÄ¡°makefile¡±ÎļþÃûÃô¸Ð£¬µ«ÊÇ»ù±¾ÉÏÀ´Ëµ£¬´ó¶àÊýµÄmake¶¼Ö§³Ö¡°makefile¡±ºÍ¡°Makefile¡±ÕâÁ½ÖÖĬÈÏÎļþÃû¡£

µ±È»£¬Äã¿ÉÒÔʹÓñðµÄÎļþÃûÀ´ÊéдMakefile£¬±ÈÈ磺¡°Make.Linux¡±£¬¡°Make.Solaris¡±£¬¡°Make.AIX¡±µÈ£¬Èç¹ûÒªÖ¸¶¨Ìض¨µÄMakefile£¬Äã¿ÉÒÔʹÓÃmakeµÄ¡°-f¡±ºÍ¡°--file¡±²ÎÊý£¬È磺make -f Make.Linux»òmake --file Make.AIX¡£

2.3 ÒýÓÃÆäËüµÄMakefile

ÔÚMakefileʹÓÃinclude¹Ø¼ü×Ö¿ÉÒ԰ѱðµÄMakefile°üº¬½øÀ´£¬ÕâºÜÏñCÓïÑÔµÄ#include£¬±»°üº¬µÄÎļþ»áÔ­Ä£Ô­ÑùµÄ·ÅÔÚµ±Ç°ÎļþµÄ°üº¬Î»Öá£includeµÄÓï·¨ÊÇ£º

include<filename>filename¿ÉÒÔÊǵ±Ç°²Ù×÷ϵͳShellµÄÎļþģʽ£¨¿ÉÒÔ±£º¬Â·¾¶ºÍͨÅä·û£©

ÔÚincludeÇ°Ãæ¿ÉÒÔÓÐһЩ¿Õ×Ö·û£¬µ«ÊǾø²»ÄÜÊÇ[Tab]¼ü¿ªÊ¼¡£includeºÍ¿ÉÒÔÓÃÒ»¸ö»ò¶à¸ö¿Õ¸ñ¸ô¿ª¡£¾Ù¸öÀý×Ó£¬ÄãÓÐÕâÑù¼¸¸öMakefile£ºa.mk¡¢b.mk¡¢c.mk£¬»¹ÓÐÒ»¸öÎļþ½Ðfoo.make£¬ÒÔ¼°Ò»¸ö±äÁ¿$(bar)£¬Æä°üº¬ÁËe.mkºÍf.mk£¬ÄÇô£¬ÏÂÃæµÄÓï¾ä£º

include foo.make *.mk$(bar)

µÈ¼ÛÓÚ£º

include foo.make a.mkb.mk c.mk e.mk f.mk

makeÃüÁʼʱ£¬»á°ÑÕÒѰincludeËùÖ¸³öµÄÆäËüMakefile£¬²¢°ÑÆäÄÚÈݰ²ÖÃÔÚµ±Ç°µÄλÖ᣾ͺÃÏñC/C++µÄ#includeÖ¸ÁîÒ»Ñù¡£Èç¹ûÎļþ¶¼Ã»ÓÐÖ¸¶¨¾ø¶Ô·¾¶»òÊÇÏà¶Ô·¾¶µÄ»°£¬make»áÔÚµ±Ç°Ä¿Â¼ÏÂÊ×ÏÈѰÕÒ£¬Èç¹ûµ±Ç°Ä¿Â¼ÏÂûÓÐÕÒµ½£¬ÄÇô£¬make»¹»áÔÚÏÂÃæµÄ¼¸¸öĿ¼ÏÂÕÒ£º

1.Èç¹ûmakeÖ´ÐÐʱ£¬ÓС°-I¡±»ò¡°--include-dir¡±²ÎÊý£¬ÄÇômake¾Í»áÔÚÕâ¸ö²ÎÊýËùÖ¸¶¨µÄĿ¼ÏÂȥѰÕÒ¡£

2.Èç¹ûĿ¼/include£¨Ò»°ãÊÇ£º/usr/local/bin»ò/usr/include£©´æÔڵϰ£¬makeÒ²»áÈ¥ÕÒ¡£

Èç¹ûÓÐÎļþûÓÐÕÒµ½µÄ»°£¬make»áÉú³ÉÒ»Ìõ¾¯¸æÐÅÏ¢£¬µ«²»»áÂíÉϳöÏÖÖÂÃü´íÎó¡£Ëü»á¼ÌÐøÔØÈëÆäËüµÄÎļþ£¬Ò»µ©Íê³ÉmakefileµÄ¶ÁÈ¡£¬make»áÔÙÖØÊÔÕâЩûÓÐÕÒµ½£¬»òÊDz»ÄܶÁÈ¡µÄÎļþ£¬Èç¹û»¹ÊDz»ÐУ¬make²Å»á³öÏÖÒ»ÌõÖÂÃüÐÅÏ¢¡£Èç¹ûÄãÏëÈÃmake²»ÀíÄÇЩÎÞ·¨¶ÁÈ¡µÄÎļþ£¬¶ø¼ÌÐøÖ´ÐУ¬Äã¿ÉÒÔÔÚincludeǰ¼ÓÒ»¸ö¼õºÅ¡°-¡±¡£È磺

-include<filename>

Æä±íʾ£¬ÎÞÂÛinclude¹ý³ÌÖгöÏÖʲô´íÎ󣬶¼²»Òª±¨´í¼ÌÐøÖ´ÐС£ºÍÆäËü°æ±¾make¼æÈݵÄÏà¹ØÃüÁîÊÇsinclude£¬Æä×÷ÓúÍÕâÒ»¸öÊÇÒ»ÑùµÄ¡£

2.4 »·¾³±äÁ¿ MAKEFILES

Èç¹ûÄãµÄµ±Ç°»·¾³Öж¨ÒåÁË»·¾³±äÁ¿MAKEFILES£¬ÄÇô£¬make»á°ÑÕâ¸ö±äÁ¿ÖеÄÖµ×öÒ»¸öÀàËÆÓÚincludeµÄ¶¯×÷¡£Õâ¸ö±äÁ¿ÖеÄÖµÊÇÆäËüµÄMakefile£¬Óÿոñ·Ö¸ô¡£Ö»ÊÇ£¬ËüºÍinclude²»Í¬µÄÊÇ£¬´ÓÕâ¸ö»·¾³±äÖÐÒýÈëµÄMakefileµÄ¡°Ä¿±ê¡±²»»áÆð×÷Óã¬Èç¹û»·¾³±äÁ¿Öж¨ÒåµÄÎļþ·¢ÏÖ´íÎó£¬makeÒ²»á²»Àí¡£

µ«ÊÇÔÚÕâÀïÎÒ»¹Êǽ¨Ò鲻ҪʹÓÃÕâ¸ö»·¾³±äÁ¿£¬ÒòΪֻҪÕâ¸ö±äÁ¿Ò»±»¶¨Ò壬ÄÇôµ±ÄãʹÓÃmakeʱ£¬ËùÓеÄMakefile¶¼»áÊܵ½ËüµÄÓ°Ï죬Õâ¾ø²»ÊÇÄãÏë¿´µ½µÄ¡£ÔÚÕâÀïÌáÕâ¸öÊ£¬Ö»ÊÇΪÁ˸æËß´ó¼Ò£¬Ò²ÐíÓÐʱºòÄãµÄMakefile³öÏÖÁ˹ÖÊ£¬ÄÇôÄã¿ÉÒÔ¿´¿´µ±Ç°»·¾³ÖÐÓÐûÓж¨ÒåÕâ¸ö±äÁ¿¡£

2.5 makeµÄ¹¤×÷·½Ê½

GNUµÄmake¹¤×÷ʱµÄÖ´Ðв½ÖèÈëÏ£º£¨ÏëÀ´ÆäËüµÄmakeÒ²ÊÇÀàËÆ£©

1. ¶ÁÈëËùÓеÄMakefile¡£

2. ¶ÁÈë±»includeµÄÆäËüMakefile¡£

3. ³õʼ»¯ÎļþÖеıäÁ¿¡£

4. ÍÆµ¼Òþ»Þ¹æÔò£¬²¢·ÖÎöËùÓйæÔò¡£

5. ΪËùÓеÄÄ¿±êÎļþ´´½¨ÒÀÀµ¹ØÏµÁ´¡£

6. ¸ù¾ÝÒÀÀµ¹ØÏµ£¬¾ö¶¨ÄÄЩĿ±êÒªÖØÐÂÉú³É¡£

7. Ö´ÐÐÉú³ÉÃüÁî¡£

1-5²½ÎªµÚÒ»¸ö½×¶Î£¬6-7ΪµÚ¶þ¸ö½×¶Î¡£µÚÒ»¸ö½×¶ÎÖУ¬Èç¹û¶¨ÒåµÄ±äÁ¿±»Ê¹ÓÃÁË£¬ÄÇô£¬make»á°ÑÆäÕ¹¿ªÔÚʹÓõÄλÖᣵ«make²¢²»»áÍêÈ«ÂíÉÏÕ¹¿ª£¬makeʹÓõÄÊÇÍÏÑÓÕ½Êõ£¬Èç¹û±äÁ¿³öÏÖÔÚÒÀÀµ¹ØÏµµÄ¹æÔòÖУ¬ÄÇô½öµ±ÕâÌõÒÀÀµ±»¾ö¶¨ÒªÊ¹ÓÃÁË£¬±äÁ¿²Å»áÔÚÆäÄÚ²¿Õ¹¿ª¡£

µ±È»£¬Õâ¸ö¹¤×÷·½Ê½Äã²»Ò»¶¨ÒªÇå³þ£¬µ«ÊÇÖªµÀÕâ¸ö·½Ê½ÄãÒ²»á¶Ômake¸üΪÊìϤ¡£ÓÐÁËÕâ¸ö»ù´¡£¬ºóÐø²¿·ÖÒ²¾ÍÈÝÒ׿´¶®ÁË¡£

3 MakefileÊéд¹æÔò

¹æÔò°üº¬Á½¸ö²¿·Ö£¬Ò»¸öÊÇÒÀÀµ¹ØÏµ£¬Ò»¸öÊÇÉú³ÉÄ¿±êµÄ·½·¨¡£

ÔÚMakefileÖУ¬¹æÔòµÄ˳ÐòÊǺÜÖØÒªµÄ£¬ÒòΪ£¬MakefileÖÐÖ»Ó¦¸ÃÓÐÒ»¸ö×îÖÕÄ¿±ê£¬ÆäËüµÄÄ¿±ê¶¼ÊDZ»Õâ¸öÄ¿±êËùÁ¬´ø³öÀ´µÄ£¬ËùÒÔÒ»¶¨ÒªÈÃmakeÖªµÀÄãµÄ×îÖÕÄ¿±êÊÇʲô¡£Ò»°ãÀ´Ëµ£¬¶¨ÒåÔÚMakefileÖеÄÄ¿±ê¿ÉÄÜ»áÓкܶ࣬µ«ÊǵÚÒ»Ìõ¹æÔòÖеÄÄ¿±ê½«±»È·Á¢Îª×îÖÕµÄÄ¿±ê¡£Èç¹ûµÚÒ»Ìõ¹æÔòÖеÄÄ¿±êÓкܶà¸ö£¬ÄÇô£¬µÚÒ»¸öÄ¿±ê»á³ÉΪ×îÖÕµÄÄ¿±ê¡£makeËùÍê³ÉµÄÒ²¾ÍÊÇÕâ¸öÄ¿±ê¡£

ºÃÁË£¬»¹ÊÇÈÃÎÒÃÇÀ´¿´Ò»¿´ÈçºÎÊéд¹æÔò¡£

3.1 ¹æÔò¾ÙÀý

foo.o: foo.cdefs.h # fooÄ£¿é //ÕâÊÇÒ»¸ö×¢ÊÍ

cc-c -g foo.c

¿´µ½Õâ¸öÀý×Ó£¬¸÷λӦ¸Ã²»ÊǺÜİÉúÁË£¬Ç°ÃæÒ²ÒÑ˵¹ý£¬foo.oÊÇÎÒÃǵÄÄ¿±ê£¬foo.cºÍdefs.hÊÇÄ¿±êËùÒÀÀµµÄÔ´Îļþ£¬¶øÖ»ÓÐÒ»¸öÃüÁî¡°cc -c -g foo.c¡±£¨ÒÔTab¼ü¿ªÍ·£©¡£Õâ¸ö¹æÔò¸æËßÎÒÃÇÁ½¼þÊ£º

1. ÎļþµÄÒÀÀµ¹ØÏµ£¬foo.oÒÀÀµÓÚfoo.cºÍdefs.hµÄÎļþ£¬Èç¹ûfoo.cºÍdefs.hµÄÎļþÈÕÆÚÒª±Èfoo.oÎļþÈÕÆÚҪУ¬»òÊÇfoo.o²»´æÔÚ£¬ÄÇôÒÀÀµ¹ØÏµ·¢Éú¡£

2. Èç¹ûÉú³É£¨»ò¸üУ©foo.oÎļþ¡£Ò²¾ÍÊÇÄǸöccÃüÁÆä˵Ã÷ÁË£¬ÈçºÎÉú³Éfoo.oÕâ¸öÎļþ¡££¨µ±È»foo.cÎļþincludeÁËdefs.hÎļþ£©

3.2 ¹æÔòµÄÓï·¨

targets :prerequisites

command

...

»òÊÇÕâÑù£º

targets : prerequisites; command

command

...

targetsÊÇÎļþÃû£¬ÒÔ¿Õ¸ñ·Ö¿ª£¬¿ÉÒÔʹÓÃͨÅä·û¡£Ò»°ãÀ´Ëµ£¬ÎÒÃǵÄÄ¿±ê»ù±¾ÉÏÊÇÒ»¸öÎļþ£¬µ«Ò²ÓпÉÄÜÊǶà¸öÎļþ¡£

commandÊÇÃüÁîÐУ¬Èç¹ûÆä²»Óë¡°target:prerequisites¡±ÔÚÒ»ÐУ¬ÄÇô£¬±ØÐëÒÔ[Tab¼ü]¿ªÍ·£¬Èç¹ûºÍprerequisitesÔÚÒ»ÐУ¬ÄÇô¿ÉÒÔÓ÷ֺÅ×öΪ·Ö¸ô¡££¨¼ûÉÏ£©

prerequisitesÒ²¾ÍÊÇÄ¿±êËùÒÀÀµµÄÎļþ£¨»òÒÀÀµÄ¿±ê£©¡£Èç¹ûÆäÖеÄij¸öÎļþÒª±ÈÄ¿±êÎļþҪУ¬ÄÇô£¬Ä¿±ê¾Í±»ÈÏΪÊÇ¡°¹ýʱµÄ¡±£¬±»ÈÏΪÊÇÐèÒªÖØÉú³ÉµÄ¡£Õâ¸öÔÚÇ°ÃæÒѾ­½²¹ýÁË¡£

Èç¹ûÃüÁîÌ«³¤£¬Äã¿ÉÒÔʹÓ÷´Ð±¿ò£¨¡®\¡¯£©×÷Ϊ»»Ðзû¡£make¶ÔÒ»ÐÐÉÏÓжàÉÙ¸ö×Ö·ûûÓÐÏÞÖÆ¡£¹æÔò¸æËßmakeÁ½¼þÊ£¬ÎļþµÄÒÀÀµ¹ØÏµºÍÈçºÎ³É³ÉÄ¿±êÎļþ¡£

Ò»°ãÀ´Ëµ£¬make»áÒÔUNIXµÄ±ê×¼Shell£¬Ò²¾ÍÊÇ/bin/shÀ´Ö´ÐÐÃüÁî¡£

3.3 ÔÚ¹æÔòÖÐʹÓÃͨÅä·û

Èç¹ûÎÒÃÇÏ붨ÒåһϵÁбȽÏÀàËÆµÄÎļþ£¬ÎÒÃǺÜ×ÔÈ»µØ¾ÍÏëÆðʹÓÃͨÅä·û¡£makeÖ§³ÖÈý¸öͨÅä·û£º¡°*¡±£¬¡°?¡±ºÍ¡°[...]¡±¡£ÕâÊǺÍUnixµÄB-ShellÊÇÏàͬµÄ¡£

"~" //ÔÚlinuxÖдú±íÓû§¸ùĿ¼

²¨À˺ţ¨¡°~¡±£©×Ö·ûÔÚÎļþÃûÖÐÒ²ÓбȽÏÌØÊâµÄÓÃ;¡£Èç¹ûÊÇ¡°~/test¡±£¬Õâ¾Í±íʾµ±Ç°Óû§µÄ$HOMEĿ¼ÏµÄtestĿ¼¡£¶ø¡°~hchen/test¡±Ôò±íʾÓû§hchenµÄËÞÖ÷Ŀ¼ÏµÄtestĿ¼¡££¨ÕâЩ¶¼ÊÇUnixϵÄС֪ʶÁË£¬makeÒ²Ö§³Ö£©¶øÔÚWindows»òÊÇMS-DOSÏ£¬Óû§Ã»ÓÐËÞÖ÷Ŀ¼£¬ÄÇô²¨À˺ÅËùÖ¸µÄĿ¼Ôò¸ù¾Ý»·¾³±äÁ¿¡°HOME¡±¶ø¶¨¡£

"*" //ͨÅä·û¾ÍÊÇÏëȥͨ¹ý±êʶ·ûȥʶ±ðһЩÁÐÎļþµÄ×ܳÆ

ͨÅä·û´úÌæÁËÄãһϵÁеÄÎļþ£¬Èç¡°*.c¡±±íʾËùÓкó׺ΪcµÄÎļþ¡£Ò»¸öÐèÒªÎÒÃÇ×¢ÒâµÄÊÇ£¬Èç¹ûÎÒÃǵÄÎļþÃûÖÐÓÐͨÅä·û£¬È磺¡°*¡±£¬ÄÇô¿ÉÒÔÓÃתÒå×Ö·û¡°\¡±£¬Èç¡°\*¡±À´±íÊ¾ÕæÊµµÄ¡°*¡±×Ö·û£¬¶ø²»ÊÇÈÎÒⳤ¶ÈµÄ×Ö·û´®¡£

ºÃ°É£¬»¹ÊÇÏÈÀ´¿´¼¸¸öÀý×Ó°É£º

clean:

rm -f *.o

ÉÏÃæÕâ¸öÀý×ÓÎÒ²»²»¶à˵ÁË£¬ÕâÊDzÙ×÷ϵͳShellËùÖ§³ÖµÄͨÅä·û¡£ÕâÊÇÔÚÃüÁîÖеÄͨÅä·û¡£

print: *.c

lpr-p $?

touchprint

ÉÏÃæÕâ¸öÀý×Ó˵Ã÷ÁËͨÅä·ûÒ²¿ÉÒÔÔÚÎÒÃǵĹæÔòÖУ¬Ä¿±êprintÒÀÀµÓÚËùÓеÄ[.c]Îļþ¡£ÆäÖеġ°$?¡±ÊÇÒ»¸ö×Ô¶¯»¯±äÁ¿£¬ÎÒ»áÔÚºóÃæ¸øÄã½²Êö¡£

objects = *.o //ÕâÀï¾ÍÓõ½Í¨Åä·ûºÅÁË£¬Õâ¸öÊÇ´ú±íËùÓеÄ.OÎļþ

ÉÏÃæÕâ¸öÀý×Ó£¬±íʾÁË£¬Í¨·ûͬÑù¿ÉÒÔÓÃÔÚ±äÁ¿ÖС£²¢²»ÊÇ˵[*.o]»áÕ¹¿ª£¬²»£¡objectsµÄÖµ¾ÍÊÇ¡°*.o¡±¡£MakefileÖеıäÁ¿Æäʵ¾ÍÊÇC/C++ÖеĺꡣÈç¹ûÄãÒªÈÃͨÅä·ûÔÚ±äÁ¿ÖÐÕ¹¿ª£¬Ò²¾ÍÊÇÈÃobjectsµÄÖµÊÇËùÓÐ[.o]µÄÎļþÃûµÄ¼¯ºÏ£¬ÄÇô£¬Äã¿ÉÒÔÕâÑù£º

objects := $(wildcard*.o)

ÕâÖÖÓ÷¨Óɹؼü×Ö¡°wildcard¡±Ö¸³ö£¬¹ØÓÚMakefileµÄ¹Ø¼ü×Ö£¬ÎÒÃǽ«ÔÚºóÃæÌÖÂÛ¡£

3.4 ÎļþËÑѰ

ÔÚһЩ´óµÄ¹¤³ÌÖУ¬ÓдóÁ¿µÄÔ´Îļþ£¬ÎÒÃÇͨ³£µÄ×ö·¨ÊǰÑÕâÐí¶àµÄÔ´Îļþ·ÖÀ࣬²¢´æ·ÅÔÚ²»Í¬µÄĿ¼ÖС£ËùÒÔ£¬µ±makeÐèҪȥÕÒѰÎļþµÄÒÀÀµ¹ØÏµÊ±£¬Äã¿ÉÒÔÔÚÎļþǰ¼ÓÉÏ·¾¶£¬µ«×îºÃµÄ·½·¨ÊǰÑÒ»¸ö·¾¶¸æËßmake£¬ÈÃmakeÔÚ×Ô¶¯È¥ÕÒ¡£

MakefileÎļþÖеÄÌØÊâ±äÁ¿¡°VPATH¡±¾ÍÊÇÍê³ÉÕâ¸ö¹¦Äܵģ¬Èç¹ûûÓÐÖ¸Ã÷Õâ¸ö±äÁ¿£¬makeÖ»»áÔÚµ±Ç°µÄĿ¼ÖÐÈ¥ÕÒѰÒÀÀµÎļþºÍÄ¿±êÎļþ¡£Èç¹û¶¨ÒåÁËÕâ¸ö±äÁ¿£¬ÄÇô£¬make¾Í»áÔÚµ±Ç°Ä¿Â¼ÕÒ²»µ½µÄÇé¿öÏ£¬µ½ËùÖ¸¶¨µÄĿ¼ÖÐÈ¥ÕÒѰÎļþÁË¡£

VPATH = src:../headers

ÉÏÃæµÄµÄ¶¨ÒåÖ¸¶¨Á½¸öĿ¼£¬¡°src¡±ºÍ¡°../headers¡±£¬make»á°´ÕÕÕâ¸ö˳Ðò½øÐÐËÑË÷¡£Ä¿Â¼ÓÉ¡°Ã°ºÅ¡±·Ö¸ô¡££¨µ±È»£¬µ±Ç°Ä¿Â¼ÓÀÔ¶ÊÇ×î¸ßÓÅÏÈËÑË÷µÄµØ·½£©

ÁíÒ»¸öÉèÖÃÎļþËÑË÷·¾¶µÄ·½·¨ÊÇʹÓÃmakeµÄ¡°vpath¡±¹Ø¼ü×Ö£¨×¢Ò⣬ËüÊÇȫСдµÄ£©£¬Õâ²»ÊDZäÁ¿£¬ÕâÊÇÒ»¸ömakeµÄ¹Ø¼ü×Ö£¬ÕâºÍÉÏÃæÌáµ½µÄÄǸöVPATH±äÁ¿ºÜÀàËÆ£¬µ«ÊÇËü¸üΪÁé»î¡£Ëü¿ÉÒÔÖ¸¶¨²»Í¬µÄÎļþÔÚ²»Í¬µÄËÑË÷Ŀ¼ÖС£ÕâÊÇÒ»¸öºÜÁé»îµÄ¹¦ÄÜ¡£ËüµÄʹÓ÷½·¨ÓÐÈýÖÖ£º

1. vpath < pattern> <directories> Ϊ·ûºÏģʽ<pattern>µÄÎļþÖ¸¶¨ËÑË÷Ŀ¼<directories>¡£

2. vpath < pattern> Çå³ý·ûºÏģʽ< pattern>µÄÎļþµÄËÑË÷Ŀ¼¡£

3. vpath Çå³ýËùÓÐÒѱ»ÉèÖúÃÁ˵ÄÎļþËÑË÷Ŀ¼¡£

vapthʹÓ÷½·¨ÖеÄ< pattern>ÐèÒª°üº¬¡°%¡±×Ö·û¡£¡°%¡±µÄÒâ˼ÊÇÆ¥ÅäÁã»òÈô¸É×Ö·û£¬ÀýÈ磬¡°%.h¡±±íʾËùÓÐÒÔ¡°.h¡±½áβµÄÎļþ¡£< pattern>Ö¸¶¨ÁËÒªËÑË÷µÄÎļþ¼¯£¬¶ø< directories>ÔòÖ¸¶¨Á˵ÄÎļþ¼¯µÄËÑË÷µÄĿ¼¡£ÀýÈ磺

vpath %.h ../headers

¸ÃÓï¾ä±íʾ£¬ÒªÇómakeÔÚ¡°../headers¡±Ä¿Â¼ÏÂËÑË÷ËùÓÐÒÔ¡°.h¡±½áβµÄÎļþ¡££¨Èç¹ûijÎļþÔÚµ±Ç°Ä¿Â¼Ã»ÓÐÕÒµ½µÄ»°£©

ÎÒÃÇ¿ÉÒÔÁ¬ÐøµØÊ¹ÓÃvpathÓï¾ä£¬ÒÔÖ¸¶¨²»Í¬ËÑË÷²ßÂÔ¡£Èç¹ûÁ¬ÐøµÄvpathÓï¾äÖгöÏÖÁËÏàͬµÄ

< pattern>£¬»òÊDZ»Öظ´Á˵Ä< pattern>£¬ÄÇô£¬make»á°´ÕÕvpathÓï¾äµÄÏȺó˳ÐòÀ´Ö´ÐÐËÑË÷¡£È磺

vpath %.c foo

vpath % blish

vpath %.c bar

Æä±íʾ¡°.c¡±½áβµÄÎļþ£¬ÏÈÔÚ¡°foo¡±Ä¿Â¼£¬È»ºóÊÇ¡°blish¡±£¬×îºóÊÇ¡°bar¡±Ä¿Â¼¡£

vpath %.c foo:bar

vpath % blish

¶øÉÏÃæµÄÓï¾äÔò±íʾ¡°.c¡±½áβµÄÎļþ£¬ÏÈÔÚ¡°foo¡±Ä¿Â¼£¬È»ºóÊÇ¡°bar¡±Ä¿Â¼£¬×îºó²ÅÊÇ¡°blish¡±Ä¿Â¼¡£

3.5 αĿ±ê

×îÔçÏȵÄÒ»¸öÀý×ÓÖУ¬ÎÒÃÇÌáµ½¹ýÒ»¸ö¡°clean¡±µÄÄ¿±ê£¬ÕâÊÇÒ»¸ö¡°Î±Ä¿±ê¡±

clean:

rm*.o temp

ÕýÏñÎÒÃÇÇ°ÃæÀý×ÓÖеġ°clean¡±Ò»Ñù£¬¼´È»ÎÒÃÇÉú³ÉÁËÐí¶àÎļþ±àÒëÎļþ£¬ÎÒÃÇÒ²Ó¦¸ÃÌṩһ¸öÇå³ýËüÃǵġ°Ä¿±ê¡±ÒÔ±¸ÍêÕûµØÖرàÒë¶øÓᣣ¨ÒÔ¡°make clean¡±À´Ê¹ÓøÃÄ¿±ê£©

ÒòΪ£¬ÎÒÃDz¢²»Éú³É¡°clean¡±Õâ¸öÎļþ¡£¡°Î±Ä¿±ê¡±²¢²»ÊÇÒ»¸öÎļþ£¬Ö»ÊÇÒ»¸ö±êÇ©£¬ÓÉÓÚ¡°Î±Ä¿±ê¡±²»ÊÇÎļþ£¬ËùÒÔmakeÎÞ·¨Éú³ÉËüµÄÒÀÀµ¹ØÏµºÍ¾ö¶¨ËüÊÇ·ñÒªÖ´ÐС£ÎÒÃÇÖ»ÓÐͨ¹ýÏÔʾµØÖ¸Ã÷Õâ¸ö¡°Ä¿±ê¡±²ÅÄÜÈÃÆäÉúЧ¡£µ±È»£¬¡°Î±Ä¿±ê¡±µÄÈ¡Ãû²»ÄܺÍÎļþÃûÖØÃû£¬²»È»Æä¾ÍʧȥÁË¡°Î±Ä¿±ê¡±µÄÒâÒåÁË¡£

µ±È»£¬ÎªÁ˱ÜÃâºÍÎļþÖØÃûµÄÕâÖÖÇé¿ö£¬ÎÒÃÇ¿ÉÒÔʹÓÃÒ»¸öÌØÊâµÄ±ê¼Ç¡°.PHONY¡±À´ÏÔʾµØÖ¸Ã÷Ò»¸öÄ¿±êÊÇ¡°Î±Ä¿±ê¡±£¬Ïòmake˵Ã÷£¬²»¹ÜÊÇ·ñÓÐÕâ¸öÎļþ£¬Õâ¸öÄ¿±ê¾ÍÊÇ¡°Î±Ä¿±ê¡±¡£

.PHONY : clean

Ö»ÒªÓÐÕâ¸öÉùÃ÷£¬²»¹ÜÊÇ·ñÓС°clean¡±Îļþ£¬ÒªÔËÐС°clean¡±Õâ¸öÄ¿±ê£¬Ö»ÓС°make clean¡±ÕâÑù¡£ÓÚÊÇÕû¸ö¹ý³Ì¿ÉÒÔÕâÑùд£º

.PHONY: clean

clean:

rm*.o temp

αĿ±êÒ»°ãûÓÐÒÀÀµµÄÎļþ¡£µ«ÊÇ£¬ÎÒÃÇÒ²¿ÉÒÔΪαĿ±êÖ¸¶¨ËùÒÀÀµµÄÎļþ¡£Î±Ä¿±êͬÑù¿ÉÒÔ×÷Ϊ¡°Ä¬ÈÏÄ¿±ê¡±£¬Ö»Òª½«Æä·ÅÔÚµÚÒ»¸ö¡£Ò»¸öʾÀý¾ÍÊÇ£¬Èç¹ûÄãµÄMakefileÐèÒªÒ»¿ÚÆøÉú³ÉÈô¸É¸ö¿ÉÖ´ÐÐÎļþ£¬µ«ÄãÖ»Ïë¼òµ¥µØÇÃÒ»¸ömakeÍêÊ£¬²¢ÇÒ£¬ËùÓеÄÄ¿±êÎļþ¶¼Ð´ÔÚÒ»¸öMakefileÖУ¬ÄÇôÄã¿ÉÒÔʹÓá°Î±Ä¿±ê¡±Õâ¸öÌØÐÔ£º

all : prog1 prog2 prog3
.PHONY : all


prog1 : prog1.o utils.o
cc-o prog1 prog1.o utils.o
prog2 : prog2.o
cc-o prog2 prog2.o
prog3 : prog3.o sort.outils.o
cc-o prog3 prog3.o sort.o utils.o

ÎÒÃÇÖªµÀ£¬MakefileÖеĵÚÒ»¸öÄ¿±ê»á±»×÷ΪÆäĬÈÏÄ¿±ê¡£ÎÒÃÇÉùÃ÷ÁËÒ»¸ö¡°all¡±µÄαĿ±ê£¬ÆäÒÀÀµÓÚÆäËüÈý¸öÄ¿±ê¡£ÓÉÓÚαĿ±êµÄÌØÐÔÊÇ£¬×ÜÊDZ»Ö´Ðеģ¬ËùÒÔÆäÒÀÀµµÄÄÇÈý¸öÄ¿±ê¾Í×ÜÊDz»Èç¡°all¡±Õâ¸öÄ¿±êС£ËùÒÔ£¬ÆäËüÈý¸öÄ¿±êµÄ¹æÔò×ÜÊǻᱻ¾öÒé¡£Ò²¾Í´ïµ½ÁËÎÒÃÇÒ»¿ÚÆøÉú³É¶à¸öÄ¿±êµÄÄ¿µÄ¡£¡°.PHONY : all¡±ÉùÃ÷ÁË¡°all¡±Õâ¸öÄ¿±êΪ¡°Î±Ä¿±ê¡±¡£

Ëæ±ãÌáÒ»¾ä£¬´ÓÉÏÃæµÄÀý×ÓÎÒÃÇ¿ÉÒÔ¿´³ö£¬Ä¿±êÒ²¿ÉÒÔ³ÉΪÒÀÀµ¡£ËùÒÔ£¬Î±Ä¿±êͬÑùÒ²¿É³ÉΪÒÀÀµ¡£¿´ÏÂÃæµÄÀý×Ó£º

.PHONY: cleanall cleanobjcleandiff
cleanall : cleanobjcleandiff
rmprogram
cleanobj :
rm*.o
cleandiff :
rm*.diff

¡°makeclean¡±½«Çå³ýËùÓÐÒª±»Çå³ýµÄÎļþ¡£¡°cleanobj¡±ºÍ¡°cleandiff¡±ÕâÁ½¸öαĿ±êÓеãÏñ¡°×Ó³ÌÐò¡±µÄÒâ˼¡£ÎÒÃÇ¿ÉÒÔÊäÈë¡°make clean all¡±ºÍ¡°make clean obj¡±ºÍ¡°make clean diff¡±ÃüÁîÀ´´ïµ½Çå³ý²»Í¬ÖÖÀàÎļþµÄÄ¿µÄ

3.6 ¶àÄ¿±ê

MakefileµÄ¹æÔòÖеÄÄ¿±ê¿ÉÒÔ²»Ö¹Ò»¸ö£¬ÆäÖ§³Ö¶àÄ¿±ê£¬ÓпÉÄÜÎÒÃǵĶà¸öÄ¿±êͬʱÒÀÀµÓÚÒ»¸öÎļþ£¬²¢ÇÒÆäÉú³ÉµÄÃüÁî´óÌåÀàËÆ¡£ÓÚÊÇÎÒÃǾÍÄÜ°ÑÆäºÏ²¢ÆðÀ´¡£µ±È»£¬¶à¸öÄ¿±êµÄÉú³É¹æÔòµÄÖ´ÐÐÃüÁîÊÇͬһ¸ö£¬Õâ¿ÉÄÜ»á¿ÉÎÒÃÇ´øÀ´Âé·³£¬²»¹ýºÃÔÚÎÒÃǵĿÉÒÔʹÓÃÒ»¸ö×Ô¶¯»¯±äÁ¿¡°$@¡±£¨¹ØÓÚ×Ô¶¯»¯±äÁ¿£¬½«ÔÚºóÃæ½²Êö£©£¬Õâ¸ö±äÁ¿±íʾ×ÅĿǰ¹æÔòÖÐËùÓеÄÄ¿±êµÄ¼¯ºÏ£¬ÕâÑù˵¿ÉÄܺܳéÏ󣬻¹ÊÇ¿´Ò»¸öÀý×Ó°É¡£

bigoutput littleoutput :text.g

generatetext.g -$(subst output,,$@) > $@

ÉÏÊö¹æÔòµÈ¼ÛÓÚ£º

bigoutput : text.g

generatetext.g -big > bigoutput

littleoutput : text.g

generatetext.g -little > littleoutput

ÆäÖУ¬-$(subst output,,$@)Öеġ°$¡±±íʾִÐÐÒ»¸öMakefileµÄº¯Êý£¬º¯ÊýÃûΪsubst£¬ºóÃæµÄΪ²ÎÊý¡£¹ØÓÚº¯Êý£¬½«ÔÚºóÃæ½²Êö¡£ÕâÀïµÄÕâ¸öº¯ÊýÊǽØÈ¡×Ö·û´®µÄÒâ˼£¬¡°$@¡±±íʾĿ±êµÄ¼¯ºÏ£¬¾ÍÏñÒ»¸öÊý×飬¡°$@¡±ÒÀ´ÎÈ¡³öÄ¿±ê£¬²¢Ö´ÓÚÃüÁî¡£

3.7 ¾²Ì¬Ä£Ê½

¾²Ì¬Ä£Ê½¿ÉÒÔ¸ü¼ÓÈÝÒ׵ض¨Òå¶àÄ¿±êµÄ¹æÔò£¬¿ÉÒÔÈÃÎÒÃǵĹæÔò±äµÃ¸ü¼ÓµÄÓе¯ÐÔºÍÁé»î¡£ÎÒÃÇ»¹ÊÇÏÈÀ´¿´Ò»ÏÂÓï·¨£º

<targets...>: <target-pattern>:
<prereq-patterns ...>

¡¡¡¡¡¡<commands>

...

targets¶¨ÒåÁËһϵÁеÄÄ¿±êÎļþ£¬¿ÉÒÔÓÐͨÅä·û¡£ÊÇÄ¿±êµÄÒ»¸ö¼¯ºÏ¡£

target-parrternÊÇÖ¸Ã÷ÁËtargetsµÄģʽ£¬Ò²¾ÍÊǵÄÄ¿±ê¼¯Ä£Ê½¡£

prereq-parrternsÊÇÄ¿±êµÄÒÀÀµÄ£Ê½£¬Ëü¶Ôtarget-parrternÐγɵÄģʽÔÙ½øÐÐÒ»´ÎÒÀÀµÄ¿±êµÄ¶¨Òå¡£

ÕâÑùÃèÊöÕâÈý¸ö¶«Î÷£¬¿ÉÄÜ»¹ÊÇûÓÐ˵Çå³þ£¬»¹ÊǾٸöÀý×ÓÀ´ËµÃ÷һϰɡ£Èç¹ûÎÒÃǵÄ<target-parrtern>¶¨Òå³É¡°%.o¡±£¬Òâ˼ÊÇÎÒÃǵļ¯ºÏÖж¼ÊÇÒÔ¡°.o¡±½áβµÄ£¬¶øÈç¹ûÎÒÃǵÄ<prereq-parrterns>¶¨Òå³É¡°%.c¡±£¬Òâ˼ÊǶÔ<target-parrtern>ËùÐγɵÄÄ¿±ê¼¯½øÐжþ´Î¶¨Ò壬Æä¼ÆËã·½·¨ÊÇ£¬È¡<target-parrtern>ģʽÖеġ°%¡±£¨Ò²¾ÍÊÇÈ¥µôÁË[.o]Õâ¸ö½á⣩£¬²¢ÎªÆä¼ÓÉÏ[.c]Õâ¸ö½á⣬ÐγɵÄм¯ºÏ¡£

ËùÒÔ£¬ÎÒÃǵġ°Ä¿±êģʽ¡±»òÊÇ¡°ÒÀÀµÄ£Ê½¡±Öж¼Ó¦¸ÃÓС°%¡±Õâ¸ö×Ö·û£¬Èç¹ûÄãµÄÎļþÃûÖÐÓС°%¡±ÄÇôÄã¿ÉÒÔʹÓ÷´Ð±¸Ü¡°\¡±½øÐÐתÒ壬À´±êÃ÷ÕæÊµµÄ¡°%¡±×Ö·û¡£

¿´Ò»¸öÀý×Ó£º

objects = foo.o bar.o

all: $(objects)

$(objects): %.o:%.c

$(CC)-c $(CFLAGS) $< -o $@

ÉÏÃæµÄÀý×ÓÖУ¬Ö¸Ã÷ÁËÎÒÃǵÄÄ¿±ê´Ó$objectÖлñÈ¡£¬¡°%.o¡±±íÃ÷ÒªËùÓÐÒÔ¡°.o¡±½áβµÄÄ¿±ê£¬Ò²¾ÍÊÇ¡°foo.o bar.o¡±£¬Ò²¾ÍÊDZäÁ¿$object¼¯ºÏµÄģʽ£¬¶øÒÀÀµÄ£Ê½¡°%.c¡±Ôòȡģʽ¡°%.o¡±µÄ¡°%¡±£¬Ò²¾ÍÊÇ¡°foobar¡±£¬²¢ÎªÆä¼ÓÏ¡°.c¡±µÄºó׺£¬ÓÚÊÇ£¬ÎÒÃǵÄÒÀÀµÄ¿±ê¾ÍÊÇ¡°foo.cbar.c¡±¡£¶øÃüÁîÖеġ°$<¡±ºÍ¡°$@¡±ÔòÊÇ×Ô¶¯»¯±äÁ¿£¬¡°$<¡±±íʾËùÓеÄÒÀÀµÄ¿±ê¼¯£¨Ò²¾ÍÊÇ¡°foo.c bar.c¡±£©£¬¡°$@¡±±íʾĿ±ê¼¯£¨Ò²ÍÊÇ¡°foo.o bar.o¡±£©¡£ÓÚÊÇ£¬ÉÏÃæµÄ¹æÔòÕ¹¿ªºóµÈ¼ÛÓÚÏÂÃæµÄ¹æÔò£º

foo.o : foo.c

$(CC)-c $(CFLAGS) foo.c -o foo.o

bar.o : bar.c

$(CC)-c $(CFLAGS) bar.c -o bar.o

ÊÔÏ룬Èç¹ûÎÒÃǵġ°%.o¡±Óм¸°Ù¸ö£¬ÄÇÖÖÎÒÃÇÖ»ÒªÓÃÕâÖֺܼòµ¥µÄ¡°¾²Ì¬Ä£Ê½¹æÔò¡±¾Í¿ÉÒÔдÍêÒ»¶Ñ¹æÔò£¬ÊµÔÚÊÇÌ«ÓÐЧÂÊÁË¡£¡°¾²Ì¬Ä£Ê½¹æÔò¡±µÄÓ÷¨ºÜÁé»î£¬Èç¹ûÓõúã¬ÄÇ»áÒ»¸öºÜÇ¿´óµÄ¹¦ÄÜ¡£ÔÙ¿´Ò»¸öÀý×Ó£º

files = foo.elcbar.o lose.o

$(filter%.o,$(files)): %.o: %.c

$(CC)-c $(CFLAGS) $< -o $@

$(filter %.elc,$(files)):%.elc: %.el

emacs-f batch-byte-compile $<

$(filter%.o,$(files))±íʾµ÷ÓÃMakefileµÄfilterº¯Êý£¬¹ýÂË¡°$filter¡±¼¯£¬Ö»ÒªÆäÖÐģʽΪ¡°%.o¡±µÄÄÚÈÝ¡£ÆäµÄËüÄÚÈÝ£¬ÎҾͲ»Óöà˵Á˰ɡ£Õâ¸öÀý×ÖչʾÁËMakefileÖиü´óµÄµ¯ÐÔ¡£

3.8 ×Ô¶¯Éú³ÉÒÀÀµÐÔ

ÔÚMakefileÖУ¬ÎÒÃǵÄÒÀÀµ¹ØÏµ¿ÉÄÜ»áÐèÒª°üº¬Ò»ÏµÁеÄÍ·Îļþ£¬±ÈÈ磬Èç¹ûÎÒÃǵÄmain.cÖÐÓÐÒ»¾ä¡°#include "defs.h"¡±£¬ÄÇôÎÒÃǵÄÒÀÀµ¹ØÏµÓ¦¸ÃÊÇ£º

main.o : main.c defs.h

µ«ÊÇ£¬Èç¹ûÊÇÒ»¸ö±È½Ï´óÐ͵Ť³Ì£¬Äã±ØÐèÇå³þÄÄЩCÎļþ°üº¬ÁËÄÄЩͷÎļþ£¬²¢ÇÒ£¬ÄãÔÚ¼ÓÈë»òɾ³ýÍ·Îļþʱ£¬Ò²ÐèҪСÐĵØÐÞ¸ÄMakefile£¬ÕâÊÇÒ»¸öºÜûÓÐά»¤ÐԵŤ×÷¡£ÎªÁ˱ÜÃâÕâÖÖ·±ÖضøÓÖÈÝÒ׳ö´íµÄÊÂÇ飬ÎÒÃÇ¿ÉÒÔʹÓÃC/C++±àÒëµÄÒ»¸ö¹¦ÄÜ¡£´ó¶àÊýµÄC/C++±àÒëÆ÷¶¼Ö§³ÖÒ»¸ö¡°-M¡±µÄÑ¡Ï¼´×Ô¶¯ÕÒѰԴÎļþÖаüº¬µÄÍ·Îļþ£¬²¢Éú³ÉÒ»¸öÒÀÀµ¹ØÏµ¡£ÀýÈ磬Èç¹ûÎÒÃÇÖ´ÐÐÏÂÃæµÄÃüÁ

cc -M main.c

ÆäÊä³öÊÇ£º

main.o : main.c defs.h

ÓÚÊÇÓɱàÒëÆ÷×Ô¶¯Éú³ÉµÄÒÀÀµ¹ØÏµ£¬ÕâÑùÒ»À´£¬Äã¾Í²»±ØÔÙÊÖ¶¯ÊéдÈô¸ÉÎļþµÄÒÀÀµ¹ØÏµ£¬¶øÓɱàÒëÆ÷×Ô¶¯Éú³ÉÁË¡£ÐèÒªÌáÐÑÒ»¾äµÄÊÇ£¬Èç¹ûÄãʹÓÃGNUµÄC/C++±àÒëÆ÷£¬ÄãµÃÓá°-MM¡±²ÎÊý£¬²»È»£¬¡°-M¡±²ÎÊý»á°ÑһЩ±ê×¼¿âµÄÍ·ÎļþÒ²°üº¬½øÀ´¡£

gcc-M main.cµÄÊä³öÊÇ£º

main.o: main.c defs.h /usr/include/stdio.h/usr/include/features.h \
/usr/include/sys/cdefs.h/usr/include/gnu/stubs.h \
/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include
/stddef.h\
/usr/include/bits/types.h/usr/include/bits
/pthreadtypes.h \
/usr/include/bits/sched.h/usr/include/libio.h \
/usr/include/_G_config.h/usr/include/wchar.h \
/usr/include/bits/wchar.h/usr/include/gconv.h \
/usr/lib/gcc-lib/i486-suse-linux/2.95.3/include
/stdarg.h\
/usr/include/bits/stdio_lim.h

gcc-MM main.cµÄÊä³öÔòÊÇ£º

main.o: main.c defs.h

ÄÇô£¬±àÒëÆ÷µÄÕâ¸ö¹¦ÄÜÈçºÎÓëÎÒÃǵÄMakefileÁªÏµÔÚÒ»ÆðÄØ¡£ÒòΪÕâÑùÒ»À´£¬ÎÒÃǵÄMakefileÒ²Òª¸ù¾ÝÕâЩԴÎļþÖØÐÂÉú³É£¬ÈÃMakefile×ÔÒÑÒÀÀµÓÚÔ´Îļþ£¿Õâ¸ö¹¦Äܲ¢²»ÏÖʵ£¬²»¹ýÎÒÃÇ¿ÉÒÔÓÐÆäËüÊÖ¶ÎÀ´ÓػصØÊµÏÖÕâÒ»¹¦ÄÜ¡£GNU×éÖ¯½¨Òé°Ñ±àÒëÆ÷Ϊÿһ¸öÔ´ÎļþµÄ×Ô¶¯Éú³ÉµÄÒÀÀµ¹ØÏµ·Åµ½Ò»¸öÎļþÖУ¬ÎªÃ¿Ò»¸ö¡°name.c¡±µÄÎļþ¶¼Éú³ÉÒ»¸ö¡°name.d¡±µÄMakefileÎļþ£¬[.d]ÎļþÖоʹæ·Å¶ÔÓ¦[.c]ÎļþµÄÒÀÀµ¹ØÏµ¡£

ÓÚÊÇ£¬ÎÒÃÇ¿ÉÒÔд³ö[.c]ÎļþºÍ[.d]ÎļþµÄÒÀÀµ¹ØÏµ£¬²¢ÈÃmake×Ô¶¯¸üлò×Ô³É[.d]Îļþ£¬²¢°ÑÆä°üº¬ÔÚÎÒÃǵÄÖ÷MakefileÖУ¬ÕâÑù£¬ÎÒÃǾͿÉÒÔ×Ô¶¯»¯µØÉú³Éÿ¸öÎļþµÄÒÀÀµ¹ØÏµÁË¡£

ÕâÀÎÒÃǸø³öÁËÒ»¸öģʽ¹æÔòÀ´²úÉú[.d]Îļþ£º

%.d: %.c

@set-e; rm -f $@; \

$(CC)-M $(CPPFLAGS) $< > $@.

; \

sed's,$?\.o[ :]*,\1.o $@ : ,g' < $@.

>$@; \

rm-f $@.

Õâ¸ö¹æÔòµÄÒâ˼ÊÇ£¬ËùÓеÄ[.d]ÎļþÒÀÀµÓÚ[.c]Îļþ£¬¡°rm-f $@¡±µÄÒâ˼ÊÇɾ³ýËùÓеÄÄ¿±ê£¬Ò²¾ÍÊÇ[.d]Îļþ£¬µÚ¶þÐеÄÒâ˼ÊÇ£¬ÎªÃ¿¸öÒÀÀµÎļþ¡°$<¡±£¬Ò²¾ÍÊÇ[.c]ÎļþÉú³ÉÒÀÀµÎļþ£¬¡°$@¡±±íʾģʽ¡°%.d¡±Îļþ£¬Èç¹ûÓÐÒ»¸öCÎļþÊÇname.c£¬ÄÇô¡°%¡±¾ÍÊÇ¡°name¡±£¬¡°

¡±ÒâΪһ¸öËæ»ú±àºÅ£¬µÚ¶þÐÐÉú³ÉµÄÎļþÓпÉÄÜÊÇ¡°name.d.12345¡±£¬µÚÈýÐÐʹÓÃsedÃüÁî×öÁËÒ»¸öÌæ»»£¬¹ØÓÚsedÃüÁîµÄÓ÷¨Çë²Î¿´Ïà¹ØµÄʹÓÃÎĵµ¡£µÚËÄÐоÍÊÇɾ³ýÁÙʱÎļþ¡£

×ܶøÑÔÖ®£¬Õâ¸öģʽҪ×öµÄʾÍÊÇÔÚ±àÒëÆ÷Éú³ÉµÄÒÀÀµ¹ØÏµÖмÓÈë[.d]ÎļþµÄÒÀÀµ£¬¼´°ÑÒÀÀµ¹ØÏµ£º

main.o : main.c defs.h

ת³É£º

main.o main.d : main.cdefs.h

ÓÚÊÇ£¬ÎÒÃǵÄ[.d]ÎļþÒ²»á×Ô¶¯¸üÐÂÁË£¬²¢»á×Ô¶¯Éú³ÉÁË£¬µ±È»£¬Ä㻹¿ÉÒÔÔÚÕâ¸ö[.d]ÎļþÖмÓÈëµÄ²»Ö»ÊÇÒÀÀµ¹ØÏµ£¬°üÀ¨Éú³ÉµÄÃüÁîÒ²¿ÉÒ»²¢¼ÓÈ룬ÈÃÿ¸ö[.d]Îļþ¶¼°üº¬Ò»¸öÍêÀµµÄ¹æÔò¡£Ò»µ©ÎÒÃÇÍê³ÉÕâ¸ö¹¤×÷£¬½ÓÏÂÀ´£¬ÎÒÃǾÍÒª°ÑÕâЩ×Ô¶¯Éú³ÉµÄ¹æÔò·Å½øÎÒÃǵÄÖ÷MakefileÖС£ÎÒÃÇ¿ÉÒÔʹÓÃMakefileµÄ¡°include¡±ÃüÁÀ´ÒýÈë±ðµÄMakefileÎļþ£¨Ç°Ãæ½²¹ý£©£¬ÀýÈ磺

sources = foo.c bar.c

include$(sources:.c=.d)

ÉÏÊöÓï¾äÖеġ°$(sources:.c=.d)¡±Öеġ°.c=.d¡±µÄÒâ˼ÊÇ×öÒ»¸öÌæ»»£¬°Ñ±äÁ¿$(sources)ËùÓÐ[.c]µÄ×Ö´®¶¼Ìæ»»³É[.d]£¬¹ØÓÚÕâ¸ö¡°Ìæ»»¡±µÄÄÚÈÝ£¬ÔÚºóÃæÎÒ»áÓиüΪÏêϸµÄ½²Êö¡£µ±È»£¬ÄãµÃ×¢Òâ´ÎÐò£¬ÒòΪincludeÊǰ´´ÎÀ´ÔØÈëÎļþ£¬×îÏÈÔØÈëµÄ[.d]ÎļþÖеÄÄ¿±ê»á³ÉΪĬÈÏÄ¿±ê

4 Makefile ÊéдÃüÁî

ÿÌõ¹æÔòÖеÄÃüÁîºÍ²Ù×÷ϵͳShellµÄÃüÁîÐÐÊÇÒ»Öµġ£make»áÒ»°´Ë³ÐòÒ»ÌõÒ»ÌõµÄÖ´ÐÐÃüÁÿÌõÃüÁîµÄ¿ªÍ·±ØÐëÒÔ[Tab]¼ü¿ªÍ·£¬³ý·Ç£¬ÃüÁîÊǽô¸úÔÚÒÀÀµ¹æÔòºóÃæµÄ·ÖºÅºóµÄ¡£ÔÚÃüÁîÐÐÖ®¼äÖеĿոñ»òÊÇ¿ÕÐлᱻºöÂÔ£¬µ«ÊÇÈç¹û¸Ã¿Õ¸ñ»ò¿ÕÐÐÊÇÒÔTab¼ü¿ªÍ·µÄ£¬ÄÇômake»áÈÏΪÆäÊÇÒ»¸ö¿ÕÃüÁî¡£

ÎÒÃÇÔÚUNIXÏ¿ÉÄÜ»áʹÓò»Í¬µÄShell£¬µ«ÊÇmakeµÄÃüÁîĬÈÏÊDZ»¡°/bin/sh¡±¡ª¡ªUNIXµÄ±ê×¼Shell½âÊÍÖ´Ðеġ£³ý·ÇÄãÌØ±ðÖ¸¶¨Ò»¸öÆäËüµÄShell¡£MakefileÖУ¬¡°#¡±ÊÇ×¢ÊÍ·û£¬ºÜÏñC/C++Öеġ°//¡±£¬ÆäºóµÄ±¾ÐÐ×Ö·û¶¼±»×¢ÊÍ¡£

4.1 ÏÔʾÃüÁî

ͨ³££¬make»á°ÑÆäÒªÖ´ÐеÄÃüÁîÐÐÔÚÃüÁîÖ´ÐÐǰÊä³öµ½ÆÁÄ»ÉÏ¡£µ±ÎÒÃÇÓá°@¡±×Ö·ûÔÚÃüÁîÐÐǰ£¬ÄÇô£¬Õâ¸öÃüÁ²»±»makeÏÔʾ³öÀ´£¬×î¾ß´ú±íÐÔµÄÀý×ÓÊÇ£¬ÎÒÃÇÓÃÕâ¸ö¹¦ÄÜÀ´ÏñÆÁÄ»ÏÔʾһЩÐÅÏ¢¡£È磺

@echo ÕýÔÚ±àÒëXXXÄ£¿é......

µ±makeÖ´ÐÐʱ£¬»áÊä³ö¡°ÕýÔÚ±àÒëXXXÄ£¿é......¡±×Ö´®£¬µ«²»»áÊä³öÃüÁÈç¹ûûÓС°@¡±£¬ÄÇô£¬make½«Êä³ö£º

echo ÕýÔÚ±àÒëXXXÄ£¿é......

ÕýÔÚ±àÒëXXXÄ£¿é......

Èç¹ûmakeÖ´ÐÐʱ£¬´øÈëmake²ÎÊý¡°-n¡±»ò¡°--just-print¡±£¬ÄÇôÆäÖ»ÊÇÏÔʾÃüÁµ«²»»áÖ´ÐÐÃüÁÕâ¸ö¹¦ÄܺÜÓÐÀûÓÚÎÒÃǵ÷ÊÔÎÒÃǵÄMakefile£¬¿´¿´ÎÒÃÇÊéдµÄÃüÁîÊÇÖ´ÐÐÆðÀ´ÊÇʲôÑù×ӵĻòÊÇʲô˳ÐòµÄ¡£

¶ømake²ÎÊý¡°-s¡±»ò¡°--slient¡±ÔòÊÇÈ«Ãæ½ûÖ¹ÃüÁîµÄÏÔʾ¡£

4.2 ÃüÁîÖ´ÐÐ

µ±ÒÀÀµÄ¿±êÐÂÓÚÄ¿±êʱ£¬Ò²¾ÍÊǵ±¹æÔòµÄÄ¿±êÐèÒª±»¸üÐÂʱ£¬make»áÒ»ÌõÒ»ÌõµÄÖ´ÐÐÆäºóµÄÃüÁî¡£ÐèҪעÒâµÄÊÇ£¬Èç¹ûÄãÒªÈÃÉÏÒ»ÌõÃüÁîµÄ½á¹ûÓ¦ÓÃÔÚÏÂÒ»ÌõÃüÁîʱ£¬ÄãÓ¦¸ÃʹÓ÷ֺŷָôÕâÁ½ÌõÃüÁî¡£±ÈÈçÄãµÄµÚÒ»ÌõÃüÁîÊÇcdÃüÁÄãÏ£ÍûµÚ¶þÌõÃüÁîµÃÔÚcdÖ®ºóµÄ»ù´¡ÉÏÔËÐУ¬ÄÇôÄã¾Í²»ÄܰÑÕâÁ½ÌõÃüÁîдÔÚÁ½ÐÐÉÏ£¬¶øÓ¦¸Ã°ÑÕâÁ½ÌõÃüÁîдÔÚÒ»ÐÐÉÏ£¬Ó÷ֺŷָô¡£È磺

ʾÀýÒ»£º

exec:

cd/home/hchen

pwd

ʾÀý¶þ£º

exec:

cd/home/hchen; pwd

µ±ÎÒÃÇÖ´ÐС°make exec¡±Ê±£¬µÚÒ»¸öÀý×ÓÖеÄcdûÓÐ×÷Óã¬pwd»á´òÓ¡³öµ±Ç°µÄMakefileĿ¼£¬¶øµÚ¶þ¸öÀý×ÓÖУ¬cd¾ÍÆð×÷ÓÃÁË£¬pwd»á´òÓ¡³ö¡°/home/hchen¡±¡£

makeÒ»°ãÊÇʹÓû·¾³±äÁ¿SHELLÖÐËù¶¨ÒåµÄϵͳShellÀ´Ö´ÐÐÃüÁĬÈÏÇé¿öÏÂʹÓÃUNIXµÄ±ê×¼Shell¡ª¡ª/bin/shÀ´Ö´ÐÐÃüÁî¡£µ«ÔÚMS-DOSÏÂÓеãÌØÊ⣬ÒòΪMS-DOSÏÂûÓÐSHELL»·¾³±äÁ¿£¬µ±È»ÄãÒ²¿ÉÒÔÖ¸¶¨¡£Èç¹ûÄãÖ¸¶¨ÁËUNIX·ç¸ñµÄĿ¼ÐÎʽ£¬Ê×ÏÈ£¬make»áÔÚSHELLËùÖ¸¶¨µÄ·¾¶ÖÐÕÒѰÃüÁî½âÊÍÆ÷£¬Èç¹ûÕÒ²»µ½£¬Æä»áÔÚµ±Ç°ÅÌ·ûÖеĵ±Ç°Ä¿Â¼ÖÐѰÕÒ£¬Èç¹ûÔÙÕÒ²»µ½£¬Æä»áÔÚPATH»·¾³±äÁ¿ÖÐËù¶¨ÒåµÄËùÓз¾¶ÖÐѰÕÒ¡£MS-DOSÖУ¬Èç¹ûÄ㶨ÒåµÄÃüÁî½âÊÍÆ÷ûÓÐÕÒµ½£¬Æä»á¸øÄãµÄÃüÁî½âÊÍÆ÷¼ÓÉÏÖîÈç¡°.exe¡±¡¢¡°.com¡±¡¢¡°.bat¡±¡¢¡°.sh¡±µÈºó׺¡£

4.3 ÃüÁî³ö´í

ÿµ±ÃüÁîÔËÐÐÍêºó£¬make»á¼ì²âÿ¸öÃüÁîµÄ·µ»ØÂ룬Èç¹ûÃüÁî·µ»Ø³É¹¦£¬ÄÇômake»áÖ´ÐÐÏÂÒ»ÌõÃüÁµ±¹æÔòÖÐËùÓеÄÃüÁî³É¹¦·µ»Øºó£¬Õâ¸ö¹æÔò¾ÍËãÊdzɹ¦Íê³ÉÁË¡£Èç¹ûÒ»¸ö¹æÔòÖеÄij¸öÃüÁî³ö´íÁË£¨ÃüÁîÍ˳öÂë·ÇÁ㣩£¬ÄÇômake¾Í»áÖÕÖ¹Ö´Ðе±Ç°¹æÔò£¬Õ⽫ÓпÉÄÜÖÕÖ¹ËùÓйæÔòµÄÖ´ÐС£

ÓÐЩʱºò£¬ÃüÁîµÄ³ö´í²¢²»±íʾ¾ÍÊÇ´íÎóµÄ¡£ÀýÈçmkdirÃüÁÎÒÃÇÒ»¶¨ÐèÒª½¨Á¢Ò»¸öĿ¼£¬Èç¹ûĿ¼²»´æÔÚ£¬ÄÇômkdir¾Í³É¹¦Ö´ÐУ¬ÍòÊ´󼪣¬Èç¹ûĿ¼´æÔÚ£¬ÄÇô¾Í³ö´íÁË¡£ÎÒÃÇÖ®ËùÒÔʹÓÃmkdirµÄÒâ˼¾ÍÊÇÒ»¶¨ÒªÓÐÕâÑùµÄÒ»¸öĿ¼£¬ÓÚÊÇÎÒÃǾͲ»Ï£Íûmkdir³ö´í¶øÖÕÖ¹¹æÔòµÄÔËÐС£

ΪÁË×öµ½ÕâÒ»µã£¬ºöÂÔÃüÁîµÄ³ö´í£¬ÎÒÃÇ¿ÉÒÔÔÚMakefileµÄÃüÁîÐÐǰ¼ÓÒ»¸ö¼õºÅ¡°-¡±£¨ÔÚTab¼üÖ®ºó£©£¬±ê¼ÇΪ²»¹ÜÃüÁî³ö²»³ö´í¶¼ÈÏΪÊdzɹ¦µÄ¡£È磺

clean:

-rm-f *.o

»¹ÓÐÒ»¸öÈ«¾ÖµÄ°ì·¨ÊÇ£¬¸ømake¼ÓÉÏ¡°-i¡±»òÊÇ¡°--ignore-errors¡±²ÎÊý£¬ÄÇô£¬MakefileÖÐËùÓÐÃüÁî¶¼»áºöÂÔ´íÎó¡£¶øÈç¹ûÒ»¸ö¹æÔòÊÇÒÔ¡°.IGNORE¡±×÷ΪĿ±êµÄ£¬ÄÇôÕâ¸ö¹æÔòÖеÄËùÓÐÃüÁ»áºöÂÔ´íÎó¡£ÕâЩÊDz»Í¬¼¶±ðµÄ·ÀÖ¹ÃüÁî³ö´íµÄ·½·¨£¬Äã¿ÉÒÔ¸ù¾ÝÄãµÄ²»Í¬Ï²»¶ÉèÖá£

»¹ÓÐÒ»¸öÒªÌáһϵÄmakeµÄ²ÎÊýµÄÊÇ¡°-k¡±»òÊÇ¡°--keep-going¡±£¬Õâ¸ö²ÎÊýµÄÒâ˼ÊÇ£¬Èç¹ûij¹æÔòÖеÄÃüÁî³ö´íÁË£¬ÄÇô¾ÍÖÕÄ¿¸Ã¹æÔòµÄÖ´ÐУ¬µ«¼ÌÐøÖ´ÐÐÆäËü¹æÔò¡£

4.4 ǶÌ×Ö´ÐÐmake

ÔÚһЩ´óµÄ¹¤³ÌÖУ¬ÎÒÃÇ»á°ÑÎÒÃDz»Í¬Ä£¿é»òÊDz»Í¬¹¦ÄܵÄÔ´Îļþ·ÅÔÚ²»Í¬µÄĿ¼ÖУ¬ÎÒÃÇ¿ÉÒÔÔÚÿ¸öĿ¼Öж¼Êéдһ¸ö¸ÃĿ¼µÄMakefile£¬ÕâÓÐÀûÓÚÈÃÎÒÃǵÄMakefile±äµÃ¸ü¼ÓµØ¼ò½à£¬¶ø²»ÖÁÓÚ°ÑËùÓеĶ«Î÷È«²¿Ð´ÔÚÒ»¸öMakefileÖУ¬ÕâÑù»áºÜÄÑά»¤ÎÒÃǵÄMakefile£¬Õâ¸ö¼¼Êõ¶ÔÓÚÎÒÃÇÄ£¿é±àÒëºÍ·Ö¶Î±àÒëÓÐ×ŷdz£´óµÄºÃ´¦¡£

ÀýÈ磬ÎÒÃÇÓÐÒ»¸ö×ÓĿ¼½Ðsubdir£¬Õâ¸öĿ¼ÏÂÓиöMakefileÎļþ£¬À´Ö¸Ã÷ÁËÕâ¸öĿ¼ÏÂÎļþµÄ±àÒë¹æÔò¡£ÄÇôÎÒÃÇ×ܿصÄMakefile¿ÉÒÔÕâÑùÊéд£º

subsystem:

cdsubdir && $(MAKE)

ÆäµÈ¼ÛÓÚ£º

subsystem:

$(MAKE)-C subdir

¶¨Òå$(MAKE)ºê±äÁ¿µÄÒâ˼ÊÇ£¬Ò²ÐíÎÒÃǵÄmakeÐèҪһЩ²ÎÊý£¬ËùÒÔ¶¨Òå³ÉÒ»¸ö±äÁ¿±È½ÏÀûÓÚά»¤¡£ÕâÁ½¸öÀý×ÓµÄÒâ˼¶¼ÊÇÏȽøÈë¡°subdir¡±Ä¿Â¼£¬È»ºóÖ´ÐÐmakeÃüÁî¡£

ÎÒÃǰÑÕâ¸öMakefile½Ð×ö¡°×Ü¿ØMakefile¡±£¬×Ü¿ØMakefileµÄ±äÁ¿¿ÉÒÔ´«µÝµ½Ï¼¶µÄMakefileÖУ¨Èç¹ûÄãÏÔʾµÄÉùÃ÷£©£¬µ«ÊDz»»á¸²¸ÇϲãµÄMakefileÖÐËù¶¨ÒåµÄ±äÁ¿£¬³ý·ÇÖ¸¶¨ÁË¡°-e¡±²ÎÊý¡£

Èç¹ûÄãÒª´«µÝ±äÁ¿µ½Ï¼¶MakefileÖУ¬ÄÇôÄã¿ÉÒÔʹÓÃÕâÑùµÄÉùÃ÷£º

export<variable ...>

Èç¹ûÄã²»ÏëÈÃijЩ±äÁ¿´«µÝµ½Ï¼¶MakefileÖУ¬ÄÇôÄã¿ÉÒÔÕâÑùÉùÃ÷£º

unexport<variable ...>

È磺

ʾÀýÒ»£º

exportvariable = value

ÆäµÈ¼ÛÓÚ£º

variable = value

exportvariable

ÆäµÈ¼ÛÓÚ£º

exportvariable := value

ÆäµÈ¼ÛÓÚ£º

variable:= value

exportvariable

ʾÀý¶þ£º

exportvariable += value

ÆäµÈ¼ÛÓÚ£º

variable+= value

exportvariable

Èç¹ûÄãÒª´«µÝËùÓеıäÁ¿£¬ÄÇô£¬Ö»ÒªÒ»¸öexport¾ÍÐÐÁË¡£ºóÃæÊ²Ã´Ò²²»Óøú£¬±íʾ´«µÝËùÓеıäÁ¿¡£

ÐèҪעÒâµÄÊÇ£¬ÓÐÁ½¸ö±äÁ¿£¬Ò»¸öÊÇSHELL£¬Ò»¸öÊÇMAKEFLAGS£¬ÕâÁ½¸ö±äÁ¿²»¹ÜÄãÊÇ·ñexport£¬Æä×ÜÊÇÒª´«µÝµ½Ï²ãMakefileÖУ¬ÌرðÊÇMAKEFILES±äÁ¿£¬ÆäÖаüº¬ÁËmakeµÄ²ÎÊýÐÅÏ¢£¬Èç¹ûÎÒÃÇÖ´ÐС°×Ü¿ØMakefile¡±Ê±ÓÐmake²ÎÊý»òÊÇÔÚÉϲãMakefileÖж¨ÒåÁËÕâ¸ö±äÁ¿£¬ÄÇôMAKEFILES±äÁ¿½«»áÊÇÕâЩ²ÎÊý£¬²¢»á´«µÝµ½Ï²ãMakefileÖУ¬ÕâÊÇÒ»¸öϵͳ¼¶µÄ»·¾³±äÁ¿¡£

µ«ÊÇmakeÃüÁîÖеÄÓм¸¸ö²ÎÊý²¢²»ÍùÏ´«µÝ£¬ËüÃÇÊÇ¡°-C¡±,¡°-f¡±,¡°-h¡±¡°-o¡±ºÍ¡°-W¡±£¨ÓйØMakefile²ÎÊýµÄϸ½Ú½«ÔÚºóÃæËµÃ÷£©£¬Èç¹ûÄã²»ÏëÍùϲ㴫µÝ²ÎÊý£¬ÄÇô£¬Äã¿ÉÒÔÕâÑùÀ´£º

subsystem:

cdsubdir && $(MAKE) MAKEFLAGS=

Èç¹ûÄ㶨ÒåÁË»·¾³±äÁ¿MAKEFLAGS£¬ÄÇôÄãµÃÈ·ÐÅÆäÖеÄÑ¡ÏîÊÇ´ó¼Ò¶¼»áÓõ½µÄ£¬Èç¹ûÆäÖÐÓС°-t¡±,¡°-n¡±,ºÍ¡°-q¡±²ÎÊý£¬ÄÇô½«»áÓÐÈÃÄãÒâÏë²»µ½µÄ½á¹û£¬»òÐí»áÈÃÄãÒì³£µØ¿Ö»Å¡£

»¹ÓÐÒ»¸öÔÚ¡°Ç¶Ì×Ö´ÐС±ÖбȽÏÓÐÓõIJÎÊý£¬¡°-w¡±»òÊÇ¡°--print-directory¡±»áÔÚmakeµÄ¹ý³ÌÖÐÊä³öһЩÐÅÏ¢£¬ÈÃÄã¿´µ½Ä¿Ç°µÄ¹¤×÷Ŀ¼¡£±ÈÈ磬Èç¹ûÎÒÃǵÄϼ¶makeĿ¼ÊÇ¡°/home/hchen/gnu/make¡±£¬Èç¹ûÎÒÃÇʹÓá°make -w¡±À´Ö´ÐУ¬ÄÇôµ±½øÈë¸ÃĿ¼ʱ£¬ÎÒÃǻῴµ½£º

make: Entering directory`/home/hchen/gnu/make'.

¶øÔÚÍê³ÉϲãmakeºóÀ뿪Ŀ¼ʱ£¬ÎÒÃǻῴµ½£º

make: Leaving directory`/home/hchen/gnu/make'

µ±ÄãʹÓá°-C¡±²ÎÊýÀ´Ö¸¶¨makeϲãMakefileʱ£¬¡°-w¡±»á±»×Ô¶¯´ò¿ªµÄ¡£Èç¹û²ÎÊýÖÐÓС°-s¡±£¨¡°--slient¡±£©»òÊÇ¡°--no-print-directory¡±£¬ÄÇô£¬¡°-w¡±×ÜÊÇʧЧµÄ¡£

4.5 ¶¨ÒåÃüÁî°ü

Èç¹ûMakefileÖгöÏÖһЩÏàͬÃüÁîÐòÁУ¬ÄÇôÎÒÃÇ¿ÉÒÔΪÕâЩÏàͬµÄÃüÁîÐòÁж¨ÒåÒ»¸ö±äÁ¿¡£¶¨ÒåÕâÖÖÃüÁîÐòÁеÄÓï·¨ÒÔ¡°define¡±¿ªÊ¼£¬ÒÔ¡°endef¡±½áÊø£¬È磺

define run-yacc

yacc $(firstword $^)

mv y.tab.c $@

endef

ÕâÀ¡°run-yacc¡±ÊÇÕâ¸öÃüÁî°üµÄÃû×Ö£¬Æä²»ÒªºÍMakefileÖеıäÁ¿ÖØÃû¡£ÔÚ¡°define¡±ºÍ¡°endef¡±ÖеÄÁ½ÐоÍÊÇÃüÁîÐòÁС£Õâ¸öÃüÁî°üÖеĵÚÒ»¸öÃüÁîÊÇÔËÐÐYacc³ÌÐò£¬ÒòΪYacc³ÌÐò×ÜÊÇÉú³É¡°y.tab.c¡±µÄÎļþ£¬ËùÒÔµÚ¶þÐеÄÃüÁî¾ÍÊǰÑÕâ¸öÎļþ¸Ä¸ÄÃû×Ö¡£»¹ÊǰÑÕâ¸öÃüÁî°ü·Åµ½Ò»¸öʾÀýÖÐÀ´¿´¿´°É¡£

foo.c : foo.y

$(run-yacc)

ÎÒÃÇ¿ÉÒÔ¿´¼û£¬ÒªÊ¹ÓÃÕâ¸öÃüÁî°ü£¬ÎÒÃǾͺÃÏñʹÓñäÁ¿Ò»Ñù¡£ÔÚÕâ¸öÃüÁî°üµÄʹÓÃÖУ¬ÃüÁî°ü¡°run-yacc¡±Öеġ°$^¡±¾ÍÊÇ¡°foo.y¡±£¬¡°$@¡±¾ÍÊÇ¡°foo.c¡±£¨ÓйØÕâÖÖÒÔ¡°$¡±¿ªÍ·µÄÌØÊâ±äÁ¿£¬ÎÒÃÇ»áÔÚºóÃæ½éÉÜ£©£¬makeÔÚÖ´ÐÐÃüÁî°üʱ£¬ÃüÁî°üÖеÄÿ¸öÃüÁî»á±»ÒÀ´Î¶ÀÁ¢Ö´ÐС£

ʹÓñäÁ¿

ÔÚMakefileÖе͍ÒåµÄ±äÁ¿£¬¾ÍÏñÊÇC/C++ÓïÑÔÖеĺêÒ»Ñù£¬Ëû´ú±íÁËÒ»¸öÎı¾×Ö´®£¬ÔÚMakefileÖÐÖ´ÐеÄʱºòÆä»á×Ô¶¯Ô­Ä£Ô­ÑùµØÕ¹¿ªÔÚËùʹÓõĵط½¡£ÆäÓëC/C++Ëù²»Í¬µÄÊÇ£¬Äã¿ÉÒÔÔÚMakefileÖиıäÆäÖµ¡£ÔÚMakefileÖУ¬±äÁ¿¿ÉÒÔʹÓÃÔÚ¡°Ä¿±ê¡±£¬¡°ÒÀÀµÄ¿±ê¡±£¬¡°ÃüÁ»òÊÇ MakefileµÄÆäËü²¿·ÖÖС£±äÁ¿µÄÃüÃû×Ö¿ÉÒÔ°üº¬×Ö·û¡¢Êý×Ö£¬Ï»®Ïߣ¨¿ÉÒÔÊÇÊý×Ö¿ªÍ·£©£¬µ«²»Ó¦¸Ãº¬ÓС°:¡±¡¢¡°#¡±¡¢¡°=¡±»òÊÇ¿Õ×Ö·û£¨¿Õ¸ñ¡¢»Ø³µµÈ£©¡£±äÁ¿ÊÇ´óСдÃô¸ÐµÄ£¬¡°foo¡±¡¢¡°Foo¡±ºÍ¡°FOO¡±ÊÇÈý¸ö²»Í¬µÄ±äÁ¿Ãû¡£´«Í³µÄMakefileµÄ±äÁ¿ÃûÊÇÈ«´óдµÄÃüÃû·½Ê½£¬µ«ÎÒÍÆ¼öʹÓôóСд´îÅäµÄ±äÁ¿Ãû£¬È磺MakeFlags¡£ÕâÑù¿ÉÒÔ±ÜÃâºÍϵͳµÄ±äÁ¿³åÍ»£¬¶ø·¢ÉúÒâÍâµÄÊÂÇé¡£ÓÐһЩ±äÁ¿ÊÇºÜÆæ¹Ö×Ö´®£¬Èç¡°$<¡±¡¢¡°$@¡±µÈ£¬ÕâЩÊÇ×Ô¶¯»¯±äÁ¿£¬ÎÒ»áÔÚºóÃæ½éÉÜ¡£

Ò»¡¢±äÁ¿µÄ»ù´¡

±äÁ¿ÔÚÉùÃ÷ʱÐèÒª¸øÓè³õÖµ£¬¶øÔÚʹÓÃʱ£¬ÐèÒª¸øÔÚ±äÁ¿Ãûǰ¼ÓÉÏ¡°$¡±·ûºÅ£¬µ«×îºÃÓÃСÀ¨ºÅ¡°£¨£©¡±»òÊÇ´óÀ¨ºÅ¡°{}¡±°Ñ±äÁ¿¸ø°üÀ¨ÆðÀ´¡£Èç¹ûÄãҪʹÓÃÕæÊµµÄ¡°$¡±×Ö·û£¬ÄÇôÄãÐèÒªÓá°$$¡±À´±íʾ¡£±äÁ¿¿ÉÒÔʹÓÃÔÚÐí¶àµØ·½£¬Èç¹æÔòÖеġ°Ä¿±ê¡±¡¢¡°ÒÀÀµ¡±¡¢¡°ÃüÁÒÔ¼°ÐµıäÁ¿ÖС£

ÏÈ¿´Ò»¸öÀý×Ó£º

objects = program.o foo.o utils.o

program : $(objects)

cc -o program $(objects)

$(objects) : defs.h

±äÁ¿»áÔÚʹÓÃËüµÄµØ·½¾«È·µØÕ¹¿ª£¬¾ÍÏñC/C++ÖеĺêÒ»Ñù£¬ÀýÈ磺

foo = c

prog.o : prog.$(foo)

$(foo)$(foo) -$(foo) prog.$(foo)

Õ¹¿ªºóµÃµ½£º

prog.o : prog.c

cc -c prog.c

µ±È»£¬Ç§Íò²»ÒªÔÚÄãµÄMakefileÖÐÕâÑù¸É£¬ÕâÀïÖ»ÊǾٸöÀý×ÓÀ´±íÃ÷MakefileÖеıäÁ¿ÔÚʹÓô¦Õ¹¿ªµÄÕæÊµÑù×Ó¡£¿É¼ûÆä¾ÍÊÇÒ»¸ö¡°Ìæ´ú¡±µÄÔ­Àí¡£ÁíÍ⣬¸ø±äÁ¿¼ÓÉÏÀ¨ºÅÍêÈ«ÊÇΪÁ˸ü¼Ó°²È«µØÊ¹ÓÃÕâ¸ö±äÁ¿£¬ÔÚÉÏÃæµÄÀý×ÓÖУ¬Èç¹ûÄã²»Ïë¸ø±äÁ¿¼ÓÉÏÀ¨ºÅ£¬ÄÇÒ²¿ÉÒÔ£¬µ«ÎÒ»¹ÊÇÇ¿ÁÒ½¨ÒéÄã¸ø±äÁ¿¼ÓÉÏÀ¨ºÅ¡£

¶þ¡¢±äÁ¿ÖеıäÁ¿

ÔÚ¶¨Òå±äÁ¿µÄֵʱ£¬ÎÒÃÇ¿ÉÒÔʹÓÃÆäËü±äÁ¿À´¹¹Ôì±äÁ¿µÄÖµ£¬ÔÚMakefileÖÐÓÐÁ½ÖÖ·½Ê½À´ÔÚÓñäÁ¿¶¨Òå±äÁ¿µÄÖµ¡£

ÏÈ¿´µÚÒ»ÖÖ·½Ê½£¬Ò²¾ÍÊǼòµ¥µÄʹÓá°=¡±ºÅ£¬ÔÚ¡°=¡±×ó²àÊDZäÁ¿£¬ÓÒ²àÊDZäÁ¿µÄÖµ£¬ÓÒ²à±äÁ¿µÄÖµ¿ÉÒÔ¶¨ÒåÔÚÎļþµÄÈκÎÒ»´¦£¬Ò²¾ÍÊÇ˵£¬ÓÒ²àÖеıäÁ¿²»Ò»¶¨·ÇÒªÊÇÒѶ¨ÒåºÃµÄÖµ£¬ÆäÒ²¿ÉÒÔʹÓúóÃæ¶¨ÒåµÄÖµ¡£È磺

foo = $(bar)

bar = $(ugh)

ugh = Huh?

all:

echo $(foo)

ÎÒÃÇÖ´ÐС°makeall¡±½«»á´ò³ö±äÁ¿$(foo)µÄÖµÊÇ¡°Huh?¡±£¨$(foo)µÄÖµÊÇ$(bar)£¬$(bar)µÄÖµÊÇ$(ugh)£¬$(ugh)µÄÖµÊÇ¡°Huh?¡±£©¿É¼û£¬±äÁ¿ÊÇ¿ÉÒÔʹÓúóÃæµÄ±äÁ¿À´¶¨ÒåµÄ¡£

Õâ¸ö¹¦ÄÜÓкõĵط½£¬Ò²Óв»ºÃµÄµØ·½£¬ºÃµÄµØ·½ÊÇ£¬ÎÒÃÇ¿ÉÒ԰ѱäÁ¿µÄÕæÊµÖµÍÆµ½ºóÃæÀ´¶¨Ò壬È磺

CFLAGS =$(include_dirs) -O

include_dirs = -Ifoo -Ibar

µ±¡°CFLAGS¡±ÔÚÃüÁîÖб»Õ¹¿ªÊ±£¬»áÊÇ¡°-Ifoo -Ibar -O¡±¡£µ«ÕâÖÖÐÎʽҲÓв»ºÃµÄµØ·½

£¬ÄǾÍÊǵݹ鶨Ò壬È磺

CFLAGS = $(CFLAGS) -O

»ò£º

A = $(B)

B = $(A)

Õâ»áÈÃmakeÏÝÈëÎÞÏ޵ıäÁ¿Õ¹¿ª¹ý³ÌÖÐÈ¥£¬µ±È»£¬ÎÒÃǵÄmakeÊÇÓÐÄÜÁ¦¼ì²âÕâÑùµÄ¶¨Ò壬²¢»á±¨´í¡£»¹ÓоÍÊÇÈç¹ûÔÚ±äÁ¿ÖÐʹÓú¯Êý£¬ÄÇô£¬ÕâÖÖ·½Ê½»áÈÃÎÒÃǵÄmakeÔËÐÐʱ·Ç³£Âý£¬¸üÔã¸âµÄÊÇ£¬Ëû»áʹÓõÃÁ½¸ömakeµÄº¯Êý¡°wildcard¡±ºÍ¡°shell¡±·¢Éú²»¿ÉÔ¤ÖªµÄ´íÎó¡£ÒòΪÄã²»»áÖªµÀÕâÁ½¸öº¯Êý»á±»µ÷ÓöàÉٴΡ£ÎªÁ˱ÜÃâÉÏÃæµÄÕâÖÖ·½·¨£¬ÎÒÃÇ¿ÉÒÔʹÓÃmakeÖеÄÁíÒ»ÖÖÓñäÁ¿À´¶¨Òå±äÁ¿µÄ·½·¨¡£ÕâÖÖ·½·¨Ê¹ÓõÄÊÇ¡°:=¡±²Ù×÷·û£¬È磺

x := foo

y := $(x) bar

x := later

ÆäµÈ¼ÛÓÚ£º

y := foo bar

x := later

ÖµµÃÒ»ÌáµÄÊÇ£¬ÕâÖÖ·½·¨£¬Ç°ÃæµÄ±äÁ¿²»ÄÜʹÓúóÃæµÄ±äÁ¿£¬Ö»ÄÜʹÓÃÇ°ÃæÒѶ¨ÒåºÃÁ˵ıäÁ¿¡£Èç¹ûÊÇÕâÑù£º

y := $(x) bar

x := foo

ÄÇô£¬yµÄÖµÊÇ¡°bar¡±£¬¶ø²»ÊÇ¡°foo bar¡±¡£

ÉÏÃæ¶¼ÊÇһЩ±È½Ï¼òµ¥µÄ±äÁ¿Ê¹ÓÃÁË£¬ÈÃÎÒÃÇÀ´¿´Ò»¸ö¸´ÔÓµÄÀý×Ó£¬ÆäÖаüÀ¨ÁËmakeµÄº¯Êý¡¢Ìõ¼þ±í´ïʽºÍÒ»¸öϵͳ±äÁ¿¡°MAKELEVEL¡±µÄʹÓãº

ifeq (0,${MAKELEVEL})

cur-dir := $(shell pwd)

whoami := $(shell whoami)

host-type := $(shell arch)

MAKE := ${MAKE} host-type=${host-type} whoami=${whoami}

endif

¹ØÓÚÌõ¼þ±í´ïʽºÍº¯Êý£¬ÎÒÃÇÔÚºóÃæÔÙ˵£¬¶ÔÓÚϵͳ±äÁ¿¡°MAKELEVEL¡±£¬ÆäÒâ˼ÊÇ£¬Èç¹ûÎÒÃǵÄmakeÓÐÒ»¸öǶÌ×Ö´Ðе͝×÷£¨²Î¼ûÇ°ÃæµÄ¡°Ç¶Ì×ʹÓÃmake¡±£©£¬ÄÇô£¬Õâ¸ö±äÁ¿»á¼Ç¼ÁËÎÒÃǵĵ±Ç°MakefileµÄµ÷ÓòãÊý¡£

ÏÂÃæÔÙ½éÉÜÁ½¸ö¶¨Òå±äÁ¿Ê±ÎÒÃÇÐèÒªÖªµÀµÄ£¬ÇëÏÈ¿´Ò»¸öÀý×Ó£¬Èç¹ûÎÒÃÇÒª¶¨ÒåÒ»¸ö±äÁ¿£¬ÆäÖµÊÇÒ»¸ö¿Õ¸ñ£¬ÄÇôÎÒÃÇ¿ÉÒÔÕâÑùÀ´£º

nullstring :=

space := $(nullstring) # end of the line

nullstring ÊÇÒ»¸öEmpty±äÁ¿£¬ÆäÖÐʲôҲûÓУ¬¶øÎÒÃǵÄspaceµÄÖµÊÇÒ»¸ö¿Õ¸ñ¡£ÒòΪÔÚ²Ù×÷·ûµÄÓÒ±ßÊǺÜÄÑÃèÊöÒ»¸ö¿Õ¸ñµÄ£¬ÕâÀï²ÉÓõļ¼ÊõºÜ¹ÜÓã¬ÏÈÓÃÒ»¸ö Empty±äÁ¿À´±êÃ÷±äÁ¿µÄÖµ¿ªÊ¼ÁË£¬¶øºóÃæ²ÉÓá°#¡±×¢ÊÍ·ûÀ´±íʾ±äÁ¿¶¨ÒåµÄÖÕÖ¹£¬ÕâÑù£¬ÎÒÃÇ¿ÉÒÔ¶¨Òå³öÆäÖµÊÇÒ»¸ö¿Õ¸ñµÄ±äÁ¿¡£Çë×¢ÒâÕâÀï¹ØÓÚ¡°#¡±µÄʹÓã¬×¢ÊÍ·û¡°#¡±µÄÕâÖÖÌØÐÔÖµµÃÎÒÃÇ×¢Ò⣬Èç¹ûÎÒÃÇÕâÑù¶¨ÒåÒ»¸ö±äÁ¿£º

dir := /foo/bar # directory to put the frobs in

dirÕâ¸ö±äÁ¿µÄÖµÊÇ¡°/foo/bar¡±£¬ºóÃæ»¹¸úÁË4¸ö¿Õ¸ñ£¬Èç¹ûÎÒÃÇÕâÑùʹÓÃÕâÑù±äÁ¿À´Ö¸¶¨±ðµÄĿ¼¡ª¡ª¡°$(dir)/file¡±ÄÇô¾ÍÍêµ°ÁË¡£

»¹ÓÐÒ»¸ö±È½ÏÓÐÓõIJÙ×÷·ûÊÇ¡°?=¡±£¬ÏÈ¿´Ê¾Àý£º

FOO ?= bar

Æäº¬ÒåÊÇ£¬Èç¹ûFOOûÓб»¶¨Òå¹ý£¬ÄÇô±äÁ¿FOOµÄÖµ¾ÍÊÇ¡°bar¡±£¬Èç¹ûFOOÏÈǰ±»¶¨Òå¹ý£¬ÄÇôÕâÌõÓォʲôҲ²»×ö£¬ÆäµÈ¼ÛÓÚ£º

ifeq ($(origin FOO), undefined)

FOO = bar

endif

Èý¡¢±äÁ¿¸ß¼¶Ó÷¨

ÕâÀï½éÉÜÁ½ÖÖ±äÁ¿µÄ¸ß¼¶Ê¹Ó÷½·¨£¬µÚÒ»ÖÖÊDZäÁ¿ÖµµÄÌæ»»¡£

ÎÒÃÇ¿ÉÒÔÌæ»»±äÁ¿ÖеĹ²ÓеIJ¿·Ö£¬Æä¸ñʽÊÇ¡°$(var:a=b)¡±»òÊÇ¡°${var:a=b}¡±£¬ÆäÒâ˼ÊÇ£¬°Ñ±äÁ¿¡°var¡±ÖÐËùÓÐÒÔ¡°a¡±×Ö´®¡°½áβ¡±µÄ¡°a¡±Ìæ»»³É¡°b¡±×Ö´®¡£ÕâÀïµÄ¡°½áβ¡±Òâ˼ÊÇ¡°¿Õ¸ñ¡±»òÊÇ¡°½áÊø·û¡±¡£

»¹ÊÇ¿´Ò»¸öʾÀý°É£º

foo := a.o b.o c.o

bar := $(foo:.o=.c)

Õâ¸öʾÀýÖУ¬ÎÒÃÇÏȶ¨ÒåÁËÒ»¸ö¡°$(foo)¡±±äÁ¿£¬¶øµÚ¶þÐеÄÒâ˼Êǰѡ°$(foo)¡±ÖÐËùÓÐÒÔ¡°.o¡±×Ö´®¡°½áβ¡±È«²¿Ìæ»»³É¡°.c¡±£¬ËùÒÔÎÒÃǵġ°$(bar)¡±µÄÖµ¾ÍÊÇ¡°a.c b.c c.c¡±¡£

ÁíÍâÒ»ÖÖ±äÁ¿Ìæ»»µÄ¼¼ÊõÊÇÒÔ¡°¾²Ì¬Ä£Ê½¡±£¨²Î¼ûÇ°ÃæÕ½ڣ©¶¨ÒåµÄ£¬È磺

foo := a.o b.o c.o

bar := $(foo:%.o=%.c)

ÕâÒÀÀµÓÚ±»Ìæ»»×Ö´®ÖеÄÓÐÏàͬµÄģʽ£¬Ä£Ê½ÖбØÐë°üº¬Ò»¸ö¡°%¡±×Ö·û£¬Õâ¸öÀý×ÓͬÑùÈÃ$(bar)±äÁ¿µÄֵΪ¡°a.c b.c c.c¡±¡£

µÚ¶þÖָ߼¶Ó÷¨ÊÇ¡ª¡ª¡°°Ñ±äÁ¿µÄÖµÔÙµ±³É±äÁ¿¡±¡£ÏÈ¿´Ò»¸öÀý×Ó£º

x = y

y = z

a := $($(x))

ÔÚÕâ¸öÀý×ÓÖУ¬$(x)µÄÖµÊÇ¡°y¡±£¬ËùÒÔ$($(x))¾ÍÊÇ$(y)£¬ÓÚÊÇ$(a)µÄÖµ¾ÍÊÇ¡°z¡±¡££¨×¢Ò⣬ÊÇ¡°x=y¡±£¬¶ø²»ÊÇ¡°x=$(y)¡±£©

ÎÒÃÇ»¹¿ÉÒÔʹÓøü¶àµÄ²ã´Î£º

x = y

y = z

z = u

a := $($($(x)))

ÕâÀïµÄ$(a)µÄÖµÊÇ¡°u¡±£¬Ïà¹ØµÄÍÆµ¼Áô¸ø¶ÁÕß×Ô¼ºÈ¥×ö°É¡£

ÈÃÎÒÃÇÔÙ¸´ÔÓÒ»µã£¬Ê¹ÓÃÉÏ¡°ÔÚ±äÁ¿¶¨ÒåÖÐʹÓñäÁ¿¡±µÄµÚÒ»¸ö·½Ê½£¬À´¿´Ò»¸öÀý×Ó£º

x = $(y)

y = z

z = Hello

a := $($(x))

ÕâÀïµÄ$($(x))±»Ìæ»»³ÉÁË$($(y))£¬ÒòΪ$(y)ÖµÊÇ¡°z¡±£¬ËùÒÔ£¬×îÖÕ½á¹ûÊÇ£ºa:=$(z)£¬Ò²¾ÍÊÇ¡°Hello¡±¡£

ÔÙ¸´ÔÓÒ»µã£¬ÎÒÃÇÔÙ¼ÓÉϺ¯Êý£º

x = variable1

variable2 := Hello

y = $(subst 1,2,$(x))

z = y

a := $($($(z)))

Õâ¸öÀý×ÓÖУ¬¡°$($($(z)))¡±À©Õ¹Îª¡°$($(y))¡±£¬¶øÆäÔٴα»À©Õ¹Îª¡°$($(subst 1,2,$(x)))¡±¡£$(x)µÄÖµÊÇ¡°variable1¡±£¬substº¯Êý°Ñ¡°variable1¡±ÖеÄËùÓС°1¡±×Ö´®Ìæ»»³É¡°2¡±×Ö´®£¬ÓÚÊÇ£¬¡°variable1¡±±ä³É¡°variable2¡±£¬ÔÙÈ¡ÆäÖµ£¬ËùÒÔ£¬×îÖÕ£¬$(a)µÄÖµ¾ÍÊÇ$(variable2)µÄÖµ¡ª¡ª ¡°Hello¡±¡££¨à¸£¬ºÃ²»ÈÝÒ×£©

ÔÚÕâÖÖ·½Ê½ÖУ¬»òÒª¿ÉÒÔʹÓöà¸ö±äÁ¿À´×é³ÉÒ»¸ö±äÁ¿µÄÃû×Ö£¬È»ºóÔÙÈ¡ÆäÖµ£º

first_second = Hello

a = first

b = second

all = $($a_$b)

ÕâÀïµÄ¡°$a_$b¡±×é³ÉÁË¡°first_second¡±£¬ÓÚÊÇ£¬$(all)µÄÖµ¾ÍÊÇ¡°Hello¡±¡£

ÔÙÀ´¿´¿´½áºÏµÚÒ»ÖÖ¼¼ÊõµÄÀý×Ó£º

a_objects := a.o b.o c.o

1_objects := 1.o 2.o 3.o

sources := $($(a1)_objects:.o=.c)

Õâ¸öÀý×ÓÖУ¬Èç¹û$(a1)µÄÖµÊÇ¡°a¡±µÄ»°£¬ÄÇô£¬$(sources)µÄÖµ¾ÍÊÇ¡°a.c b.c c.c¡±£»Èç¹û$(a1)µÄÖµÊÇ¡°1¡±£¬ÄÇô$(sources)µÄÖµÊÇ¡°1.c2.c 3.c¡±¡£

ÔÙÀ´¿´Ò»¸öÕâÖÖ¼¼ÊõºÍ¡°º¯Êý¡±Óë¡°Ìõ¼þÓï¾ä¡±Ò»Í¬Ê¹ÓõÄÀý×Ó£º

ifdef do_sort

func := sort

else

func := strip

endif

bar := a d b g q c

foo := $($(func) $(bar))

Õâ¸öʾÀýÖУ¬Èç¹û¶¨ÒåÁË¡°do_sort¡±£¬ÄÇô£ºfoo := $(sort a d b g q c)£¬ÓÚÊÇ$(foo)µÄÖµ¾ÍÊÇ¡°a b c d g q¡±£¬¶øÈç¹ûûÓж¨Òå¡°do_sort¡±£¬ÄÇô£ºfoo := $(sort a d bg q c)£¬µ÷ÓõľÍÊÇstripº¯Êý¡£

µ±È»£¬¡°°Ñ±äÁ¿µÄÖµÔÙµ±³É±äÁ¿¡±ÕâÖÖ¼¼Êõ£¬Í¬Ñù¿ÉÒÔÓÃÔÚ²Ù×÷·ûµÄ×ó±ß£º

dir = foo

$(dir)_sources := $(wildcard $(dir)/*.c)

define $(dir)_print

lpr $($(dir)_sources)

endef

Õâ¸öÀý×ÓÖж¨ÒåÁËÈý¸ö±äÁ¿£º¡°dir¡±£¬¡°foo_sources¡±ºÍ¡°foo_print¡±¡£

ËÄ¡¢×·¼Ó±äÁ¿Öµ

ÎÒÃÇ¿ÉÒÔʹÓá°+=¡±²Ù×÷·û¸ø±äÁ¿×·¼ÓÖµ£¬È磺

objects = main.o foo.o bar.o utils.o

objects += another.o

ÓÚÊÇ£¬ÎÒÃǵÄ$(objects)Öµ±ä³É£º¡°main.o foo.o bar.o utils.o another.o¡±£¨another.o±»×·¼Ó½øÈ¥ÁË£©

ʹÓá°+=¡±²Ù×÷·û£¬¿ÉÒÔÄ£ÄâΪÏÂÃæµÄÕâÖÖÀý×Ó£º

objects = main.o foo.o bar.o utils.o

objects := $(objects) another.o

Ëù²»Í¬µÄÊÇ£¬Óá°+=¡±¸üΪ¼ò½à¡£

Èç¹û±äÁ¿Ö®Ç°Ã»Óж¨Òå¹ý£¬ÄÇô£¬¡°+=¡±»á×Ô¶¯±ä³É¡°=¡±£¬Èç¹ûÇ°ÃæÓбäÁ¿¶¨Ò壬ÄÇô¡°+=¡±»á¼Ì³ÐÓÚǰ´Î²Ù×÷µÄ¸³Öµ·û¡£Èç¹ûǰһ´ÎµÄÊÇ¡°:=¡±£¬ÄÇô¡°+=¡±»áÒÔ¡°:=¡±×÷ΪÆä¸³Öµ·û£¬È磺

variable := value

variable += more

µÈ¼ÛÓÚ£º

variable := value

variable := $(variable) more

µ«Èç¹ûÊÇÕâÖÖÇé¿ö£º

variable = value

variable += more

ÓÉÓÚǰ´ÎµÄ¸³Öµ·ûÊÇ¡°=¡±£¬ËùÒÔ¡°+=¡±Ò²»áÒÔ¡°=¡±À´×öΪ¸³Öµ£¬ÄÇôÆñ²»»á·¢Éú±äÁ¿µÄµÝ²¹¹é¶¨Ò壬ÕâÊǺܲ»ºÃµÄ£¬ËùÒÔmake»á×Ô¶¯ÎªÎÒÃǽâ¾öÕâ¸öÎÊÌ⣬ÎÒÃDz»±Øµ£ÐÄÕâ¸öÎÊÌâ¡£

Îå¡¢override ָʾ·û

Èç¹ûÓбäÁ¿ÊÇͨ³£makeµÄÃüÁîÐвÎÊýÉèÖõģ¬ÄÇôMakefileÖжÔÕâ¸ö±äÁ¿µÄ¸³Öµ»á±»ºöÂÔ¡£Èç¹ûÄãÏëÔÚMakefileÖÐÉèÖÃÕâÀà²ÎÊýµÄÖµ£¬ÄÇô£¬Äã¿ÉÒÔʹÓá°override¡±Ö¸Ê¾·û¡£ÆäÓï·¨ÊÇ£º

override <variable> = <value>

override <variable> := <value>

µ±È»£¬Ä㻹¿ÉÒÔ×·¼Ó£º

override <variable> += <more text>

¶ÔÓÚ¶àÐеıäÁ¿¶¨Ò壬ÎÒÃÇÓÃdefineָʾ·û£¬ÔÚdefineָʾ·ûǰ£¬Ò²Í¬Ñù¿ÉÒÔʹÓÃovverideָʾ·û£¬È磺

override define foo

bar

endef

Áù¡¢¶àÐбäÁ¿

»¹ÓÐÒ»ÖÖÉèÖñäÁ¿ÖµµÄ·½·¨ÊÇʹÓÃdefine¹Ø¼ü×Ö¡£Ê¹ÓÃdefine¹Ø¼ü×ÖÉèÖñäÁ¿µÄÖµ¿ÉÒÔÓл»ÐУ¬ÕâÓÐÀûÓÚ¶¨ÒåһϵÁеÄÃüÁî£¨Ç°ÃæÎÒÃǽ²¹ý¡°ÃüÁî°ü¡±µÄ¼¼Êõ¾ÍÊÇÀûÓÃÕâ¸ö¹Ø¼ü×Ö£©¡£defineָʾ·ûºóÃæ¸úµÄÊDZäÁ¿µÄÃû×Ö£¬¶øÖØÆðÒ»Ðж¨Òå±äÁ¿µÄÖµ£¬¶¨ÒåÊÇÒÔendef¹Ø¼ü×Ö½áÊø¡£Æä¹¤×÷·½Ê½ºÍ¡°=¡±²Ù×÷·ûÒ»Ñù¡£±äÁ¿µÄÖµ¿ÉÒÔ°üº¬º¯Êý¡¢ÃüÁî¡¢ÎÄ×Ö£¬»òÊÇÆäËü±äÁ¿¡£ÒòΪÃüÁîÐèÒªÒÔ[Tab]¼ü¿ªÍ·£¬ËùÒÔÈç¹ûÄãÓÃdefine¶¨ÒåµÄÃüÁî±äÁ¿ÖÐûÓÐÒÔ[Tab]¼ü¿ªÍ·£¬ÄÇômake¾Í²»»á°ÑÆäÈÏΪÊÇÃüÁî¡£

ÏÂÃæµÄÕâ¸öʾÀýչʾÁËdefineµÄÓ÷¨£º

define two-lines

echo foo

echo $(bar)

endef

Æß¡¢»·¾³±äÁ¿

makeÔËÐÐʱµÄϵͳ»·¾³±äÁ¿¿ÉÒÔÔÚmake¿ªÊ¼ÔËÐÐʱ±»ÔØÈëµ½MakefileÎļþÖУ¬µ«ÊÇÈç¹ûMakefileÖÐÒѶ¨ÒåÁËÕâ¸ö±äÁ¿£¬»òÊÇÕâ¸ö±äÁ¿ÓÉmakeÃüÁîÐдøÈ룬ÄÇôϵͳµÄ»·¾³±äÁ¿µÄÖµ½«±»¸²¸Ç¡££¨Èç¹ûmakeÖ¸¶¨ÁË¡°-e¡±²ÎÊý£¬ÄÇô£¬ÏµÍ³»·¾³±äÁ¿½«¸²¸ÇMakefileÖж¨ÒåµÄ±äÁ¿£©Òò´Ë£¬Èç¹ûÎÒÃÇÔÚ»·¾³±äÁ¿ÖÐÉèÖÃÁË¡°CFLAGS¡±»·¾³±äÁ¿£¬ÄÇôÎÒÃǾͿÉÒÔÔÚËùÓеÄMakefileÖÐʹÓÃÕâ¸ö±äÁ¿ÁË¡£Õâ¶ÔÓÚÎÒÃÇʹÓÃͳһµÄ±àÒë²ÎÊýÓбȽϴóµÄºÃ´¦¡£Èç¹ûMakefileÖж¨ÒåÁËCFLAGS£¬ÄÇôÔò»áʹÓÃMakefileÖеÄÕâ¸ö±äÁ¿£¬Èç¹ûûÓж¨ÒåÔòʹÓÃϵͳ»·¾³±äÁ¿µÄÖµ£¬Ò»¸ö¹²ÐԺ͸öÐÔµÄͳһ£¬ºÜÏñ¡°È«¾Ö±äÁ¿¡±ºÍ¡°¾Ö²¿±äÁ¿¡±µÄÌØÐÔ¡£ µ±makeǶÌ×µ÷ÓÃʱ£¨²Î¼ûÇ°ÃæµÄ¡°Ç¶Ì×µ÷Óá±Õ½ڣ©£¬ÉϲãMakefileÖж¨ÒåµÄ±äÁ¿»áÒÔϵͳ»·¾³±äÁ¿µÄ·½Ê½´«µÝµ½Ï²ãµÄMakefileÖС£µ±È»£¬Ä¬ÈÏÇé¿öÏ£¬Ö»ÓÐͨ¹ýÃüÁîÐÐÉèÖõıäÁ¿»á±»´«µÝ¡£¶ø¶¨ÒåÔÚÎļþÖеıäÁ¿£¬Èç¹ûÒªÏòϲã Makefile´«µÝ£¬ÔòÐèҪʹÓÃexprot¹Ø¼ü×ÖÀ´ÉùÃ÷¡££¨²Î¼ûÇ°ÃæÕ½ڣ© µ±È»£¬ÎÒ²¢²»ÍƼö°ÑÐí¶àµÄ±äÁ¿¶¼¶¨ÒåÔÚϵͳ»·¾³ÖУ¬ÕâÑù£¬ÔÚÎÒÃÇÖ´Ðв»ÓõÄMakefileʱ£¬ÓµÓеÄÊÇͬһÌ×ϵͳ±äÁ¿£¬Õâ¿ÉÄÜ»á´øÀ´¸ü¶àµÄÂé·³¡£

°Ë¡¢Ä¿±ê±äÁ¿

Ç°ÃæÎÒÃÇËù½²µÄÔÚMakefileÖж¨ÒåµÄ±äÁ¿¶¼ÊÇ¡°È«¾Ö±äÁ¿¡±£¬ÔÚÕû¸öÎļþ£¬ÎÒÃǶ¼¿ÉÒÔ·ÃÎÊÕâЩ±äÁ¿¡£µ±È»£¬¡°×Ô¶¯»¯±äÁ¿¡±³ýÍ⣬Èç¡°$<¡±µÈÕâÖÖÀàÁ¿µÄ×Ô¶¯»¯±äÁ¿¾ÍÊôÓÚ¡°¹æÔòÐͱäÁ¿¡±£¬ÕâÖÖ±äÁ¿µÄÖµÒÀÀµÓÚ¹æÔòµÄÄ¿±êºÍÒÀÀµÄ¿±êµÄ¶¨Òå¡£

µ±È»£¬ÎÒÑùͬÑù¿ÉÒÔΪij¸öÄ¿±êÉèÖþֲ¿±äÁ¿£¬ÕâÖÖ±äÁ¿±»³ÆÎª¡°Target-specific Variable¡±£¬Ëü¿ÉÒԺ͡°È«¾Ö±äÁ¿¡±Í¬Ãû£¬ÒòΪËüµÄ×÷Ó÷¶Î§Ö»ÔÚÕâÌõ¹æÔòÒÔ¼°Á¬´ø¹æÔòÖУ¬ËùÒÔÆäÖµÒ²Ö»ÔÚ×÷Ó÷¶Î§ÄÚÓÐЧ¡£¶ø²»»áÓ°Ïì¹æÔòÁ´ÒÔÍâµÄÈ«¾Ö±äÁ¿µÄÖµ¡£

ÆäÓï·¨ÊÇ£º

<target ...> : <variable-assignment>

<target ...> : overide<variable-assignment>

<variable-assignment>¿ÉÒÔÊÇÇ°Ãæ½²¹ýµÄ¸÷ÖÖ¸³Öµ±í´ïʽ£¬Èç¡°=¡±¡¢¡°:=¡±¡¢¡°+=¡±»òÊÇ¡°£¿=¡±¡£µÚ¶þ¸öÓï·¨ÊÇÕë¶ÔÓÚmakeÃüÁîÐдøÈëµÄ±äÁ¿£¬»òÊÇϵͳ»·¾³±äÁ¿¡£

Õâ¸öÌØÐԷdz£µÄÓÐÓ㬵±ÎÒÃÇÉèÖÃÁËÕâÑùÒ»¸ö±äÁ¿£¬Õâ¸ö±äÁ¿»á×÷Óõ½ÓÉÕâ¸öÄ¿±êËùÒý·¢µÄËùÓеĹæÔòÖÐÈ¥¡£È磺

prog : CFLAGS = -g

prog : prog.o foo.o bar.o

$(CC) $(CFLAGS) prog.o foo.o bar.o

prog.o : prog.c

$(CC) $(CFLAGS) prog.c

foo.o : foo.c

$(CC) $(CFLAGS) foo.c

bar.o : bar.c

$(CC) $(CFLAGS) bar.c

ÔÚÕâ¸öʾÀýÖУ¬²»¹ÜÈ«¾ÖµÄ$(CFLAGS)µÄÖµÊÇʲô£¬ÔÚprogÄ¿±ê£¬ÒÔ¼°ÆäËùÒý·¢µÄËùÓйæÔòÖУ¨prog.o foo.o bar.oµÄ¹æÔò£©£¬$(CFLAGS)µÄÖµ¶¼ÊÇ¡°-g¡±

¾Å¡¢Ä£Ê½±äÁ¿

ÔÚGNUµÄmakeÖУ¬»¹Ö§³Öģʽ±äÁ¿£¨Pattern-specific Variable£©£¬Í¨¹ýÉÏÃæµÄÄ¿±ê±äÁ¿ÖУ¬ÎÒÃÇÖªµÀ£¬±äÁ¿¿ÉÒÔ¶¨ÒåÔÚij¸öÄ¿±êÉÏ¡£Ä£Ê½±äÁ¿µÄºÃ´¦¾ÍÊÇ£¬ÎÒÃÇ¿ÉÒÔ¸ø¶¨Ò»ÖÖ¡°Ä£Ê½¡±£¬¿ÉÒ԰ѱäÁ¿¶¨ÒåÔÚ·ûºÏÕâÖÖģʽµÄËùÓÐÄ¿±êÉÏ¡£

ÎÒÃÇÖªµÀ£¬makeµÄ¡°Ä£Ê½¡±Ò»°ãÊÇÖÁÉÙº¬ÓÐÒ»¸ö¡°%¡±µÄ£¬ËùÒÔ£¬ÎÒÃÇ¿ÉÒÔÒÔÈçÏ·½Ê½¸øËùÓÐÒÔ[.o]½áβµÄÄ¿±ê¶¨ÒåÄ¿±ê±äÁ¿£º

%.o : CFLAGS = -O

ͬÑù£¬Ä£Ê½±äÁ¿µÄÓï·¨ºÍ¡°Ä¿±ê±äÁ¿¡±Ò»Ñù£º

<pattern ...> : <variable-assignment>

<pattern ...> : override<variable-assignment>

overrideͬÑùÊÇÕë¶ÔÓÚϵͳ»·¾³´«ÈëµÄ±äÁ¿£¬»òÊÇmakeÃüÁîÐÐÖ¸¶¨µÄ±äÁ¿¡£

ʹÓÃÌõ¼þÅжϣ¬¿ÉÒÔÈÃmake¸ù¾ÝÔËÐÐʱµÄ²»Í¬Çé¿öÑ¡Ôñ²»Í¬µÄÖ´ÐзÖÖ§¡£Ìõ¼þ±í´ïʽ¿ÉÒÔÊDZȽϱäÁ¿µÄÖµ£¬»òÊDZȽϱäÁ¿ºÍ³£Á¿µÄÖµ¡£

Ò»¡¢Ê¾Àý

ÏÂÃæµÄÀý×Ó£¬ÅжÏ$(CC)±äÁ¿ÊÇ·ñ¡°gcc¡±£¬Èç¹ûÊǵϰ£¬ÔòʹÓÃGNUº¯Êý±àÒëÄ¿±ê¡£

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

¿É¼û£¬ÔÚÉÏÃæÊ¾ÀýµÄÕâ¸ö¹æÔòÖУ¬Ä¿±ê¡°foo¡±¿ÉÒÔ¸ù¾Ý±äÁ¿¡°$(CC)¡±ÖµÀ´Ñ¡È¡²»Í¬µÄº¯Êý¿âÀ´±àÒë³ÌÐò¡£

ÎÒÃÇ¿ÉÒÔ´ÓÉÏÃæµÄʾÀýÖп´µ½Èý¸ö¹Ø¼ü×Ö£ºifeq¡¢elseºÍendif¡£ifeqµÄÒâ˼±íʾÌõ¼þÓï¾äµÄ¿ªÊ¼£¬²¢Ö¸¶¨Ò»¸öÌõ¼þ±í´ïʽ£¬±í´ïʽ°üº¬Á½¸ö²ÎÊý£¬ÒÔ¶ººÅ·Ö¸ô£¬±í´ïʽÒÔÔ²À¨ºÅÀ¨Æð¡£else±íʾÌõ¼þ±í´ïʽΪ¼ÙµÄÇé¿ö¡£endif±íʾһ¸öÌõ¼þÓï¾äµÄ½áÊø£¬ÈκÎÒ»¸öÌõ¼þ±í´ïʽ¶¼Ó¦¸ÃÒÔendif½áÊø¡£µ±ÎÒÃǵıäÁ¿$(CC)ÖµÊÇ¡°gcc¡±Ê±£¬Ä¿±êfooµÄ¹æÔòÊÇ£º

foo: $(objects)

$(CC) -o foo $(objects) $(libs_for_gcc)

¶øµ±ÎÒÃǵıäÁ¿$(CC)Öµ²»ÊÇ¡°gcc¡±Ê±£¨±ÈÈç¡°cc¡±£©£¬Ä¿±êfooµÄ¹æÔòÊÇ£º

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)

¶þ¡¢Óï·¨

Ìõ¼þ±í´ïʽµÄÓ﷨Ϊ£º

<conditional-directive>

<text-if-true>

endif

ÒÔ¼°£º

<conditional-directive>

<text-if-true>

else

<text-if-false>

endif

ÆäÖÐ<conditional-directive>±íʾÌõ¼þ¹Ø¼ü×Ö£¬Èç¡°ifeq¡±¡£Õâ¸ö¹Ø¼ü×ÖÓÐËĸö¡£

µÚÒ»¸öÊÇÎÒÃÇÇ°ÃæËù¼û¹ýµÄ¡°ifeq¡±

ifeq (<arg1>, <arg2> )

ifeq '<arg1>' '<arg2>'

ifeq "<arg1>""<arg2>"

ifeq "<arg1>" '<arg2>'

ifeq '<arg1>' "<arg2>"

±È½Ï²ÎÊý¡°arg1¡±ºÍ¡°arg2¡±µÄÖµÊÇ·ñÏàͬ¡£µ±È»£¬²ÎÊýÖÐÎÒÃÇ»¹¿ÉÒÔʹÓÃmakeµÄº¯Êý¡£È磺

ifeq ($(strip $(foo)),)

<text-if-empty>

endif

Õâ¸öʾÀýÖÐʹÓÃÁË¡°strip¡±º¯Êý£¬Èç¹ûÕâ¸öº¯ÊýµÄ·µ»ØÖµÊǿգ¨Empty£©£¬ÄÇô<text-if-empty>¾ÍÉúЧ¡£

µÚ¶þ¸öÌõ¼þ¹Ø¼ü×ÖÊÇ¡°ifneq¡±¡£Óï·¨ÊÇ£º

ifneq (<arg1>, <arg2> )

ifneq '<arg1>' '<arg2>'

ifneq "<arg1>""<arg2>"

ifneq "<arg1>" '<arg2>'

ifneq '<arg1>' "<arg2>"

Æä±È½Ï²ÎÊý¡°arg1¡±ºÍ¡°arg2¡±µÄÖµÊÇ·ñÏàͬ£¬Èç¹û²»Í¬£¬ÔòÎªÕæ¡£ºÍ¡°ifeq¡±ÀàËÆ¡£

µÚÈý¸öÌõ¼þ¹Ø¼ü×ÖÊÇ¡°ifdef¡±¡£Óï·¨ÊÇ£º

ifdef <variable-name>

Èç¹û±äÁ¿<variable-name>µÄÖµ·Ç¿Õ£¬Äǵ½±í´ïÊ½ÎªÕæ¡£·ñÔò£¬±í´ïʽΪ¼Ù¡£µ±È»£¬<variable-name>ͬÑù¿ÉÒÔÊÇÒ»¸öº¯ÊýµÄ·µ»ØÖµ¡£×¢Ò⣬ifdefÖ»ÊDzâÊÔÒ»¸ö±äÁ¿ÊÇ·ñÓÐÖµ£¬Æä²¢²»»á°Ñ±äÁ¿À©Õ¹µ½µ±Ç°Î»Ö᣻¹ÊÇÀ´¿´Á½¸öÀý×Ó£º

ʾÀýÒ»£º

bar =

foo = $(bar)

ifdef foo

frobozz = yes

else

frobozz = no

endif

ʾÀý¶þ£º

foo =

ifdef foo

frobozz = yes

else

frobozz = no

endif

µÚÒ»¸öÀý×ÓÖУ¬¡°$(frobozz)¡±ÖµÊÇ¡°yes¡±£¬µÚ¶þ¸öÔòÊÇ¡°no¡±¡£

µÚËĸöÌõ¼þ¹Ø¼ü×ÖÊÇ¡°ifndef¡±¡£ÆäÓï·¨ÊÇ£º

ifndef <variable-name>

Õâ¸öÎҾͲ»¶à˵ÁË£¬ºÍ¡°ifdef¡±ÊÇÏà·´µÄÒâ˼¡£

ÔÚ<conditional-directive>ÕâÒ»ÐÐÉÏ£¬¶àÓàµÄ¿Õ¸ñÊDZ»ÔÊÐíµÄ£¬µ«ÊDz»ÄÜÒÔ[Tab]¼ü×öΪ¿ªÊ¼£¨²»È»¾Í±»ÈÏΪÊÇÃüÁ¡£¶ø×¢ÊÍ·û¡°#¡±Í¬ÑùÒ²Êǰ²È«µÄ¡£¡°else¡±ºÍ¡°endif¡±Ò²

Ò»Ñù£¬Ö»Òª²»ÊÇÒÔ[Tab]¼ü¿ªÊ¼¾ÍÐÐÁË¡£Ìرð×¢ÒâµÄÊÇ£¬makeÊÇÔÚ¶ÁÈ¡Makefileʱ¾Í¼ÆËãÌõ¼þ±í´ïʽµÄÖµ£¬²¢¸ù¾ÝÌõ¼þ±í´ïʽµÄÖµÀ´Ñ¡ÔñÓï¾ä£¬ËùÒÔ£¬Äã×îºÃ²»Òª°Ñ×Ô¶¯»¯±äÁ¿£¨Èç¡°$@¡±µÈ£©·ÅÈëÌõ¼þ±í´ïʽÖУ¬ÒòΪ×Ô¶¯»¯±äÁ¿ÊÇÔÚÔËÐÐʱ²ÅÓеġ£¶øÇÒ£¬ÎªÁ˱ÜÃâ»ìÂÒ£¬make²»ÔÊÐí°ÑÕû¸öÌõ¼þÓï¾ä·Ö³ÉÁ½²¿·Ö·ÅÔÚ²»Í¬µÄÎļþÖС£

ʹÓú¯Êý

ÔÚMakefileÖпÉÒÔʹÓú¯ÊýÀ´´¦Àí±äÁ¿£¬´Ó¶øÈÃÎÒÃǵÄÃüÁî»òÊǹæÔò¸üΪµÄÁé»îºÍ¾ßÓÐÖÇÄÜ¡£makeËùÖ§³ÖµÄº¯ÊýÒ²²»ËãºÜ¶à£¬²»¹ýÒѾ­×ã¹»ÎÒÃǵIJÙ×÷ÁË¡£º¯Êýµ÷Óú󣬺¯ÊýµÄ·µ»ØÖµ¿ÉÒÔµ±×ö±äÁ¿À´Ê¹Óá£

Ò»¡¢º¯ÊýµÄµ÷ÓÃÓï·¨

º¯Êýµ÷Ó㬺ÜÏñ±äÁ¿µÄʹÓã¬Ò²ÊÇÒÔ¡°$¡±À´±êʶµÄ£¬ÆäÓï·¨ÈçÏ£º

$(<function> <arguments> )

»òÊÇ

${<function> <arguments>}

ÕâÀ<function>¾ÍÊǺ¯ÊýÃû£¬makeÖ§³ÖµÄº¯Êý²»¶à¡£<arguments>ÊǺ¯ÊýµÄ²ÎÊý£¬²ÎÊý¼äÒÔ¶ººÅ¡°,¡±·Ö¸ô£¬¶øº¯ÊýÃûºÍ²ÎÊýÖ®¼äÒÔ¡°¿Õ¸ñ¡±·Ö¸ô¡£º¯Êýµ÷ÓÃÒÔ¡°$¡±¿ªÍ·£¬ÒÔÔ²À¨ºÅ»ò»¨À¨ºÅ°Ñº¯ÊýÃûºÍ²ÎÊýÀ¨Æð¡£¸Ð¾õºÜÏñÒ»¸ö±äÁ¿£¬ÊDz»ÊÇ£¿º¯ÊýÖеIJÎÊý¿ÉÒÔʹÓñäÁ¿£¬ÎªÁË·ç¸ñµÄͳһ£¬º¯ÊýºÍ±äÁ¿µÄÀ¨ºÅ×îºÃÒ»Ñù£¬ÈçʹÓá°$(subst a,b,$(x))¡±ÕâÑùµÄÐÎʽ£¬¶ø²»ÊÇ¡°$(substa,b,${x})¡±µÄÐÎʽ¡£ÒòΪͳһ»á¸üÇå³þ£¬Ò²»á¼õÉÙһЩ²»±ØÒªµÄÂé·³¡£

»¹ÊÇÀ´¿´Ò»¸öʾÀý£º

comma:= ,

empty:=

space:= $(empty) $(empty)

foo:= a b c

bar:= $(subst $(space),$(comma),$(foo))

ÔÚÕâ¸öʾÀýÖУ¬$(comma)µÄÖµÊÇÒ»¸ö¶ººÅ¡£$(space)ʹÓÃÁË$(empty)¶¨ÒåÁËÒ»¸ö¿Õ¸ñ£¬$(foo)µÄÖµÊÇ¡°a b c¡±£¬$(bar)µÄ¶¨ÒåÓ㬵÷ÓÃÁ˺¯Êý¡°subst¡±£¬ÕâÊÇÒ»¸öÌæ»»º¯Êý£¬Õâ¸öº¯ÊýÓÐÈý¸ö²ÎÊý£¬µÚÒ»¸ö²ÎÊýÊDZ»Ìæ»»×Ö´®£¬µÚ¶þ¸ö²ÎÊýÊÇÌæ»»×Ö´®£¬µÚÈý¸ö²ÎÊýÊÇÌæ»»²Ù×÷×÷ÓõÄ×Ö´®¡£Õâ¸öº¯ÊýÒ²¾ÍÊǰÑ$(foo)ÖеĿոñÌæ»»³É¶ººÅ£¬ËùÒÔ$(bar)µÄÖµÊÇ¡°a,b,c¡±¡£

¶þ¡¢×Ö·û´®´¦Àíº¯Êý

$(subst <from>,<to>,<text> )

Ãû³Æ£º×Ö·û´®Ìæ»»º¯Êý¡ª¡ªsubst¡£

¹¦ÄÜ£º°Ñ×Ö´®<text>ÖеÄ<from>×Ö·û´®Ìæ»»³É<to>¡£

·µ»Ø£ºº¯Êý·µ»Ø±»Ìæ»»¹ýºóµÄ×Ö·û´®¡£

ʾÀý£º

$(subst ee,EE,feet on the street)£¬

°Ñ¡°feeton the street¡±Öеġ°ee¡±Ìæ»»³É¡°EE¡±£¬·µ»Ø½á¹ûÊÇ¡°fEEt on the strEEt¡±¡£

$(patsubst<pattern>,<replacement>,<text> )

Ãû³Æ£ºÄ£Ê½×Ö·û´®Ìæ»»º¯Êý¡ª¡ªpatsubst¡£

¹¦ÄÜ£º²éÕÒ<text>Öеĵ¥´Ê£¨µ¥´ÊÒÔ¡°¿Õ¸ñ¡±¡¢¡°Tab¡±»ò¡°»Ø³µ¡±¡°»»ÐС±·Ö¸ô£©ÊÇ·ñ·ûºÏģʽ<pattern>£¬Èç¹ûÆ¥ÅäµÄ»°£¬ÔòÒÔ<replacement>Ìæ»»¡£ÕâÀ<pattern>¿ÉÒÔ°üÀ¨Í¨Åä·û¡°%¡±£¬±íʾÈÎÒⳤ¶ÈµÄ×Ö´®¡£Èç¹û<replacement>ÖÐÒ²°üº¬¡°%¡±£¬ÄÇô£¬<replacement>ÖеÄÕâ¸ö¡°%¡±½«ÊÇ<pattern>ÖеÄÄǸö¡°%¡±Ëù´ú±íµÄ×Ö´®¡££¨¿ÉÒÔÓá°\¡±À´×ªÒ壬ÒÔ¡°\%¡±À´±íÊ¾ÕæÊµº¬ÒåµÄ¡°%¡±×Ö·û£©·µ»Ø£ºº¯Êý·µ»Ø±»Ìæ»»¹ýºóµÄ×Ö·û´®¡£

ʾÀý£º

$(patsubst %.c,%.o,x.c.c bar.c)

°Ñ×Ö´®¡°x.c.cbar.c¡±·ûºÏģʽ[%.c]µÄµ¥´ÊÌæ»»³É[%.o]£¬·µ»Ø½á¹ûÊÇ¡°x.c.o bar.o¡±

±¸×¢£º

ÕâºÍÎÒÃÇÇ°Ãæ¡°±äÁ¿Õ½ڡ±Ëµ¹ýµÄÏà¹ØÖªÊ¶ÓеãÏàËÆ¡£È磺

¡°$(var:<pattern>=<replacement> )¡±

Ï൱ÓÚ

¡°$(patsubst<pattern>,<replacement>,$(var))¡±£¬

¶ø¡°$(var:<suffix>=<replacement> )¡±

ÔòÏ൱ÓÚ

¡°$(patsubst %<suffix>,%<replacement>,$(var))¡±¡£

ÀýÈçÓУºobjects= foo.o bar.o baz.o£¬

ÄÇô£¬¡°$(objects:.o=.c)¡±ºÍ¡°$(patsubst %.o,%.c,$(objects))¡±ÊÇÒ»ÑùµÄ¡£

$(strip <string> )

Ãû³Æ£ºÈ¥¿Õ¸ñº¯Êý¡ª¡ªstrip¡£

¹¦ÄÜ£ºÈ¥µô<string>×Ö´®ÖпªÍ·ºÍ½áβµÄ¿Õ×Ö·û¡£

·µ»Ø£º·µ»Ø±»È¥µô¿Õ¸ñµÄ×Ö·û´®Öµ¡£

ʾÀý£º

$(strip a b c )

°Ñ×Ö´®¡°ab c ¡±È¥µ½¿ªÍ·ºÍ½áβµÄ¿Õ¸ñ£¬½á¹ûÊÇ¡°a b c¡±¡£

$(findstring <find>,<in> )

Ãû³Æ£º²éÕÒ×Ö·û´®º¯Êý¡ª¡ªfindstring¡£

¹¦ÄÜ£ºÔÚ×Ö´®<in>ÖвéÕÒ<find>×Ö´®¡£

·µ»Ø£ºÈç¹ûÕÒµ½£¬ÄÇô·µ»Ø<find>£¬·ñÔò·µ»Ø¿Õ×Ö·û´®¡£

ʾÀý£º

$(findstring a,a b c)

$(findstring a,b c)

µÚÒ»¸öº¯Êý·µ»Ø¡°a¡±×Ö·û´®£¬µÚ¶þ¸ö·µ»Ø¡°¡±×Ö·û´®£¨¿Õ×Ö·û´®£©

$(filter <pattern...>,<text> )

Ãû³Æ£º¹ýÂ˺¯Êý¡ª¡ªfilter¡£

¹¦ÄÜ£ºÒÔ<pattern>ģʽ¹ýÂË<text>×Ö·û´®Öеĵ¥´Ê£¬±£Áô·ûºÏģʽ<pattern>µÄµ¥´Ê¡£¿ÉÒÔÓжà¸öģʽ¡£

·µ»Ø£º·µ»Ø·ûºÏģʽ<pattern>µÄ×Ö´®¡£

ʾÀý£º

sources := foo.c bar.c baz.s ugh.h

foo: $(sources)

cc $(filter %.c %.s,$(sources)) -o foo

$(filter %.c %.s,$(sources))·µ»ØµÄÖµÊÇ¡°foo.cbar.c baz.s¡±¡£

$(filter-out <pattern...>,<text> )

Ãû³Æ£º·´¹ýÂ˺¯Êý¡ª¡ªfilter-out¡£

¹¦ÄÜ£ºÒÔ<pattern>ģʽ¹ýÂË<text>×Ö·û´®Öеĵ¥´Ê£¬È¥³ý·ûºÏģʽ<pattern>µÄµ¥´Ê¡£¿ÉÒÔÓжà¸öģʽ¡£

·µ»Ø£º·µ»Ø²»·ûºÏģʽ<pattern>µÄ×Ö´®¡£

ʾÀý£º

objects=main1.o foo.o main2.o bar.o

mains=main1.o main2.o

$(filter-out $(mains),$(objects)) ·µ»ØÖµÊÇ¡°foo.obar.o¡±¡£

$(sort <list> )

Ãû³Æ£ºÅÅÐòº¯Êý¡ª¡ªsort¡£

¹¦ÄÜ£º¸ø×Ö·û´®<list>Öеĵ¥´ÊÅÅÐò£¨ÉýÐò£©¡£

·µ»Ø£º·µ»ØÅÅÐòºóµÄ×Ö·û´®¡£

ʾÀý£º$(sortfoo bar lose)·µ»Ø¡°bar foo lose¡± ¡£

±¸×¢£ºsortº¯Êý»áÈ¥µô<list>ÖÐÏàͬµÄµ¥´Ê¡£

$(word <n>,<text> )

Ãû³Æ£ºÈ¡µ¥´Êº¯Êý¡ª¡ªword¡£

¹¦ÄÜ£ºÈ¡×Ö·û´®<text>ÖеÚ<n>¸öµ¥´Ê¡££¨´ÓÒ»¿ªÊ¼£©

·µ»Ø£º·µ»Ø×Ö·û´®<text>ÖеÚ<n>¸öµ¥´Ê¡£Èç¹û<n>±È<text>Öеĵ¥´ÊÊýÒª´ó£¬ÄÇô·µ»Ø¿Õ×Ö·û´®¡£

ʾÀý£º$(word2, foo bar baz)·µ»ØÖµÊÇ¡°bar¡±¡£

$(wordlist <s>,<e>,<text> )

Ãû³Æ£ºÈ¡µ¥´Ê´®º¯Êý¡ª¡ªwordlist¡£

¹¦ÄÜ£º´Ó×Ö·û´®<text>ÖÐÈ¡´Ó<s>¿ªÊ¼µ½<e>µÄµ¥´Ê´®¡£<s>ºÍ<e>ÊÇÒ»¸öÊý×Ö¡£

·µ»Ø£º·µ»Ø×Ö·û´®<text>ÖдÓ<s>µ½<e>µÄµ¥´Ê×Ö´®¡£Èç¹û<s>±È<text>Öеĵ¥´ÊÊýÒª´ó£¬ÄÇ

ô·µ»Ø¿Õ×Ö·û´®¡£Èç¹û<e>´óÓÚ<text>µÄµ¥´ÊÊý£¬ÄÇô·µ»Ø´Ó<s>¿ªÊ¼£¬µ½<text>½áÊøµÄµ¥´Ê´®¡£

ʾÀý£º$(wordlist 2, 3, foo bar baz)·µ»ØÖµÊÇ¡°bar baz¡±¡£

$(words <text> )

Ãû³Æ£ºµ¥´Ê¸öÊýͳ¼Æº¯Êý¡ª¡ªwords¡£

¹¦ÄÜ£ºÍ³¼Æ<text>ÖÐ×Ö·û´®Öеĵ¥´Ê¸öÊý¡£

·µ»Ø£º·µ»Ø<text>Öеĵ¥´ÊÊý¡£

ʾÀý£º$(words,foo bar baz)·µ»ØÖµÊÇ¡°3¡±¡£

±¸×¢£ºÈç¹ûÎÒÃÇҪȡ<text>ÖÐ×îºóµÄÒ»¸öµ¥´Ê£¬ÎÒÃÇ¿ÉÒÔÕâÑù£º$(word $(words<text>),<text> )¡£

$(firstword <text> )

Ãû³Æ£ºÊ×µ¥´Êº¯Êý¡ª¡ªfirstword¡£

¹¦ÄÜ£ºÈ¡×Ö·û´®<text>ÖеĵÚÒ»¸öµ¥´Ê¡£

·µ»Ø£º·µ»Ø×Ö·û´®<text>µÄµÚÒ»¸öµ¥´Ê¡£

ʾÀý£º$(firstwordfoo bar)·µ»ØÖµÊÇ¡°foo¡±¡£

±¸×¢£ºÕâ¸öº¯Êý¿ÉÒÔÓÃwordº¯ÊýÀ´ÊµÏÖ£º$(word 1,<text> )¡£

ÒÔÉÏ£¬ÊÇËùÓеÄ×Ö·û´®²Ù×÷º¯Êý£¬Èç¹û´îÅä»ìºÏʹÓ㬿ÉÒÔÍê³É±È½Ï¸´ÔӵŦÄÜ¡£ÕâÀ¾ÙÒ»¸öÏÖʵÖÐÓ¦ÓõÄÀý×Ó¡£ÎÒÃÇÖªµÀ£¬makeʹÓá°VPATH¡±±äÁ¿À´Ö¸¶¨¡°ÒÀÀµÎļþ¡±µÄËÑË÷·¾¶¡£ÓÚÊÇ£¬ÎÒÃÇ¿ÉÒÔÀûÓÃÕâ¸öËÑË÷·¾¶À´Ö¸¶¨±àÒëÆ÷¶ÔÍ·ÎļþµÄËÑË÷·¾¶²ÎÊýCFLAGS£¬È磺

override CFLAGS += $(patsubst %,-I%,$(subst :,,$(VPATH)))

Èç¹ûÎÒÃǵġ°$(VPATH)¡±ÖµÊÇ¡°src:../headers¡±£¬ÄÇô¡°$(patsubst %,-I%,$(subst:

, ,$(VPATH)))¡±½«·µ»Ø¡°-Isrc-I../headers¡±£¬ÕâÕýÊÇcc»ògccËÑË÷Í·Îļþ·¾¶µÄ²ÎÊý

¡£

Èý¡¢ÎļþÃû²Ù×÷º¯Êý

ÏÂÃæÎÒÃÇÒª½éÉܵĺ¯ÊýÖ÷ÒªÊÇ´¦ÀíÎļþÃûµÄ¡£Ã¿¸öº¯ÊýµÄ²ÎÊý×Ö·û´®¶¼»á±»µ±×öÒ»¸ö»òÊÇһϵÁеÄÎļþÃûÀ´¶Ô´ý¡£

$(dir <names...> )

Ãû³Æ£ºÈ¡Ä¿Â¼º¯Êý¡ª¡ªdir¡£

¹¦ÄÜ£º´ÓÎļþÃûÐòÁÐ<names>ÖÐÈ¡³öĿ¼²¿·Ö¡£Ä¿Â¼²¿·ÖÊÇÖ¸×îºóÒ»¸ö·´Ð±¸Ü£¨¡°/¡±£©Ö®Ç°µÄ²¿·Ö¡£Èç¹ûûÓз´Ð±¸Ü£¬ÄÇô·µ»Ø¡°./¡±¡£

·µ»Ø£º·µ»ØÎļþÃûÐòÁÐ<names>µÄĿ¼²¿·Ö¡£

ʾÀý£º$(dir src/foo.c hacks)·µ»ØÖµÊÇ¡°src/ ./¡±¡£

$(notdir <names...> )

Ãû³Æ£ºÈ¡Îļþº¯Êý¡ª¡ªnotdir¡£

¹¦ÄÜ£º´ÓÎļþÃûÐòÁÐ<names>ÖÐÈ¡³ö·ÇĿ¼²¿·Ö¡£·ÇĿ¼²¿·ÖÊÇÖ¸×îºóÒ»¸ö·´Ð±¸Ü£¨¡°/¡±£©Ö®ºóµÄ²¿·Ö¡£

·µ»Ø£º·µ»ØÎļþÃûÐòÁÐ<names>µÄ·ÇĿ¼²¿·Ö¡£

ʾÀý£º$(notdir src/foo.c hacks)·µ»ØÖµÊÇ¡°foo.c hacks¡±¡£

$(suffix <names...> )

Ãû³Æ£ºÈ¡ºó׺º¯Êý¡ª¡ªsuffix¡£

¹¦ÄÜ£º´ÓÎļþÃûÐòÁÐ<names>ÖÐÈ¡³ö¸÷¸öÎļþÃûµÄºó׺¡£

·µ»Ø£º·µ»ØÎļþÃûÐòÁÐ<names>µÄºó׺ÐòÁУ¬Èç¹ûÎļþûÓкó׺£¬Ôò·µ»Ø¿Õ×Ö´®¡£

ʾÀý£º$(suffixsrc/foo.c src-1.0/bar.c hacks)·µ»ØÖµÊÇ¡°.c .c¡±¡£

$(basename <names...> )

Ãû³Æ£ºÈ¡Ç°×ºº¯Êý¡ª¡ªbasename¡£

¹¦ÄÜ£º´ÓÎļþÃûÐòÁÐ<names>ÖÐÈ¡³ö¸÷¸öÎļþÃûµÄǰ׺²¿·Ö¡£

·µ»Ø£º·µ»ØÎļþÃûÐòÁÐ<names>µÄǰ׺ÐòÁУ¬Èç¹ûÎļþûÓÐǰ׺£¬Ôò·µ»Ø¿Õ×Ö´®¡£

ʾÀý£º$(basenamesrc/foo.c src-1.0/bar.c hacks)·µ»ØÖµÊÇ¡°src/foo src-1.0/barhacks¡±¡£

$(addsuffix <suffix>,<names...> )

Ãû³Æ£º¼Óºó׺º¯Êý¡ª¡ªaddsuffix¡£

¹¦ÄÜ£º°Ñºó׺<suffix>¼Óµ½<names>ÖеÄÿ¸öµ¥´ÊºóÃæ¡£

·µ»Ø£º·µ»Ø¼Ó¹ýºó׺µÄÎļþÃûÐòÁС£

ʾÀý£º$(addsuffix.c,foo bar)·µ»ØÖµÊÇ¡°foo.c bar.c¡±¡£

$(addprefix <prefix>,<names...> )

Ãû³Æ£º¼Óǰ׺º¯Êý¡ª¡ªaddprefix¡£

¹¦ÄÜ£º°Ñǰ׺<prefix>¼Óµ½<names>ÖеÄÿ¸öµ¥´ÊºóÃæ¡£

·µ»Ø£º·µ»Ø¼Ó¹ýǰ׺µÄÎļþÃûÐòÁС£

ʾÀý£º$(addprefixsrc/,foo bar)·µ»ØÖµÊÇ¡°src/foo src/bar¡±¡£

$(join <list1>,<list2> )

Ãû³Æ£ºÁ¬½Óº¯Êý¡ª¡ªjoin¡£

¹¦ÄÜ£º°Ñ<list2>Öеĵ¥´Ê¶ÔÓ¦µØ¼Óµ½<list1>µÄµ¥´ÊºóÃæ¡£Èç¹û<list1>µÄµ¥´Ê¸öÊýÒª±È<list2>µÄ¶à£¬ÄÇô£¬<list1>ÖеĶà³öÀ´µÄµ¥´Ê½«±£³ÖÔ­Ñù¡£Èç¹û<list2>µÄµ¥´Ê¸öÊý±È

<list1>¶à£¬ÄÇô£¬<list2>¶à³öÀ´µÄµ¥´Ê½«±»¸´ÖƵ½<list2>ÖС£

·µ»Ø£º·µ»ØÁ¬½Ó¹ýºóµÄ×Ö·û´®¡£

ʾÀý£º$(joinaaa bbb , 111 222 333)·µ»ØÖµÊÇ¡°aaa111 bbb222 333¡±¡£

ËÄ¡¢foreach º¯Êý

foreach º¯ÊýºÍ±ðµÄº¯Êý·Ç³£µÄ²»Ò»Ñù¡£ÒòΪÕâ¸öº¯ÊýÊÇÓÃÀ´×öÑ­»·Óõģ¬MakefileÖеÄ

foreachº¯Êý¼¸ºõÊÇ·ÂÕÕÓÚUnix±ê×¼Shell£¨/bin /sh£©ÖеÄforÓï¾ä£¬»òÊÇC-Shell£¨/bin/csh£©ÖеÄforeachÓï¾ä¶ø¹¹½¨µÄ¡£ËüµÄÓï·¨ÊÇ£º

$(foreach <var>,<list>,<text>)

Õâ¸öº¯ÊýµÄÒâ˼ÊÇ£¬°Ñ²ÎÊý<list>Öеĵ¥´ÊÖðһȡ³ö·Åµ½²ÎÊý<var>ËùÖ¸¶¨µÄ±äÁ¿ÖУ¬È»ºóÔÙÖ´ÐÐ<text>Ëù°üº¬µÄ±í´ïʽ¡£Ã¿Ò»´Î<text>»á·µ»ØÒ»¸ö×Ö·û´®£¬Ñ­»·¹ý³ÌÖУ¬<text>µÄËù·µ»ØµÄÿ¸ö×Ö·û´®»áÒÔ¿Õ¸ñ·Ö¸ô£¬×îºóµ±Õû¸öÑ­»·½áÊøÊ±£¬<text>Ëù·µ»ØµÄÿ¸ö×Ö·û´®Ëù×é³ÉµÄÕû¸ö×Ö·û´®£¨ÒÔ¿Õ¸ñ·Ö¸ô£©½«»áÊÇforeachº¯ÊýµÄ·µ»ØÖµ¡£

ËùÒÔ£¬<var>×îºÃÊÇÒ»¸ö±äÁ¿Ãû£¬<list>¿ÉÒÔÊÇÒ»¸ö±í´ïʽ£¬¶ø<text>ÖÐÒ»°ã»áʹÓÃ<var>

Õâ¸ö²ÎÊýÀ´ÒÀ´Îö¾Ù<list>Öеĵ¥´Ê¡£¾Ù¸öÀý×Ó£º

names := a b c d

files := $(foreach n,$(names),$(n).o)

ÉÏÃæµÄÀý×ÓÖУ¬$(name)Öеĵ¥´Ê»á±»°¤¸öÈ¡³ö£¬²¢´æµ½±äÁ¿¡°n¡±ÖУ¬¡°$(n).o¡±Ã¿´Î¸ù¾Ý¡°$(n)¡±¼ÆËã³öÒ»¸öÖµ£¬ÕâЩֵÒÔ¿Õ¸ñ·Ö¸ô£¬×îºó×÷Ϊforeachº¯ÊýµÄ·µ»Ø£¬ËùÒÔ£¬$(f

iles)µÄÖµÊÇ¡°a.o b.o c.o d.o¡±¡£

×¢Ò⣬foreachÖеÄ<var>²ÎÊýÊÇÒ»¸öÁÙʱµÄ¾Ö²¿±äÁ¿£¬foreachº¯ÊýÖ´ÐÐÍêºó£¬²ÎÊý<var>µÄ±äÁ¿½«²»ÔÚ×÷Óã¬Æä×÷ÓÃÓòÖ»ÔÚforeachº¯Êýµ±ÖС£

Îå¡¢if º¯Êý

ifº¯ÊýºÜÏñGNUµÄmakeËùÖ§³ÖµÄÌõ¼þÓï¾ä¡ª¡ªifeq£¨²Î¼ûÇ°ÃæËùÊöµÄÕ½ڣ©£¬ifº¯ÊýµÄÓï·¨ÊÇ£º

$(if <condition>,<then-part> )

»òÊÇ

$(if<condition>,<then-part>,<else-part> )

¿É¼û£¬ifº¯Êý¿ÉÒÔ°üº¬¡°else¡±²¿·Ö£¬»òÊDz»º¬¡£¼´ifº¯ÊýµÄ²ÎÊý¿ÉÒÔÊÇÁ½¸ö£¬Ò²¿ÉÒÔÊÇÈý¸ö¡£<condition>²ÎÊýÊÇifµÄ±í´ïʽ£¬Èç¹ûÆä·µ»ØµÄΪ·Ç¿Õ×Ö·û´®£¬ÄÇôÕâ¸ö±í´ïʽ¾ÍÏ൱ÓÚ·µ»ØÕ棬ÓÚÊÇ£¬<then-part>»á±»¼ÆË㣬·ñÔò<else-part> »á±»¼ÆËã¡£

¶øifº¯ÊýµÄ·µ»ØÖµÊÇ£¬Èç¹û<condition>ÎªÕæ£¨·Ç¿Õ×Ö·û´®£©£¬ÄǸö<then-part>»áÊÇÕû¸öº¯ÊýµÄ·µ»ØÖµ£¬Èç¹û<condition>Ϊ¼Ù£¨¿Õ×Ö·û´®£©£¬ÄÇô<else-part>»áÊÇÕû¸öº¯ÊýµÄ·µ»ØÖµ£¬´ËʱÈç¹û<else-part>ûÓб»¶¨Ò壬ÄÇô£¬Õû¸öº¯Êý·µ»Ø¿Õ×Ö´®¡£

ËùÒÔ£¬<then-part>ºÍ<else-part>Ö»»áÓÐÒ»¸ö±»¼ÆËã¡£

Áù¡¢callº¯Êý

callº¯ÊýÊÇΨһһ¸ö¿ÉÒÔÓÃÀ´´´½¨ÐµIJÎÊý»¯µÄº¯Êý¡£Äã¿ÉÒÔдһ¸ö·Ç³£¸´Ôӵıí´ïʽ£¬Õâ¸ö±í´ïʽÖУ¬Äã¿ÉÒÔ¶¨ÒåÐí¶à²ÎÊý£¬È»ºóÄã¿ÉÒÔÓÃcallº¯ÊýÀ´ÏòÕâ¸ö±í´ïʽ´«µÝ²ÎÊý¡£ÆäÓï·¨ÊÇ£º

$(call<expression>,<parm1>,<parm2>,<parm3>...)

µ± makeÖ´ÐÐÕâ¸öº¯Êýʱ£¬<expression>²ÎÊýÖеıäÁ¿£¬Èç$(1)£¬$(2)£¬$(3)µÈ£¬»á±»²ÎÊý<parm1>£¬<parm2>£¬<parm3>ÒÀ´ÎÈ¡´ú¡£¶ø<expression>µÄ·µ»ØÖµ¾ÍÊÇ callº¯ÊýµÄ·µ»ØÖµ¡£ÀýÈ磺

reverse = $(1) $(2)

foo = $(call reverse,a,b)

ÄÇô£¬fooµÄÖµ¾ÍÊÇ¡°a b¡±¡£µ±È»£¬²ÎÊýµÄ´ÎÐòÊÇ¿ÉÒÔ×Ô¶¨ÒåµÄ£¬²»Ò»¶¨ÊÇ˳ÐòµÄ£¬È磺

reverse = $(2) $(1)

foo = $(call reverse,a,b)

´ËʱµÄfooµÄÖµ¾ÍÊÇ¡°b a¡±¡£

Æß¡¢originº¯Êý

originº¯Êý²»ÏñÆäËüµÄº¯Êý£¬Ëû²¢²»²Ù×÷±äÁ¿µÄÖµ£¬ËûÖ»ÊǸæËßÄãÄãµÄÕâ¸ö±äÁ¿ÊÇÄÄÀïÀ´µÄ£¿ÆäÓï·¨ÊÇ£º

$(origin <variable> )

×¢Ò⣬<variable>ÊDZäÁ¿µÄÃû×Ö£¬²»Ó¦¸ÃÊÇÒýÓá£ËùÒÔÄã×îºÃ²»ÒªÔÚ<variable>ÖÐʹÓá°$¡±×Ö·û¡£Originº¯Êý»áÒÔÆä·µ»ØÖµÀ´¸æËßÄãÕâ¸ö±äÁ¿µÄ¡°³öÉúÇé¿ö¡±£¬ÏÂÃæ£¬ÊÇoriginº¯ÊýµÄ·µ»ØÖµ:

¡°undefined¡±

Èç¹û<variable>´ÓÀ´Ã»Óж¨Òå¹ý£¬originº¯Êý·µ»ØÕâ¸öÖµ¡°undefined¡±¡£

¡°default¡±

Èç¹û<variable>ÊÇÒ»¸öĬÈϵ͍Ò壬±ÈÈç¡°CC¡±Õâ¸ö±äÁ¿£¬ÕâÖÖ±äÁ¿ÎÒÃǽ«ÔÚºóÃæ½²Êö¡£

¡°environment¡±

Èç¹û<variable>ÊÇÒ»¸ö»·¾³±äÁ¿£¬²¢ÇÒµ±Makefile±»Ö´ÐÐʱ£¬¡°-e¡±²ÎÊýûÓб»´ò¿ª¡£

¡°file¡±

Èç¹û<variable>Õâ¸ö±äÁ¿±»¶¨ÒåÔÚMakefileÖС£

¡°command line¡±

Èç¹û<variable>Õâ¸ö±äÁ¿ÊDZ»ÃüÁîÐж¨ÒåµÄ¡£

¡°override¡±

Èç¹û<variable>ÊDZ»overrideָʾ·ûÖØÐ¶¨ÒåµÄ¡£

¡°automatic¡±

Èç¹û<variable>ÊÇÒ»¸öÃüÁîÔËÐÐÖеÄ×Ô¶¯»¯±äÁ¿¡£¹ØÓÚ×Ô¶¯»¯±äÁ¿½«ÔÚºóÃæ½²Êö¡£

ÕâЩÐÅÏ¢¶ÔÓÚÎÒÃDZàдMakefileÊǷdz£ÓÐÓõģ¬ÀýÈ磬¼ÙÉèÎÒÃÇÓÐÒ»¸öMakefileÆä°üÁËÒ»¸ö¶¨ÒåÎļþMake.def£¬ÔÚMake.defÖж¨ÒåÁËÒ»¸ö±äÁ¿¡°bletch¡±£¬¶øÎÒÃǵĻ·¾³ÖÐÒ²ÓÐÒ»¸ö»·¾³±äÁ¿¡°bletch¡±£¬´Ëʱ£¬ÎÒÃÇÏëÅжÏһϣ¬Èç¹û±äÁ¿À´Ô´ÓÚ»·¾³£¬ÄÇôÎÒÃǾͰÑÖ®ÖØ¶¨ÒåÁË£¬Èç¹ûÀ´Ô´ÓÚMake.def»òÊÇÃüÁîÐеȷǻ·¾³µÄ£¬ÄÇôÎÒÃǾͲ»ÖØÐ¶¨ÒåËü¡£ÓÚÊÇ£¬ÔÚÎÒÃǵÄMakefileÖУ¬ÎÒÃÇ¿ÉÒÔÕâÑùд£º

ifdef bletch

ifeq "$(origin bletch)""environment"

bletch = barf, gag, etc.

endif

endif

µ±È»£¬ÄãÒ²Ðí»á˵£¬Ê¹ÓÃoverride¹Ø¼ü×Ö²»¾Í¿ÉÒÔÖØÐ¶¨Òå»·¾³ÖеıäÁ¿ÁËÂð£¿ÎªÊ²Ã´ÐèҪʹÓÃÕâÑùµÄ²½Ö裿Êǵģ¬ÎÒÃÇÓÃoverrideÊÇ¿ÉÒÔ´ïµ½ÕâÑùµÄЧ¹û£¬¿ÉÊÇoverride¹ýÓÚ´Ö

±©£¬Ëüͬʱ»á°Ñ´ÓÃüÁîÐж¨ÒåµÄ±äÁ¿Ò²¸²¸ÇÁË£¬¶øÎÒÃÇÖ»ÏëÖØÐ¶¨Òå»·¾³´«À´µÄ£¬¶ø²»ÏëÖØÐ¶¨ÒåÃüÁîÐд«À´µÄ¡£

°Ë¡¢shellº¯Êý

shell º¯ÊýÒ²²»ÏñÆäËüµÄº¯Êý¡£¹ËÃû˼Ò壬ËüµÄ²ÎÊýÓ¦¸Ã¾ÍÊDzÙ×÷ϵͳShellµÄÃüÁî¡£ËüºÍ·´ÒýºÅ¡°`¡±ÊÇÏàͬµÄ¹¦ÄÜ¡£Õâ¾ÍÊÇ˵£¬shellº¯Êý°ÑÖ´ÐвÙ×÷ϵͳÃüÁîºóµÄÊä³ö×÷Ϊº¯Êý·µ»Ø¡£ÓÚÊÇ£¬ÎÒÃÇ¿ÉÒÔÓòÙ×÷ϵͳÃüÁîÒÔ¼°×Ö·û´®´¦ÀíÃüÁîawk£¬sedµÈµÈÃüÁîÀ´Éú³ÉÒ»¸ö±äÁ¿£¬È磺

contents := $(shell cat foo)

files := $(shell echo *.c)

×¢Ò⣬Õâ¸öº¯Êý»áÐÂÉú³ÉÒ»¸öShell³ÌÐòÀ´Ö´ÐÐÃüÁËùÒÔÄãҪעÒâÆäÔËÐÐÐÔÄÜ£¬Èç¹ûÄãµÄMakefileÖÐÓÐһЩ±È½Ï¸´ÔӵĹæÔò£¬²¢´óÁ¿Ê¹ÓÃÁËÕâ¸öº¯Êý£¬ÄÇô¶ÔÓÚÄãµÄϵͳÐÔÄÜÊÇÓк¦µÄ¡£ÌرðÊÇMakefileµÄÒþ»ÞµÄ¹æÔò¿ÉÄÜ»áÈÃÄãµÄshellº¯ÊýÖ´ÐеĴÎÊý±ÈÄãÏëÏñµÄ¶àµÃ¶à¡£

¾Å¡¢¿ØÖÆmakeµÄº¯Êý

makeÌṩÁËһЩº¯ÊýÀ´¿ØÖÆmakeµÄÔËÐС£Í¨³££¬ÄãÐèÒª¼ì²âһЩÔËÐÐMakefileʱµÄÔËÐÐʱÐÅÏ¢£¬²¢ÇÒ¸ù¾ÝÕâЩÐÅÏ¢À´¾ö¶¨£¬ÄãÊÇÈÃmake¼ÌÐøÖ´ÐУ¬»¹ÊÇÍ£Ö¹¡£

$(error <text ...> )

²úÉúÒ»¸öÖÂÃüµÄ´íÎó£¬<text ...>ÊÇ´íÎóÐÅÏ¢¡£×¢Ò⣬errorº¯Êý²»»áÔÚÒ»±»Ê¹Óþͻá²úÉú´íÎóÐÅÏ¢£¬ËùÒÔÈç¹ûÄã°ÑÆä¶¨ÒåÔÚij¸ö±äÁ¿ÖУ¬²¢ÔÚºóÐøµÄ½Å±¾ÖÐʹÓÃÕâ¸ö±äÁ¿£¬ÄÇôҲÊÇ¿ÉÒԵġ£ÀýÈ磺

ʾÀýÒ»£º

ifdef ERROR_001

$(error error is $(ERROR_001))

endif

ʾÀý¶þ£º

ERR = $(error found an error!)

.PHONY: err

err: ; $(ERR)

ʾÀýÒ»»áÔÚ±äÁ¿ERROR_001¶¨ÒåÁ˺óÖ´ÐÐʱ²úÉúerrorµ÷Ó㬶øÊ¾Àý¶þÔòÔÚĿ¼err±»Ö´ÐÐʱ²Å·¢Éúerrorµ÷Óá£

$(warning <text ...> )

Õâ¸öº¯ÊýºÜÏñerrorº¯Êý£¬Ö»ÊÇËü²¢²»»áÈÃmakeÍ˳ö£¬Ö»ÊÇÊä³öÒ»¶Î¾¯¸æÐÅÏ¢£¬¶ømake¼ÌÐøÖ´ÐС£

make µÄÔËÐÐ

Ò»°ãÀ´Ëµ£¬×î¼òµ¥µÄ¾ÍÊÇÖ±½ÓÔÚÃüÁîÐÐÏÂÊäÈëmakeÃüÁmakeÃüÁî»áÕÒµ±Ç°Ä¿Â¼µÄmakefileÀ´Ö´ÐУ¬Ò»Çж¼ÊÇ×Ô¶¯µÄ¡£µ«Ò²ÓÐʱÄãÒ²ÐíÖ»ÏëÈà makeÖØ±àÒëijЩÎļþ£¬¶ø²»ÊÇÕû¸ö¹¤³Ì£¬¶øÓÖÓеÄʱºòÄãÓм¸Ì×±àÒë¹æÔò£¬ÄãÏëÔÚ²»Í¬µÄʱºòʹÓò»Í¬µÄ±àÒë¹æÔò£¬µÈµÈ¡£±¾Õ½ھÍÊǽ²ÊöÈçºÎʹÓÃmakeÃüÁîµÄ¡£

Ò»¡¢makeµÄÍ˳öÂë

makeÃüÁîÖ´ÐкóÓÐÈý¸öÍ˳öÂ룺

0 ¡ª¡ª ±íʾ³É¹¦Ö´ÐС£

1 ¡ª¡ª Èç¹ûmakeÔËÐÐʱ³öÏÖÈκδíÎ󣬯䷵»Ø1¡£

2 ¡ª¡ª Èç¹ûÄãʹÓÃÁËmakeµÄ¡°-q¡±Ñ¡Ï²¢ÇÒmakeʹµÃһЩĿ±ê²»ÐèÒª¸üУ¬ÄÇô·µ»Ø2¡£

MakeµÄÏà¹Ø²ÎÊýÎÒÃÇ»áÔÚºóÐøÕ½ÚÖн²Êö¡£

¶þ¡¢Ö¸¶¨Makefile

Ç°ÃæÎÒÃÇ˵¹ý£¬GNU makeÕÒѰĬÈϵÄMakefileµÄ¹æÔòÊÇÔÚµ±Ç°Ä¿Â¼ÏÂÒÀ´ÎÕÒÈý¸öÎļþ¡ª¡ª¡°GNUmakefile¡±¡¢¡°makefile¡±ºÍ¡°Makefile¡±¡£Æä°´Ë³ÐòÕÒÕâÈý¸öÎļþ£¬Ò»µ©ÕÒµ½£¬¾Í¿ªÊ¼¶ÁÈ¡Õâ¸öÎļþ²¢Ö´ÐС£µ±Ç°£¬ÎÒÃÇÒ²¿ÉÒÔ¸ømakeÃüÁîÖ¸¶¨Ò»¸öÌØÊâÃû×ÖµÄMakefile¡£Òª´ïµ½Õâ¸ö¹¦ÄÜ£¬ÎÒÃÇҪʹÓÃmakeµÄ¡°-f¡±»òÊÇ¡°--file¡±²ÎÊý£¨¡°-- makefile¡±²ÎÊýÒ²ÐУ©¡£ÀýÈ磬ÎÒÃÇÓиömakefileµÄÃû×ÖÊÇ¡°hchen.mk¡±£¬ÄÇô£¬ÎÒÃÇ¿ÉÒÔÕâÑùÀ´ÈÃmakeÀ´Ö´ÐÐÕâ¸öÎļþ£º

make ¨Cf hchen.mk

Èç¹ûÔÚmakeµÄÃüÁîÐÐÊÇ£¬Äã²»Ö»Ò»´ÎµØÊ¹ÓÃÁË¡°-f¡±²ÎÊý£¬ÄÇô£¬ËùÓÐÖ¸¶¨µÄmakefile½«»á±»Á¬ÔÚÒ»Æð´«µÝ¸ømakeÖ´ÐС£

Èý¡¢Ö¸¶¨Ä¿±ê

Ò»°ãÀ´Ëµ£¬makeµÄ×îÖÕÄ¿±êÊÇmakefileÖеĵÚÒ»¸öÄ¿±ê£¬¶øÆäËüÄ¿±êÒ»°ãÊÇÓÉÕâ¸öÄ¿±êÁ¬´ø³öÀ´µÄ¡£ÕâÊÇmakeµÄĬÈÏÐÐΪ¡£µ±È»£¬Ò»°ãÀ´Ëµ£¬ÄãµÄ makefileÖеĵÚÒ»¸öÄ¿±êÊÇÓÉÐí¶à¸öÄ¿±ê×é³É£¬Äã¿ÉÒÔָʾmake£¬ÈÃÆäÍê³ÉÄãËùÖ¸¶¨µÄÄ¿±ê¡£Òª´ïµ½ÕâһĿµÄºÜ¼òµ¥£¬ÐèÔÚmakeÃüÁîºóÖ±½Ó¸úÄ¿±êµÄÃû×־ͿÉÒÔÍê³É£¨ÈçÇ°ÃæÌáµ½µÄ¡°make clean¡±ÐÎʽ£©ÈκÎÔÚmakefileÖеÄÄ¿±ê¶¼¿ÉÒÔ±»Ö¸¶¨³ÉÖÕ¼«Ä¿±ê£¬µ«ÊdzýÁËÒÔ¡°- ¡±´òÍ·£¬»òÊǰüº¬ÁË¡°=¡±µÄÄ¿±ê£¬ÒòΪÓÐÕâЩ×Ö·ûµÄÄ¿±ê£¬»á±»½âÎö³ÉÃüÁîÐвÎÊý»òÊDZäÁ¿¡£ÉõÖÁûÓб»ÎÒÃÇÃ÷ȷд³öÀ´µÄÄ¿±êÒ²¿ÉÒÔ³ÉΪmakeµÄÖÕ¼«Ä¿±ê£¬Ò²¾ÍÊÇ˵£¬Ö»Òªmake¿ÉÒÔÕÒµ½ÆäÒþº¬¹æÔòÍÆµ¼¹æÔò£¬ÄÇôÕâ¸öÒþº¬Ä¿±êͬÑù¿ÉÒÔ±»Ö¸¶¨³ÉÖÕ¼«Ä¿±ê¡£ÓÐÒ»¸ömakeµÄ»·¾³±äÁ¿½Ð¡°MAKECMDGOALS¡±£¬Õâ¸ö±äÁ¿ÖÐ»á´æ·ÅÄãËùÖ¸¶¨µÄÖÕ¼«Ä¿±êµÄÁÐ±í£¬Èç¹ûÔÚÃüÁîÐÐÉÏ£¬ÄãûÓÐÖ¸¶¨Ä¿±ê£¬ÄÇô£¬Õâ¸ö±äÁ¿ÊÇ¿ÕÖµ¡£Õâ¸ö±äÁ¿¿ÉÒÔÈÃÄãʹÓÃÔÚһЩ±È½ÏÌØÊâµÄÇéÐÎÏ¡£±ÈÈçÏÂÃæµÄÀý×Ó£º

sources = foo.c bar.c

ifneq ( $(MAKECMDGOALS),clean)

include $(sources:.c=.d)

endif

»ùÓÚÉÏÃæµÄÕâ¸öÀý×Ó£¬Ö»ÒªÎÒÃÇÊäÈëµÄÃüÁî²»ÊÇ¡°make clean¡±£¬ÄÇômakefile»á×Ô¶¯°üº¬¡°foo.d¡±ºÍ¡°bar.d¡±ÕâÁ½¸ömakefile¡£

ʹÓÃÖ¸¶¨ÖÕ¼«Ä¿±êµÄ·½·¨¿ÉÒԺܷ½±ãµØÈÃÎÒÃDZàÒëÎÒÃǵijÌÐò£¬ÀýÈçÏÂÃæÕâ¸öÀý×Ó£º

.PHONY: all

all:prog1 prog2 prog3 prog4

´ÓÕâ¸öÀý×ÓÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½£¬Õâ¸ömakefileÖÐÓÐËĸöÐèÒª±àÒëµÄ³ÌÐò¡ª¡ª¡°prog1¡±£¬ ¡°prog2¡±£¬ ¡°prog3¡±ºÍ ¡°prog4¡±£¬ÎÒÃÇ¿ÉÒÔʹÓá°make all¡±ÃüÁîÀ´±àÒëËùÓеÄÄ¿±ê£¨Èç¹û°ÑallÖóɵÚÒ»¸öÄ¿±ê£¬ÄÇôֻÐèÖ´ÐС°make¡±£©£¬ÎÒÃÇÒ²¿ÉÒÔʹÓá°make prog2¡±À´µ¥¶À±àÒëÄ¿±ê¡°prog2¡±¡£

¼´È»make¿ÉÒÔÖ¸¶¨ËùÓÐmakefileÖеÄÄ¿±ê£¬ÄÇôҲ°üÀ¨¡°Î±Ä¿±ê¡±£¬ÓÚÊÇÎÒÃÇ¿ÉÒÔ¸ù¾ÝÕâÖÖÐÔÖÊÀ´ÈÃÎÒÃǵÄmakefile¸ù¾ÝÖ¸¶¨µÄ²»Í¬µÄÄ¿±êÀ´Íê³É²»Í¬µÄÊ¡£ÔÚUnixÊÀ½çÖУ¬Èí¼þ·¢²¼Ê±£¬ÌرðÊÇGNUÕâÖÖ¿ªÔ´Èí¼þµÄ·¢²¼Ê±£¬Æä makefile¶¼°üº¬Á˱àÒë¡¢°²×°¡¢´ò°üµÈ¹¦ÄÜ¡£ÎÒÃÇ¿ÉÒÔ²ÎÕÕÕâÖÖ¹æÔòÀ´ÊéдÎÒÃǵÄmakefileÖеÄÄ¿±ê¡£

¡°all¡± Õâ¸öαĿ±êÊÇËùÓÐÄ¿±êµÄÄ¿±ê£¬Æä¹¦ÄÜÒ»°ãÊDZàÒëËùÓеÄÄ¿±ê¡£

¡°clean¡± Õâ¸öαĿ±ê¹¦ÄÜÊÇɾ³ýËùÓб»make´´½¨µÄÎļþ¡£

¡°install¡± Õâ¸öαĿ±ê¹¦ÄÜÊǰ²×°ÒѱàÒëºÃµÄ³ÌÐò£¬Æäʵ¾ÍÊǰÑÄ¿±êÖ´ÐÐÎļþ¿½±´µ½Ö¸¶¨µÄÄ¿±êÖÐÈ¥¡£

¡°print¡± Õâ¸öαĿ±êµÄ¹¦ÄÜÊÇÀý³ö¸Ä±ä¹ýµÄÔ´Îļþ¡£

¡°tar¡± Õâ¸öαĿ±ê¹¦ÄÜÊǰÑÔ´³ÌÐò´ò°ü±¸·Ý¡£Ò²¾ÍÊÇÒ»¸ötarÎļþ¡£

¡°dist¡± Õâ¸öαĿ±ê¹¦ÄÜÊÇ´´½¨Ò»¸öѹËõÎļþ£¬Ò»°ãÊǰÑtarÎļþѹ³ÉZÎļþ¡£»òÊÇgzÎļþ¡£

¡°TAGS¡± Õâ¸öαĿ±ê¹¦ÄÜÊǸüÐÂËùÓеÄÄ¿±ê£¬ÒÔ±¸ÍêÕûµØÖرàÒëʹÓá£

¡°check¡±ºÍ¡°test¡± ÕâÁ½¸öαĿ±êÒ»°ãÓÃÀ´²âÊÔmakefileµÄÁ÷³Ì¡£

µ±È»Ò»¸öÏîÄ¿µÄmakefileÖÐÒ²²»Ò»¶¨ÒªÊéдÕâÑùµÄÄ¿±ê£¬ÕâЩ¶«Î÷¶¼ÊÇGNUµÄ¶«Î÷£¬µ«ÊÇÎÒÏ룬GNU¸ã³öÕâЩ¶«Î÷Ò»¶¨ÓÐÆä¿Éȡ֮´¦£¨µÈÄãµÄUNIXϵijÌÐòÎļþÒ»¶àʱÄã¾Í»á·¢ÏÖÕâЩ¹¦ÄܺÜÓÐÓÃÁË£©£¬ÕâÀïÖ»²»¹ýÊÇ˵Ã÷ÁË£¬Èç¹ûÄãÒªÊéдÕâÖÖ¹¦ÄÜ£¬×îºÃʹÓÃÕâÖÖÃû×ÖÃüÃûÄãµÄÄ¿±ê£¬ÕâÑù¹æ·¶Ò»Ð©£¬¹æ·¶µÄºÃ´¦¾ÍÊÇ¡ª¡ª²»ÓýâÊÍ£¬´ó¼Ò¶¼Ã÷°×¡£¶øÇÒÈç¹ûÄãµÄmakefileÖÐÓÐÕâЩ¹¦ÄÜ£¬Ò»ÊǺÜʵÓ㬶þÊÇ¿ÉÒÔÏÔµÃÄãµÄmakefileºÜרҵ£¨²»ÊÇÄÇÖÖ³õѧÕßµÄ×÷Æ·£©¡£

ËÄ¡¢¼ì²é¹æÔò

ÓÐʱºò£¬ÎÒÃDz»ÏëÈÃÎÒÃǵÄmakefileÖеĹæÔòÖ´ÐÐÆðÀ´£¬ÎÒÃÇÖ»Ïë¼ì²éÒ»ÏÂÎÒÃǵÄÃüÁ»òÊÇÖ´ÐеÄÐòÁС£ÓÚÊÇÎÒÃÇ¿ÉÒÔʹÓÃmakeÃüÁîµÄÏÂÊö²ÎÊý£º

¡°-n¡±

¡°--just-print¡±

¡°--dry-run¡±

¡°--recon¡±

²»Ö´ÐвÎÊý£¬ÕâЩ²ÎÊýÖ»ÊÇ´òÓ¡ÃüÁ²»¹ÜÄ¿±êÊÇ·ñ¸üУ¬°Ñ¹æÔòºÍÁ¬´ø¹æÔòϵÄÃüÁî´òÓ¡³öÀ´£¬µ«²»Ö´ÐУ¬ÕâЩ²ÎÊý¶ÔÓÚÎÒÃǵ÷ÊÔmakefileºÜÓÐÓô¦¡£

¡°-t¡±

¡°--touch¡±

Õâ¸ö²ÎÊýµÄÒâ˼¾ÍÊǰÑÄ¿±êÎļþµÄʱ¼ä¸üУ¬µ«²»¸ü¸ÄÄ¿±êÎļþ¡£Ò²¾ÍÊÇ˵£¬make¼Ù×°±àÒëÄ¿±ê£¬µ«²»ÊÇÕæÕýµÄ±àÒëÄ¿±ê£¬Ö»ÊǰÑÄ¿±ê±ä³ÉÒѱàÒë¹ýµÄ״̬¡£

¡°-q¡±

¡°--question¡±

Õâ¸ö²ÎÊýµÄÐÐΪÊÇÕÒÄ¿±êµÄÒâ˼£¬Ò²¾ÍÊÇ˵£¬Èç¹ûÄ¿±ê´æÔÚ£¬ÄÇôÆäʲôҲ²»»áÊä³ö£¬µ±È»Ò²²»»áÖ´ÐбàÒ룬Èç¹ûÄ¿±ê²»´æÔÚ£¬Æä»á´òÓ¡³öÒ»Ìõ³ö´íÐÅÏ¢¡£

¡°-W <file>¡±

¡°--what-if=<file>¡±

¡°--assume-new=<file>¡±

¡°--new-file=<file>¡±

Õâ¸ö²ÎÊýÐèÒªÖ¸¶¨Ò»¸öÎļþ¡£Ò»°ãÊÇÊÇÔ´Îļþ£¨»òÒÀÀµÎļþ£©£¬Make»á¸ù¾Ý¹æÔòÍÆµ¼À´ÔËÐÐÒÀÀµÓÚÕâ¸öÎļþµÄÃüÁһ°ãÀ´Ëµ£¬¿ÉÒԺ͡°-n¡±²ÎÊýһͬʹÓã¬À´²é¿´Õâ¸öÒÀÀµÎļþËù·¢ÉúµÄ¹æÔòÃüÁîÁíÍâÒ»¸öºÜÓÐÒâ˼µÄÓ÷¨ÊǽáºÏ¡°-p¡±ºÍ¡°-v¡±À´Êä³ömakefile±»Ö´ÐÐʱµÄÐÅÏ¢£¨Õâ¸ö½«ÔÚºóÃæ½²Êö£©¡£

Îå¡¢makeµÄ²ÎÊý

ÏÂÃæÁоÙÁËËùÓÐGNU make 3.80°æµÄ²ÎÊý¶¨Òå¡£ÆäËü°æ±¾ºÍ²úÉ̵Ämake´óͬСÒ죬²»¹ýÆäËü²úÉ̵ÄmakeµÄ¾ßÌå²ÎÊý»¹ÊÇÇë²Î¿¼¸÷×ԵIJúÆ·Îĵµ¡£

¡°-b¡±

¡°-m¡±

ÕâÁ½¸ö²ÎÊýµÄ×÷ÓÃÊǺöÂÔºÍÆäËü°æ±¾makeµÄ¼æÈÝÐÔ¡£

¡°-B¡±

¡°--always-make¡±

ÈÏΪËùÓеÄÄ¿±ê¶¼ÐèÒª¸üУ¨ÖرàÒ룩¡£

¡°-C <dir>¡±

¡°--directory=<dir>¡±

Ö¸¶¨¶ÁÈ¡makefileµÄĿ¼¡£Èç¹ûÓжà¸ö¡°-C¡±²ÎÊý£¬makeµÄ½âÊÍÊǺóÃæµÄ·¾¶ÒÔÇ°ÃæµÄ×÷ΪÏà¶Ô·¾¶£¬²¢ÒÔ×îºóµÄĿ¼×÷Ϊ±»Ö¸¶¨Ä¿Â¼¡£È磺¡°make ¨CC ~hchen/test ¨CC prog¡±

µÈ¼ÛÓÚ¡°make¨CC ~hchen/test/prog¡±¡£

¡°¡ªdebug[=<options>]¡±

Êä³ömakeµÄµ÷ÊÔÐÅÏ¢¡£ËüÓм¸ÖÖ²»Í¬µÄ¼¶±ð¿É¹©Ñ¡Ôñ£¬Èç¹ûûÓвÎÊý£¬ÄǾÍÊÇÊä³ö×î¼òµ¥µÄµ÷ÊÔÐÅÏ¢¡£ÏÂÃæÊÇ<options>µÄȡֵ£º

a ¡ª¡ª Ò²¾ÍÊÇall£¬Êä³öËùÓеĵ÷ÊÔÐÅÏ¢¡££¨»á·Ç³£µÄ¶à£©

b ¡ª¡ª Ò²¾ÍÊÇbasic£¬Ö»Êä³ö¼òµ¥µÄµ÷ÊÔÐÅÏ¢¡£¼´Êä³ö²»ÐèÒªÖØ±àÒëµÄÄ¿±ê¡£

v ¡ª¡ª Ò²¾ÍÊÇverbose£¬ÔÚbÑ¡ÏîµÄ¼¶±ðÖ®ÉÏ¡£Êä³öµÄÐÅÏ¢°üÀ¨Äĸömakefile±»½âÎö£¬²»ÐèÒª±»ÖرàÒëµÄÒÀÀµÎļþ£¨»òÊÇÒÀÀµÄ¿±ê£©µÈ¡£

i ¡ª¡ª Ò²¾ÍÊÇimplicit£¬Êä³öËùÒÔµÄÒþº¬¹æÔò¡£

j ¡ª¡ª Ò²¾ÍÊÇjobs£¬Êä³öÖ´ÐйæÔòÖÐÃüÁîµÄÏêϸÐÅÏ¢£¬ÈçÃüÁîµÄPID¡¢·µ»ØÂëµÈ¡£

m ¡ª¡ª Ò²¾ÍÊÇmakefile£¬Êä³ömake¶ÁÈ¡makefile£¬¸üÐÂmakefile£¬Ö´ÐÐmakefileµÄÐÅÏ¢¡£

¡°-d¡±

Ï൱ÓÚ¡°--debug=a¡±¡£

¡°-e¡±

¡°--environment-overrides¡±

Ö¸Ã÷»·¾³±äÁ¿µÄÖµ¸²¸ÇmakefileÖж¨ÒåµÄ±äÁ¿µÄÖµ¡£

¡°-f=<file>¡±

¡°--file=<file>¡±

¡°--makefile=<file>¡±

Ö¸¶¨ÐèÒªÖ´ÐеÄmakefile¡£

¡°-h¡±

¡°--help¡±

ÏÔʾ°ïÖúÐÅÏ¢¡£

¡°-i¡±

¡°--ignore-errors¡±

ÔÚÖ´ÐÐʱºöÂÔËùÓеĴíÎó¡£

¡°-I <dir>¡±

¡°--include-dir=<dir>¡±

Ö¸¶¨Ò»¸ö±»°üº¬makefileµÄËÑË÷Ä¿±ê¡£¿ÉÒÔʹÓöà¸ö¡°-I¡±²ÎÊýÀ´Ö¸¶¨¶à¸öĿ¼¡£

¡°-j [<jobsnum>]¡±

¡°--jobs[=<jobsnum>]¡±

ָͬʱÔËÐÐÃüÁîµÄ¸öÊý¡£Èç¹ûûÓÐÕâ¸ö²ÎÊý£¬makeÔËÐÐÃüÁîʱÄÜÔËÐжàÉÙ¾ÍÔËÐжàÉÙ¡£Èç¹ûÓÐÒ»¸öÒÔÉϵġ°-j¡±²ÎÊý£¬ÄÇô½ö×îºóÒ»¸ö¡°-j¡±²ÅÊÇÓÐЧµÄ¡££¨×¢ÒâÕâ¸ö²ÎÊýÔÚMS-D

OSÖÐÊÇÎÞÓõģ©

¡°-k¡±

¡°--keep-going¡±

³ö´íÒ²²»Í£Ö¹ÔËÐС£Èç¹ûÉú³ÉÒ»¸öÄ¿±êʧ°ÜÁË£¬ÄÇôÒÀÀµÓÚÆäÉϵÄÄ¿±ê¾Í²»»á±»Ö´ÐÐÁË¡£

¡°-l <load>¡±

¡°--load-average[=<load]¡±

¡°¡ªmax-load[=<load>]¡±

Ö¸¶¨makeÔËÐÐÃüÁîµÄ¸ºÔØ¡£

¡°-n¡±

¡°--just-print¡±

¡°--dry-run¡±

¡°--recon¡±

½öÊä³öÖ´Ðйý³ÌÖеÄÃüÁîÐòÁУ¬µ«²¢²»Ö´ÐС£

¡°-o <file>¡±

¡°--old-file=<file>¡±

¡°--assume-old=<file>¡±

²»ÖØÐÂÉú³ÉµÄÖ¸¶¨µÄ<file>£¬¼´Ê¹Õâ¸öÄ¿±êµÄÒÀÀµÎļþÐÂÓÚËü¡£

¡°-p¡±

¡°--print-data-base¡±

Êä³ömakefileÖеÄËùÓÐÊý¾Ý£¬°üÀ¨ËùÓеĹæÔòºÍ±äÁ¿¡£Õâ¸ö²ÎÊý»áÈÃÒ»¸ö¼òµ¥µÄmakefile¶¼»áÊä³öÒ»¶ÑÐÅÏ¢¡£Èç¹ûÄãÖ»ÊÇÏëÊä³öÐÅÏ¢¶ø²»ÏëÖ´ÐÐ makefile£¬Äã¿ÉÒÔʹÓá°make -q

p¡±ÃüÁî¡£Èç¹ûÄãÏë²é¿´Ö´ÐÐmakefileǰµÄÔ¤Éè±äÁ¿ºÍ¹æÔò£¬Äã¿ÉÒÔʹÓá°make ¨Cp ¨Cf /dev/null¡±¡£Õâ¸ö²ÎÊýÊä³öµÄÐÅÏ¢»á°üº¬×ÅÄãµÄmakefileÎļþµÄÎļþÃûºÍÐкţ¬ËùÒÔ£¬ÓÃ

Õâ¸ö²ÎÊýÀ´µ÷ÊÔÄãµÄmakefile»áÊǺÜÓÐÓõģ¬ÌرðÊǵ±ÄãµÄ»·¾³±äÁ¿ºÜ¸´ÔÓµÄʱºò¡£

¡°-q¡±

¡°--question¡±

²»ÔËÐÐÃüÁҲ²»Êä³ö¡£½ö½öÊǼì²éËùÖ¸¶¨µÄÄ¿±êÊÇ·ñÐèÒª¸üС£Èç¹ûÊÇ0Ôò˵Ã÷Òª¸üУ¬Èç¹ûÊÇ2Ôò˵Ã÷ÓдíÎó·¢Éú¡£

¡°-r¡±

¡°--no-builtin-rules¡±

½ûÖ¹makeʹÓÃÈκÎÒþº¬¹æÔò¡£

¡°-R¡±

¡°--no-builtin-variabes¡±

½ûÖ¹makeʹÓÃÈκÎ×÷ÓÃÓÚ±äÁ¿ÉϵÄÒþº¬¹æÔò¡£

¡°-s¡±

¡°--silent¡±

¡°--quiet¡±

ÔÚÃüÁîÔËÐÐʱ²»Êä³öÃüÁîµÄÊä³ö¡£

¡°-S¡±

¡°--no-keep-going¡±

¡°--stop¡±

È¡Ïû¡°-k¡±Ñ¡ÏîµÄ×÷Óá£ÒòΪÓÐЩʱºò£¬makeµÄÑ¡ÏîÊÇ´Ó»·¾³±äÁ¿¡°MAKEFLAGS¡±Öм̳ÐÏÂÀ´µÄ¡£ËùÒÔÄã¿ÉÒÔÔÚÃüÁîÐÐÖÐʹÓÃÕâ¸ö²ÎÊýÀ´Èû·¾³±äÁ¿Öеġ°-k¡±Ñ¡ÏîʧЧ¡£

¡°-t¡±

¡°--touch¡±

Ï൱ÓÚUNIXµÄtouchÃüÁֻÊǰÑÄ¿±êµÄÐÞ¸ÄÈÕÆÚ±ä³É×îеģ¬Ò²¾ÍÊÇ×èÖ¹Éú³ÉÄ¿±êµÄÃüÁîÔËÐС£

¡°-v¡±

¡°--version¡±

Êä³ömake³ÌÐòµÄ°æ±¾¡¢°æÈ¨µÈ¹ØÓÚmakeµÄÐÅÏ¢¡£

¡°-w¡±

¡°--print-directory¡±

Êä³öÔËÐÐmakefile֮ǰºÍÖ®ºóµÄÐÅÏ¢¡£Õâ¸ö²ÎÊý¶ÔÓÚ¸ú×ÙǶÌ×ʽµ÷ÓÃmakeʱºÜÓÐÓá£

¡°--no-print-directory¡±

½ûÖ¹¡°-w¡±Ñ¡Ïî¡£

¡°-W <file>¡±

¡°--what-if=<file>¡±

¡°--new-file=<file>¡±

¡°--assume-file=<file>¡±

¼Ù¶¨Ä¿±ê<file>ÐèÒª¸üУ¬Èç¹ûºÍ¡°-n¡±Ñ¡ÏîʹÓã¬ÄÇôÕâ¸ö²ÎÊý»áÊä³ö¸ÃÄ¿±ê¸üÐÂʱµÄÔËÐж¯×÷¡£Èç¹ûûÓС°-n¡±ÄÇô¾ÍÏñÔËÐÐUNIXµÄ¡°touch¡±ÃüÁîÒ»Ñù£¬Ê¹µÃ<file>µÄÐÞ¸Äʱ¼äΪµ±Ç°Ê±¼ä¡£

¡°--warn-undefined-variables¡±

Ö»Òªmake·¢ÏÖÓÐ䶨ÒåµÄ±äÁ¿£¬ÄÇô¾ÍÊä³ö¾¯¸æÐÅÏ¢¡£

Òþº¬¹æÔò

ÔÚÎÒÃÇʹÓÃMakefileʱ£¬ÓÐһЩÎÒÃǻᾭ³£Ê¹Ó㬶øÇÒʹÓÃÆµÂʷdz£¸ßµÄ¶«Î÷£¬±ÈÈ磬ÎÒÃDZàÒëC/C++µÄÔ´³ÌÐòΪÖмäÄ¿±êÎļþ£¨UnixÏÂÊÇ[.o] Îļþ£¬WindowsÏÂÊÇ[.obj]Îļþ£©¡£±¾Õ½²ÊöµÄ¾ÍÊÇһЩÔÚMakefileÖеġ°Òþº¬µÄ¡±£¬ÔçÏÈÔ¼¶¨Á˵쬲»ÐèÒªÎÒÃÇÔÙд³öÀ´µÄ¹æÔò¡£¡°Òþº¬¹æÔò¡±Ò²¾ÍÊÇÒ»ÖÖ¹ßÀý£¬make»á°´ÕÕÕâÖÖ¡°¹ßÀý¡±ÐÄÕÕ²»ÐúµØÀ´ÔËÐУ¬ÄÇÅÂÎÒÃǵÄMakefileÖÐûÓÐÊéдÕâÑùµÄ¹æÔò¡£ÀýÈ磬°Ñ[.c]Îļþ±àÒë³É[.o]ÎļþÕâÒ»¹æÔò£¬Äã¸ù±¾¾Í²»ÓÃд³öÀ´£¬make»á×Ô¶¯ÍƵ¼³öÕâÖÖ¹æÔò£¬²¢Éú³ÉÎÒÃÇÐèÒªµÄ[.o]Îļþ¡£¡°Òþº¬¹æÔò¡±»áʹÓÃһЩÎÒÃÇϵͳ±äÁ¿£¬ÎÒÃÇ¿ÉÒԸıäÕâЩϵͳ±äÁ¿µÄÖµÀ´¶¨ÖÆÒþº¬¹æÔòµÄÔËÐÐʱµÄ²ÎÊý¡£Èçϵͳ±äÁ¿¡°CFLAGS¡±¿ÉÒÔ¿ØÖƱàÒëʱµÄ±àÒëÆ÷²ÎÊý¡£

ÎÒÃÇ»¹¿ÉÒÔͨ¹ý¡°Ä£Ê½¹æÔò¡±µÄ·½Ê½Ð´ÏÂ×Ô¼ºµÄÒþº¬¹æÔò¡£Óá°ºó׺¹æÔò¡±À´¶¨ÒåÒþº¬¹æÔò»áÓÐÐí¶àµÄÏÞÖÆ¡£Ê¹Óá°Ä£Ê½¹æÔò¡±»á¸ü»ØµÃÖÇÄܺÍÇå³þ£¬µ«¡°ºó׺¹æÔò¡±¿ÉÒÔÓÃÀ´±£Ö¤ÎÒÃÇMakefileµÄ¼æÈÝÐÔ¡£ÎÒÃÇÁ˽âÁË¡°Òþº¬¹æÔò¡±£¬¿ÉÒÔÈÃÆäΪÎÒÃǸüºÃµÄ·þÎñ£¬Ò²»áÈÃÎÒÃÇÖªµÀһЩ¡°Ô¼¶¨Ë׳ɡ±Á˵Ķ«Î÷£¬¶ø²»ÖÁÓÚʹµÃÎÒÃÇÔÚÔËÐÐMakefileʱ³öÏÖһЩÎÒÃǾõµÃĪÃûÆäÃîµÄ¶«Î÷¡£µ±È»£¬ÈκÎÊÂÎï¶¼ÊÇì¶ÜµÄ£¬Ë®ÄÜÔØÖÛ£¬Òà¿É¸²ÖÛ£¬ËùÒÔ£¬ÓÐʱºò¡°Òþº¬¹æÔò¡±Ò²»á¸øÎÒÃÇÔì³É²»Ð¡µÄÂé·³¡£Ö»ÓÐÁ˽âÁËËü£¬ÎÒÃDzÅÄܸüºÃµØÊ¹ÓÃËü¡£

Ò»¡¢Ê¹ÓÃÒþº¬¹æÔò

Èç¹ûҪʹÓÃÒþº¬¹æÔòÉú³ÉÄãÐèÒªµÄÄ¿±ê£¬ÄãËùÐèÒª×öµÄ¾ÍÊDz»ÒªÐ´³öÕâ¸öÄ¿±êµÄ¹æÔò¡£ÄÇô£¬make»áÊÔͼȥ×Ô¶¯ÍƵ¼²úÉúÕâ¸öÄ¿±êµÄ¹æÔòºÍÃüÁÈç¹ûmake¿ÉÒÔ×Ô¶¯ÍƵ¼Éú³ÉÕâ¸öÄ¿±êµÄ¹æÔòºÍÃüÁÄÇôÕâ¸öÐÐΪ¾ÍÊÇÒþº¬¹æÔòµÄ×Ô¶¯ÍƵ¼¡£µ±È»£¬Òþº¬¹æÔòÊÇmakeÊÂÏÈÔ¼¶¨ºÃµÄһЩ¶«Î÷¡£ÀýÈ磬ÎÒÃÇÓÐÏÂÃæµÄÒ»¸öMakefile£º

foo : foo.o bar.o

cc ¨Co foo foo.o bar.o $(CFLAGS) $(LDFLAGS)

ÎÒÃÇ¿ÉÒÔ×¢Òâµ½£¬Õâ¸öMakefileÖв¢Ã»ÓÐдÏÂÈçºÎÉú³Éfoo.oºÍbar.oÕâÁ½Ä¿±êµÄ¹æÔòºÍÃüÁî¡£ÒòΪmakeµÄ¡°Òþº¬¹æÔò¡±¹¦ÄÜ»á×Ô¶¯ÎªÎÒÃÇ×Ô¶¯È¥ÍƵ¼ÕâÁ½¸öÄ¿±êµÄÒÀÀµÄ¿±êºÍÉú³ÉÃüÁî¡£

make »áÔÚ×Ô¼ºµÄ¡°Òþº¬¹æÔò¡±¿âÖÐѰÕÒ¿ÉÒÔÓõĹæÔò£¬Èç¹ûÕÒµ½£¬ÄÇô¾Í»áʹÓá£Èç¹ûÕÒ²»µ½£¬ÄÇô¾Í»á±¨´í¡£ÔÚÉÏÃæµÄÄǸöÀý×ÓÖУ¬makeµ÷ÓõÄÒþº¬¹æÔòÊÇ£¬°Ñ [.o]µÄÄ¿±êµÄÒÀÀµÎļþÖóÉ[.c]£¬²¢Ê¹ÓÃCµÄ±àÒëÃüÁî¡°cc ¨Cc$(CFLAGS) [.c]¡±À´Éú³É[.o]µÄÄ¿±ê¡£Ò²¾ÍÊÇ˵£¬ÎÒÃÇÍêȫûÓбØÒªÐ´ÏÂÏÂÃæµÄÁ½Ìõ¹æÔò£º

foo.o : foo.c

cc ¨Cc foo.c $(CFLAGS)

bar.o : bar.c

cc ¨Cc bar.c $(CFLAGS)

ÒòΪ£¬ÕâÒѾ­ÊÇ¡°Ô¼¶¨¡±ºÃÁ˵ÄÊÂÁË£¬makeºÍÎÒÃÇÔ¼¶¨ºÃÁËÓÃC±àÒëÆ÷¡°cc¡±Éú³É[.o]ÎļþµÄ¹æÔò£¬Õâ¾ÍÊÇÒþº¬¹æÔò¡£µ±È»£¬Èç¹ûÎÒÃÇΪ[.o]ÎļþÊéдÁË×Ô¼ºµÄ¹æÔò£¬ÄÇômake¾Í²»»á×Ô¶¯ÍƵ¼²¢µ÷ÓÃÒþº¬¹æÔò£¬Ëü»á°´ÕÕÎÒÃÇдºÃµÄ¹æÔòÖÒʵµØÖ´ÐС£»¹ÓУ¬ÔÚmakeµÄ¡°Òþº¬¹æÔò¿â¡±ÖУ¬Ã¿Ò»ÌõÒþº¬¹æÔò¶¼ÔÚ¿âÖÐÓÐÆä˳Ðò£¬Ô½¿¿Ç°µÄÔòÊÇÔ½±»¾­³£Ê¹Óõģ¬ËùÒÔ£¬Õâ»áµ¼ÖÂÎÒÃÇÓÐЩʱºò¼´Ê¹ÎÒÃÇÏÔʾµØÖ¸¶¨ÁËÄ¿±êÒÀÀµ£¬makeÒ²²»»á¹Ü¡£ÈçÏÂÃæÕâÌõ¹æÔò£¨Ã»ÓÐÃüÁ£º

foo.o : foo.p

ÒÀÀµÎļþ¡°foo.p¡±£¨Pascal³ÌÐòµÄÔ´Îļþ£©ÓпÉÄܱäµÃûÓÐÒâÒå¡£Èç¹ûĿ¼Ï´æÔÚÁË¡°foo.c¡±Îļþ£¬ÄÇôÎÒÃǵÄÒþº¬¹æÔòÒ»Ñù»áÉúЧ£¬²¢»áͨ¹ý ¡°foo.c¡±µ÷ÓÃCµÄ±àÒëÆ÷Éú³Éfoo.oÎļþ¡£ÒòΪ£¬ÔÚÒþº¬¹æÔòÖУ¬PascalµÄ¹æÔò³öÏÖÔÚCµÄ¹æÔòÖ®ºó£¬ËùÒÔ£¬makeÕÒµ½¿ÉÒÔÉú³Éfoo.oµÄ CµÄ¹æÔò¾Í²»ÔÙѰÕÒÏÂÒ»Ìõ¹æÔòÁË¡£Èç¹ûÄãȷʵ²»Ï£ÍûÈκÎÒþº¬¹æÔòÍÆµ¼£¬ÄÇô£¬Äã¾Í²»ÒªÖ»Ð´³ö¡°ÒÀÀµ¹æÔò¡±£¬¶ø²»Ð´ÃüÁî¡£

¶þ¡¢Òþº¬¹æÔòÒ»ÀÀ

ÕâÀïÎÒÃǽ«½²ÊöËùÓÐÔ¤ÏÈÉèÖã¨Ò²¾ÍÊÇmakeÄÚ½¨£©µÄÒþº¬¹æÔò£¬Èç¹ûÎÒÃDz»Ã÷È·µØÐ´Ï¹æÔò£¬ÄÇô£¬make¾Í»áÔÚÕâЩ¹æÔòÖÐѰÕÒËùÐèÒª¹æÔòºÍÃüÁî¡£µ±È»£¬ÎÒÃÇÒ²¿ÉÒÔʹÓÃmakeµÄ²ÎÊý¡°-r¡±»ò¡°--no-builtin-rules¡±Ñ¡ÏîÀ´È¡ÏûËùÓеÄÔ¤ÉèÖõÄÒþº¬¹æÔò¡£

µ±È»£¬¼´Ê¹ÊÇÎÒÃÇÖ¸¶¨ÁË¡°-r¡±²ÎÊý£¬Ä³Ð©Òþº¬¹æÔò»¹ÊÇ»áÉúЧ£¬ÒòΪÓÐÐí¶àµÄÒþº¬¹æÔò¶¼ÊÇʹÓÃÁË¡°ºó׺¹æÔò¡±À´¶¨ÒåµÄ£¬ËùÒÔ£¬Ö»ÒªÒþº¬¹æÔòÖÐÓС°ºó׺ÁÐ±í ¡±£¨Ò²¾Íһϵͳ¶¨ÒåÔÚÄ¿±ê.SUFFIXESµÄÒÀÀµÄ¿±ê£©£¬ÄÇôÒþº¬¹æÔò¾Í»áÉúЧ¡£Ä¬Èϵĺó׺ÁÐÊÇ£º.out,.a, .ln, .o, .c, .cc, .C, .p, .f, .F, .r, .y, .l, .s, .S, .mod,.sym, .def, .h, .info, .dvi, .tex, .texinfo, .texi, .txinfo, .w, .ch .web, .sh,.elc, .el¡£¾ßÌåµÄϸ½Ú£¬ÎÒÃÇ»áÔÚºóÃæ½²Êö¡£

»¹ÊÇÏÈÀ´¿´Ò»¿´³£ÓõÄÒþº¬¹æÔò°É¡£

1¡¢±àÒëC³ÌÐòµÄÒþº¬¹æÔò¡£

¡°<n>.o¡±µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.c¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ¡°$(CC) ¨Cc $(CPPFLAGS)$(CFLAGS)¡±

2¡¢±àÒëC++³ÌÐòµÄÒþº¬¹æÔò¡£

¡°<n>.o¡± µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.cc¡±»òÊÇ¡°<n>.C¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ¡°$(CXX) ¨Cc $(CPPFLAGS) $(CFLAGS)¡±¡££¨½¨ÒéʹÓá°.cc¡±×÷ΪC++Ô´ÎļþµÄºó׺£¬¶ø²»ÊÇ¡°.C¡±£©

3¡¢±àÒëPascal³ÌÐòµÄÒþº¬¹æÔò¡£

¡°<n>.o¡±µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.p¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ¡°$(PC) ¨Cc $(PFLAGS)¡±¡£

4¡¢±àÒëFortran/Ratfor³ÌÐòµÄÒþº¬¹æÔò¡£

¡°<n>.o¡±µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.r¡±»ò¡°<n>.F¡±»ò¡°<n>.f¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ:

¡°.f¡± ¡°$(FC) ¨Cc $(FFLAGS)¡±

¡°.F¡± ¡°$(FC) ¨Cc $(FFLAGS) $(CPPFLAGS)¡±

¡°.f¡± ¡°$(FC) ¨Cc $(FFLAGS) $(RFLAGS)¡±

5¡¢Ô¤´¦ÀíFortran/Ratfor³ÌÐòµÄÒþº¬¹æÔò¡£

¡°<n>.f¡±µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.r¡±»ò¡°<n>.F¡±¡£Õâ¸ö¹æÔòÖ»ÊÇת»»Ratfor»òÓÐÔ¤´¦ÀíµÄFortran³ÌÐòµ½Ò»¸ö±ê×¼µÄFortran³ÌÐò¡£ÆäʹÓõÄÃüÁîÊÇ£º

¡°.F¡± ¡°$(FC) ¨CF $(CPPFLAGS) $(FFLAGS)¡±

¡°.r¡± ¡°$(FC) ¨CF $(FFLAGS) $(RFLAGS)¡±

6¡¢±àÒëModula-2³ÌÐòµÄÒþº¬¹æÔò¡£

¡°<n>.sym¡± µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.def¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ£º¡°$(M2C) $(M2FLAGS)$(DEFFLAGS)¡±¡£¡°<n.o>¡± µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.mod¡±£¬

²¢ÇÒÆäÉú³ÉÃüÁîÊÇ£º¡°$(M2C) $(M2FLAGS) $(MODFLAGS)¡±¡£

7¡¢»ã±àºÍ»ã±àÔ¤´¦ÀíµÄÒþº¬¹æÔò¡£

¡°<n>.o¡± µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.s¡±£¬Ä¬ÈÏʹÓñàÒëÆ·¡°as¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ£º¡°$(AS) $(ASFLAGS)¡±¡£¡°<n>.s¡± µÄÄ¿±êµÄÒÀÀµÄ¿±ê»á×Ô¶¯ÍƵ¼Îª¡°<n>.S¡±

£¬Ä¬ÈÏʹÓÃCÔ¤±àÒëÆ÷¡°cpp¡±£¬²¢ÇÒÆäÉú³ÉÃüÁîÊÇ£º¡°$(AS) $(ASFLAGS)¡±

8¡¢Á´½ÓObjectÎļþµÄÒþº¬¹æÔò¡£

¡°<n>¡± Ä¿±êÒÀÀµÓÚ¡°<n>.o¡±£¬Í¨¹ýÔËÐÐCµÄ±àÒëÆ÷À´ÔËÐÐÁ´½Ó³ÌÐòÉú³É£¨Ò»°ãÊÇ¡°ld¡±£©£¬ÆäÉú³ÉÃüÁîÊÇ£º¡°$(CC) $(LDFLAGS) <n>.o $(LOADLIBES) $(LDLIBS)¡±¡£Õâ¸ö¹æÔò¶ÔÓÚÖ»ÓÐÒ»¸öÔ´ÎļþµÄ¹¤³ÌÓÐЧ£¬Í¬Ê±Ò²¶Ô¶à¸öObjectÎļþ£¨Óɲ»Í¬µÄÔ´ÎļþÉú³É£©µÄÒ²ÓÐЧ¡£ÀýÈçÈçϹæÔò£º

x : y.o z.o

²¢ÇÒ¡°x.c¡±¡¢¡°y.c¡±ºÍ¡°z.c¡±¶¼´æÔÚʱ£¬Òþº¬¹æÔò½«Ö´ÐÐÈçÏÂÃüÁ

cc -c x.c -o x.o

cc -c y.c -o y.o

cc -c z.c -o z.o

cc x.o y.o z.o -o x

rm -f x.o

rm -f y.o

rm -f z.o

Èç¹ûûÓÐÒ»¸öÔ´Îļþ£¨ÈçÉÏÀýÖеÄx.c£©ºÍÄãµÄÄ¿±êÃû×Ö£¨ÈçÉÏÀýÖеÄx£©Ïà¹ØÁª£¬ÄÇô£¬Äã×îºÃд³ö×Ô¼ºµÄÉú³É¹æÔò£¬²»È»£¬Òþº¬¹æÔò»á±¨´íµÄ¡£

9¡¢Yacc C³ÌÐòʱµÄÒþº¬¹æÔò¡£

¡°<n>.c¡±µÄÒÀÀµÎļþ±»×Ô¶¯ÍƵ¼Îª¡°n.y¡±£¨YaccÉú³ÉµÄÎļþ£©£¬ÆäÉú³ÉÃüÁîÊÇ£º¡°$(YACC) $(YFALGS)¡±¡££¨¡°Yacc¡±ÊÇÒ»¸öÓï·¨·ÖÎöÆ÷£¬¹ØÓÚÆäϸ½ÚÇë²é¿´Ïà¹Ø×ÊÁÏ£©

10¡¢Lex C³ÌÐòʱµÄÒþº¬¹æÔò¡£

¡°<n>.c¡±µÄÒÀÀµÎļþ±»×Ô¶¯ÍƵ¼Îª¡°n.l¡±£¨LexÉú³ÉµÄÎļþ£©£¬ÆäÉú³ÉÃüÁîÊÇ£º¡°$(LEX) $(LFALGS)¡±¡££¨¹ØÓÚ¡°Lex¡±µÄϸ½ÚÇë²é¿´Ïà¹Ø×ÊÁÏ£©

11¡¢Lex Ratfor³ÌÐòʱµÄÒþº¬¹æÔò¡£

¡°<n>.r¡±µÄÒÀÀµÎļþ±»×Ô¶¯ÍƵ¼Îª¡°n.l¡±£¨LexÉú³ÉµÄÎļþ£©£¬ÆäÉú³ÉÃüÁîÊÇ£º¡°$(LEX

) $(LFALGS)¡±¡£

12¡¢´ÓC³ÌÐò¡¢YaccÎļþ»òLexÎļþ´´½¨Lint¿âµÄÒþº¬¹æÔò¡£

¡°<n>.ln¡± £¨lintÉú³ÉµÄÎļþ£©µÄÒÀÀµÎļþ±»×Ô¶¯ÍƵ¼Îª¡°n.c¡±£¬ÆäÉú³ÉÃüÁîÊÇ£º¡°$(LINT) $(LINTFALGS)$(CPPFLAGS) -i¡±¡£¶ÔÓÚ¡°<n>.y¡±ºÍ¡°<n>.l¡±Ò²ÊÇͬÑùµÄ¹æÔò¡£

Èý¡¢Òþº¬¹æÔòʹÓõıäÁ¿

ÔÚÒþº¬¹æÔòÖеÄÃüÁîÖУ¬»ù±¾É϶¼ÊÇʹÓÃÁËһЩԤÏÈÉèÖõıäÁ¿¡£Äã¿ÉÒÔÔÚÄãµÄmakefileÖиıäÕâЩ±äÁ¿µÄÖµ£¬»òÊÇÔÚmakeµÄÃüÁîÐÐÖд«ÈëÕâЩֵ£¬»òÊÇÔÚÄãµÄ»·¾³±äÁ¿ÖÐÉèÖÃÕâЩֵ£¬ÎÞÂÛÔõôÑù£¬Ö»ÒªÉèÖÃÁËÕâÐ©ÌØ¶¨µÄ±äÁ¿£¬ÄÇôÆä¾Í»á¶ÔÒþº¬¹æÔòÆð×÷Óᣵ±È»£¬ÄãÒ²¿ÉÒÔÀûÓÃmakeµÄ¡°-R¡±»ò¡°--no¨Cbuiltin-variables¡±²ÎÊýÀ´È¡ÏûÄãËù¶¨ÒåµÄ±äÁ¿¶ÔÒþº¬¹æÔòµÄ×÷Óá£

ÀýÈ磬µÚÒ»ÌõÒþº¬¹æÔò¡ª¡ª±àÒëC³ÌÐòµÄÒþº¬¹æÔòµÄÃüÁîÊÇ¡°$(CC)¨Cc $(CFLAGS) $(CPPFLAGS)¡±¡£MakeĬÈϵıàÒëÃüÁîÊÇ¡°cc¡±£¬Èç¹ûÄã°Ñ±äÁ¿¡°$(CC)¡±Öض¨Òå³É¡°gcc¡±£¬°Ñ±äÁ¿¡°$(CFLAGS)¡±Öض¨Òå³É ¡°-g¡±£¬ÄÇô£¬Òþº¬¹æÔòÖеÄÃüÁîÈ«²¿»áÒÔ¡°gcc ¨Cc -g $(CPPFLAGS)¡±µÄÑù×ÓÀ´Ö´ÐÐÁË¡£

ÎÒÃÇ¿ÉÒÔ°ÑÒþº¬¹æÔòÖÐʹÓõıäÁ¿·Ö³ÉÁ½ÖÖ£ºÒ»ÖÖÊÇÃüÁîÏà¹ØµÄ£¬Èç¡°CC¡±£»Ò»ÖÖÊDzÎÊýÏàµÄ¹Ø£¬Èç¡°CFLAGS¡±¡£ÏÂÃæÊÇËùÓÐÒþº¬¹æÔòÖлáÓõ½µÄ±äÁ¿£º

1¡¢¹ØÓÚÃüÁîµÄ±äÁ¿¡£

AR º¯Êý¿â´ò°ü³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°ar¡±¡£

AS

»ã±àÓïÑÔ±àÒë³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°as¡±¡£

CC

CÓïÑÔ±àÒë³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°cc¡±¡£

CXX

C++ÓïÑÔ±àÒë³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°g++¡±¡£

CO

´Ó RCSÎļþÖÐÀ©Õ¹Îļþ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°co¡±¡£

CPP

C³ÌÐòµÄÔ¤´¦ÀíÆ÷£¨Êä³öÊDZê×¼Êä³öÉ豸£©¡£Ä¬ÈÏÃüÁîÊÇ¡°$(CC) ¨CE¡±¡£

FC

Fortran ºÍ Ratfor µÄ±àÒëÆ÷ºÍÔ¤´¦Àí³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°f77¡±¡£

GET

´ÓSCCSÎļþÖÐÀ©Õ¹ÎļþµÄ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°get¡±¡£

LEX

Lex·½·¨·ÖÎöÆ÷³ÌÐò£¨Õë¶ÔÓÚC»òRatfor£©¡£Ä¬ÈÏÃüÁîÊÇ¡°lex¡±¡£

PC

PascalÓïÑÔ±àÒë³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°pc¡±¡£

YACC

YaccÎÄ·¨·ÖÎöÆ÷£¨Õë¶ÔÓÚC³ÌÐò£©¡£Ä¬ÈÏÃüÁîÊÇ¡°yacc¡±¡£

YACCR

YaccÎÄ·¨·ÖÎöÆ÷£¨Õë¶ÔÓÚRatfor³ÌÐò£©¡£Ä¬ÈÏÃüÁîÊÇ¡°yacc ¨Cr¡±¡£

MAKEINFO

ת»»TexinfoÔ´Îļþ£¨.texi£©µ½InfoÎļþ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°makeinfo¡±¡£

TEX

´ÓTeXÔ´Îļþ´´½¨TeX DVIÎļþµÄ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°tex¡±¡£

TEXI2DVI

´ÓTexinfoÔ´Îļþ´´½¨¾üTeX DVI ÎļþµÄ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°texi2dvi¡±¡£

WEAVE

ת»»Webµ½TeXµÄ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°weave¡±¡£

CWEAVE

ת»»CWeb µ½ TeXµÄ³ÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°cweave¡±¡£

TANGLE

ת»»Webµ½PascalÓïÑԵijÌÐò¡£Ä¬ÈÏÃüÁîÊÇ¡°tangle¡±¡£

CTANGLE

ת»»CWeb µ½ C¡£Ä¬ÈÏÃüÁîÊÇ¡°ctangle¡±¡£

RM

ɾ³ýÎļþÃüÁĬÈÏÃüÁîÊÇ¡°rm ¨Cf¡±¡£

2¡¢¹ØÓÚÃüÁî²ÎÊýµÄ±äÁ¿

ÏÂÃæµÄÕâЩ±äÁ¿¶¼ÊÇÏà¹ØÉÏÃæµÄÃüÁîµÄ²ÎÊý¡£Èç¹ûûÓÐÖ¸Ã÷ÆäĬÈÏÖµ£¬ÄÇôÆäĬÈÏÖµ¶¼Êǿա£

ARFLAGS

º¯Êý¿â´ò°ü³ÌÐòARÃüÁîµÄ²ÎÊý¡£Ä¬ÈÏÖµÊÇ¡°rv¡±¡£

ASFLAGS

»ã±àÓïÑÔ±àÒëÆ÷²ÎÊý¡££¨µ±Ã÷ÏԵص÷Óá°.s¡±»ò¡°.S¡±Îļþʱ£©¡£

CFLAGS

CÓïÑÔ±àÒëÆ÷²ÎÊý¡£

CXXFLAGS

C++ÓïÑÔ±àÒëÆ÷²ÎÊý¡£

COFLAGS

RCSÃüÁî²ÎÊý¡£

CPPFLAGS

CÔ¤´¦ÀíÆ÷²ÎÊý¡££¨ C ºÍ Fortran ±àÒëÆ÷Ò²»áÓõ½£©¡£

FFLAGS

FortranÓïÑÔ±àÒëÆ÷²ÎÊý¡£

GFLAGS

SCCS ¡°get¡±³ÌÐò²ÎÊý¡£

LDFLAGS

Á´½ÓÆ÷²ÎÊý¡££¨È磺¡°ld¡±£©

LFLAGS

LexÎÄ·¨·ÖÎöÆ÷²ÎÊý¡£

PFLAGS

PascalÓïÑÔ±àÒëÆ÷²ÎÊý¡£

RFLAGS

Ratfor ³ÌÐòµÄFortran ±àÒëÆ÷²ÎÊý¡£

YFLAGS

YaccÎÄ·¨·ÖÎöÆ÷²ÎÊý¡£

ËÄ¡¢Òþº¬¹æÔòÁ´

ÓÐЩʱºò£¬Ò»¸öÄ¿±ê¿ÉÄܱ»Ò»ÏµÁеÄÒþº¬¹æÔòËù×÷Óá£ÀýÈ磬һ¸ö[.o]µÄÎļþÉú³É£¬¿ÉÄÜ»áÊÇÏȱ»YaccµÄ[.y]ÎļþÏȳÉ[.c]£¬È»ºóÔÙ±»CµÄ±àÒëÆ÷Éú³É¡£ÎÒÃǰÑÕâһϵÁеÄÒþº¬¹æÔò½Ð×ö¡°Òþº¬¹æÔòÁ´¡±¡£

ÔÚÉÏÃæµÄÀý×ÓÖУ¬Èç¹ûÎļþ[.c]´æÔÚ£¬ÄÇô¾ÍÖ±½Óµ÷ÓÃCµÄ±àÒëÆ÷µÄÒþº¬¹æÔò£¬Èç¹ûûÓÐ[.c]Îļþ£¬µ«ÓÐÒ»¸ö[.y]Îļþ£¬ÄÇôYaccµÄÒþº¬¹æÔò»á±»µ÷Óã¬Éú³É[.c]Îļþ£¬È»ºó£¬ÔÙµ÷ÓÃC±àÒëµÄÒþº¬¹æÔò×îÖÕÓÉ[.c]Éú³É[.o]Îļþ£¬´ïµ½Ä¿±ê¡£ÎÒÃǰÑÕâÖÖ[.c]µÄÎļþ£¨»òÊÇÄ¿±ê£©£¬½Ð×öÖмäÄ¿±ê¡£²»¹ÜÔõôÑù£¬make»áŬÁ¦×Ô¶¯ÍƵ¼Éú³ÉÄ¿±êµÄÒ»Çз½·¨£¬²»¹ÜÖмäÄ¿±êÓжàÉÙ£¬Æä¶¼»áÖ´×ŵذÑËùÓеÄÒþº¬¹æÔòºÍÄãÊéдµÄ¹æÔòÈ«²¿ºÏÆðÀ´·ÖÎö£¬Å¬Á¦´ïµ½Ä¿±ê£¬ËùÒÔ£¬ÓÐЩʱºò£¬¿ÉÄÜ»áÈÃÄã¾õµÃÆæ¹Ö£¬ÔõôÎÒµÄÄ¿±ê»áÕâÑùÉú³É£¿ÔõôÎÒµÄmakefile·¢·èÁË£¿

ÔÚĬÈÏÇé¿öÏ£¬¶ÔÓÚÖмäÄ¿±ê£¬ËüºÍÒ»°ãµÄÄ¿±êÓÐÁ½¸öµØ·½Ëù²»Í¬£ºµÚÒ»¸ö²»Í¬Êdzý·ÇÖмäµÄÄ¿±ê²»´æÔÚ£¬²Å»áÒý·¢ÖÐ¼ä¹æÔò¡£µÚ¶þ¸ö²»Í¬µÄÊÇ£¬Ö»ÒªÄ¿±ê³É¹¦²úÉú£¬ÄÇô£¬²úÉú×îÖÕÄ¿±ê¹ý³ÌÖУ¬Ëù²úÉúµÄÖмäÄ¿±êÎļþ»á±»ÒÔ¡°rm -f¡±É¾³ý¡£Í¨³££¬Ò»¸ö±»makefileÖ¸¶¨³ÉÄ¿±ê»òÊÇÒÀÀµÄ¿±êµÄÎļþ²»Äܱ»µ±×÷Öн顣Ȼ¶ø£¬Äã¿ÉÒÔÃ÷ÏÔµØËµÃ÷Ò»¸öÎļþ»òÊÇÄ¿±êÊÇÖнéÄ¿±ê£¬Äã¿ÉÒÔʹÓÃαĿ±ê¡°.INTERMEDIATE¡±À´Ç¿ÖÆÉùÃ÷¡££¨È磺.INTERMEDIATE £º mid £©ÄãÒ²¿ÉÒÔ×èÖ¹make×Ô¶¯É¾³ýÖмäÄ¿±ê£¬Òª×öµ½ÕâÒ»µã£¬Äã¿ÉÒÔʹÓÃαĿ±ê¡°.SECONDARY¡±À´Ç¿ÖÆÉùÃ÷£¨È磺.SECONDARY : sec£©¡£Ä㻹¿ÉÒÔ°ÑÄãµÄÄ¿±ê£¬ÒÔģʽµÄ·½Ê½À´Ö¸¶¨£¨È磺%.o£©³ÉαĿ±ê¡°.PRECIOUS¡±µÄÒÀÀµÄ¿±ê£¬ÒÔ±£´æ±»Òþº¬¹æÔòËùÉú³ÉµÄÖмäÎļþ¡£

ÔÚ¡°Òþº¬¹æÔòÁ´¡±ÖУ¬½ûֹͬһ¸öÄ¿±ê³öÏÖÁ½´Î»òÁ½´ÎÒÔÉÏ£¬ÕâÑùÒ»À´£¬¾Í¿É·ÀÖ¹ÔÚmake×Ô¶¯ÍƵ¼Ê±³öÏÖÎÞÏ޵ݹéµÄÇé¿ö¡£

Make »áÓÅ»¯Ò»Ð©ÌØÊâµÄÒþº¬¹æÔò£¬¶ø²»Éú³ÉÖмäÎļþ¡£È磬´ÓÎļþ¡°foo.c¡±Éú³ÉÄ¿±ê³ÌÐò¡°foo¡±£¬°´µÀÀí£¬make»á±àÒëÉú³ÉÖмäÎļþ¡°foo.o¡±£¬È»ºóÁ´½Ó³É¡°foo¡±£¬µ«ÔÚʵ¼ÊÇé¿öÏ£¬ÕâÒ»¶¯×÷¿ÉÒÔ±»Ò»Ìõ¡°cc¡±µÄÃüÁîÍê³É£¨cc ¨Co foo foo.c£©£¬ÓÚÊÇÓÅ»¯¹ýµÄ¹æÔò¾Í²»»áÉú³ÉÖмäÎļþ¡£

Îå¡¢¶¨Òåģʽ¹æÔò

Äã¿ÉÒÔʹÓÃģʽ¹æÔòÀ´¶¨ÒåÒ»¸öÒþº¬¹æÔò¡£Ò»¸öģʽ¹æÔò¾ÍºÃÏñÒ»¸öÒ»°ãµÄ¹æÔò£¬Ö»ÊÇÔÚ¹æÔòÖУ¬Ä¿±êµÄ¶¨ÒåÐèÒªÓÐ"%"×Ö·û¡£"%"µÄÒâ˼ÊDZíʾһ¸ö»ò¶à¸öÈÎÒâ×Ö·û¡£ÔÚÒÀÀµÄ¿±êÖÐͬÑù¿ÉÒÔʹÓÃ"%"£¬Ö»ÊÇÒÀÀµÄ¿±êÖеÄ"%"µÄȡֵ£¬È¡¾öÓÚÆäÄ¿±ê¡£

ÓÐÒ»µãÐèҪעÒâµÄÊÇ£¬"%"µÄÕ¹¿ª·¢ÉúÔÚ±äÁ¿ºÍº¯ÊýµÄÕ¹¿ªÖ®ºó£¬±äÁ¿ºÍº¯ÊýµÄÕ¹¿ª·¢ÉúÔÚmakeÔØÈëMakefileʱ£¬¶øÄ£Ê½¹æÔòÖеÄ"%"Ôò·¢ÉúÔÚÔËÐÐʱ¡£

1¡¢Ä£Ê½¹æÔò½éÉÜ

ģʽ¹æÔòÖУ¬ÖÁÉÙÔÚ¹æÔòµÄÄ¿±ê¶¨ÒåÖÐÒª°üº¬"%"£¬·ñÔò£¬¾ÍÊÇÒ»°ãµÄ¹æÔò¡£Ä¿±êÖеÄ"%"¶¨Òå±íʾ¶ÔÎļþÃûµÄÆ¥Å䣬"%"±íʾ³¤¶ÈÈÎÒâµÄ·Ç¿Õ×Ö·û´®¡£ÀýÈ磺"%.c"±íʾÒÔ".c"½áβµÄÎļþÃû£¨ÎļþÃûµÄ³¤¶ÈÖÁÉÙΪ3£©£¬¶ø"s.%.c"Ôò±íʾÒÔ"s."¿ªÍ·£¬".c"½áβµÄÎļþÃû£¨ÎļþÃûµÄ³¤¶ÈÖÁÉÙΪ 5£©¡£

Èç¹û"%"¶¨ÒåÔÚÄ¿±êÖУ¬ÄÇô£¬Ä¿±êÖеÄ"%"µÄÖµ¾ö¶¨ÁËÒÀÀµÄ¿±êÖеÄ"%"µÄÖµ£¬Ò²¾ÍÊÇ˵£¬Ä¿±êÖеÄģʽµÄ"%"¾ö¶¨ÁËÒÀÀµÄ¿±êÖÐ"%"µÄÑù×Ó¡£ÀýÈçÓÐÒ»¸öģʽ¹æÔòÈçÏ£º

%.o : %.c ; <command ......>

Æäº¬ÒåÊÇ£¬Ö¸³öÁËÔõô´ÓËùÓеÄ[.c]ÎļþÉú³ÉÏàÓ¦µÄ[.o]ÎļþµÄ¹æÔò¡£Èç¹ûÒªÉú³ÉµÄÄ¿±êÊÇ"a.o b.o"£¬ÄÇô"%c"¾ÍÊÇ"a.c b.c"¡£Ò»µ©ÒÀÀµÄ¿±êÖеÄ"%"ģʽ±»È·¶¨£¬ÄÇô£¬make»á±»ÒªÇóȥƥÅ䵱ǰĿ¼ÏÂËùÓеÄÎļþÃû£¬Ò»µ©ÕÒµ½£¬make¾Í»á¹æÔòϵÄÃüÁËùÒÔ£¬ÔÚģʽ¹æÔòÖУ¬Ä¿±ê¿ÉÄÜ»áÊǶà¸öµÄ£¬Èç¹ûÓÐģʽƥÅä³ö¶à¸öÄ¿±ê£¬make¾Í»á²úÉúËùÓеÄģʽĿ±ê£¬´Ëʱ£¬make¹ØÐĵÄÊÇÒÀÀµµÄÎļþÃûºÍÉú³ÉÄ¿±êµÄÃüÁîÕâÁ½¼þÊ¡£

2¡¢Ä£Ê½¹æÔòʾÀý

ÏÂÃæÕâ¸öÀý×Ó±íʾÁË,°ÑËùÓеÄ[.c]Îļþ¶¼±àÒë³É[.o]Îļþ.

%.o : %.c

$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@

ÆäÖУ¬"$@"±íʾËùÓеÄÄ¿±êµÄ°¤¸öÖµ£¬"$<"±íʾÁËËùÓÐÒÀÀµÄ¿±êµÄ°¤¸öÖµ¡£ÕâÐ©Ææ¹ÖµÄ±äÁ¿ÎÒÃǽÐ"×Ô¶¯»¯±äÁ¿"£¬ºóÃæ»áÏêϸ½²Êö¡£

ÏÂÃæµÄÕâ¸öÀý×ÓÖÐÓÐÁ½¸öÄ¿±êÊÇģʽµÄ£º

%.tab.c %.tab.h: %.y

bison -d $<

ÕâÌõ¹æÔò¸æËßmake°ÑËùÓеÄ[.y]Îļþ¶¼ÒÔ"bison -d <n>.y"Ö´ÐУ¬È»ºóÉú³É"<n>.tab.c"ºÍ"<n>.tab.h"Îļþ¡££¨ÆäÖУ¬"<n>" ±íʾһ¸öÈÎÒâ×Ö·û´®£©¡£Èç¹ûÎÒÃǵÄÖ´ÐгÌÐò"foo"ÒÀÀµÓÚÎļþ"parse.tab.o"ºÍ"scan.o"£¬²¢ÇÒÎļþ"scan.o"ÒÀÀµÓÚÎļþ"parse.tab.h"£¬Èç¹û"parse.y"Îļþ±»¸üÐÂÁË£¬ÄÇô¸ù¾ÝÉÏÊöµÄ¹æÔò£¬"bison-d parse.y"¾Í»á±»Ö´ÐÐÒ»´Î£¬ÓÚÊÇ£¬"parse.tab.o"ºÍ"scan.o"µÄÒÀÀµÎļþ¾ÍÆëÁË¡££¨¼ÙÉ裬"parse.tab.o"ÓÉ"parse.tab.c"Éú³É£¬ºÍ"scan.o"ÓÉ"scan.c"Éú³É£¬¶ø"foo"ÓÉ"parse.tab.o"ºÍ"scan.o"Á´½ÓÉú³É£¬

¶øÇÒfooºÍÆä[.o]ÎļþµÄÒÀÀµ¹ØÏµÒ²Ð´ºÃ£¬ÄÇô£¬ËùÓеÄÄ¿±ê¶¼»áµÃµ½Âú×㣩

3¡¢×Ô¶¯»¯±äÁ¿

ÔÚÉÏÊöµÄģʽ¹æÔòÖУ¬Ä¿±êºÍÒÀÀµÎļþ¶¼ÊÇһϵÀýµÄÎļþ£¬ÄÇôÎÒÃÇÈçºÎÊéдһ¸öÃüÁîÀ´Íê³É´Ó²»Í¬µÄÒÀÀµÎļþÉú³ÉÏàÓ¦µÄÄ¿±ê£¿ÒòΪÔÚÿһ´ÎµÄ¶Ôģʽ¹æÔòµÄ½âÎöʱ£¬¶¼»áÊDz»Í¬µÄÄ¿±êºÍÒÀÀµÎļþ¡£×Ô¶¯»¯±äÁ¿¾ÍÊÇÍê³ÉÕâ¸ö¹¦Äܵġ£ÔÚÇ°Ãæ£¬ÎÒÃÇÒѾ­¶Ô×Ô¶¯»¯±äÁ¿ÓÐËùÌáÉæ£¬ÏàÐÅÄã¿´µ½ÕâÀïÒѶÔËüÓÐÒ»¸ö¸ÐÐÔÈÏʶÁË¡£Ëùν×Ô¶¯»¯±äÁ¿£¬¾ÍÊÇÕâÖÖ±äÁ¿»á°ÑģʽÖÐËù¶¨ÒåµÄһϵÁеÄÎļþ×Ô¶¯µØ°¤¸öÈ¡³ö£¬Ö±ÖÁËùÓеķûºÏģʽµÄÎļþ¶¼È¡ÍêÁË¡£ÕâÖÖ×Ô¶¯»¯±äÁ¿Ö»Ó¦³öÏÖÔÚ¹æÔòµÄÃüÁîÖС£

ÏÂÃæÊÇËùÓеÄ×Ô¶¯»¯±äÁ¿¼°Æä˵Ã÷£º

$@

±íʾ¹æÔòÖеÄÄ¿±êÎļþ¼¯¡£ÔÚģʽ¹æÔòÖУ¬Èç¹ûÓжà¸öÄ¿±ê£¬ÄÇô£¬"$@"¾ÍÊÇÆ¥ÅäÓÚÄ¿±êÖÐģʽ¶¨ÒåµÄ¼¯ºÏ¡£

$%

½öµ±Ä¿±êÊǺ¯Êý¿âÎļþÖУ¬±íʾ¹æÔòÖеÄÄ¿±ê³ÉÔ±Ãû¡£ÀýÈ磬Èç¹ûÒ»¸öÄ¿±êÊÇ"foo.a(bar.o)"£¬ÄÇô£¬"$%"¾ÍÊÇ"bar.o"£¬"$@"¾ÍÊÇ"foo.a"¡£Èç¹ûÄ¿±ê²»ÊǺ¯Êý¿âÎļþ£¨UnixÏÂÊÇ

[.a]£¬WindowsÏÂÊÇ[.lib]£©£¬ÄÇô£¬ÆäֵΪ¿Õ¡£

$<

ÒÀÀµÄ¿±êÖеĵÚÒ»¸öÄ¿±êÃû×Ö¡£Èç¹ûÒÀÀµÄ¿±êÊÇÒÔģʽ£¨¼´"%"£©¶¨ÒåµÄ£¬ÄÇô"$<"½«ÊÇ·ûºÏģʽµÄһϵÁеÄÎļþ¼¯¡£×¢Ò⣬ÆäÊÇÒ»¸öÒ»¸öÈ¡³öÀ´µÄ¡£

$?

ËùÓбÈÄ¿±êеÄÒÀÀµÄ¿±êµÄ¼¯ºÏ¡£ÒÔ¿Õ¸ñ·Ö¸ô¡£

$^

ËùÓеÄÒÀÀµÄ¿±êµÄ¼¯ºÏ¡£ÒÔ¿Õ¸ñ·Ö¸ô¡£Èç¹ûÔÚÒÀÀµÄ¿±êÖÐÓжà¸öÖØ¸´µÄ£¬ÄǸöÕâ¸ö±äÁ¿»áÈ¥³ýÖØ¸´µÄÒÀÀµÄ¿±ê£¬Ö»±£ÁôÒ»·Ý¡£

$+

Õâ¸ö±äÁ¿ºÜÏñ"$^"£¬Ò²ÊÇËùÓÐÒÀÀµÄ¿±êµÄ¼¯ºÏ¡£Ö»ÊÇËü²»È¥³ýÖØ¸´µÄÒÀÀµÄ¿±ê¡£

$*

Õâ¸ö±äÁ¿±íʾĿ±êģʽÖÐ"%"¼°Æä֮ǰµÄ²¿·Ö¡£Èç¹ûÄ¿±êÊÇ"dir/a.foo.b"£¬²¢ÇÒÄ¿±êµÄģʽÊÇ"a.%.b"£¬ÄÇô£¬"$*"µÄÖµ¾ÍÊÇ"dir /a.foo"¡£Õâ¸ö±äÁ¿¶ÔÓÚ¹¹ÔìÓйØÁªµÄÎļþÃûÊDZÈ

½ÏÓнϡ£Èç¹ûÄ¿±êÖÐûÓÐģʽµÄ¶¨Ò壬ÄÇô"$*"Ò²¾Í²»Äܱ»ÍƵ¼³ö£¬µ«ÊÇ£¬Èç¹ûÄ¿±êÎļþµÄºó׺ÊÇ makeËùʶ±ðµÄ£¬ÄÇô"$*"¾ÍÊdzýÁ˺ó׺µÄÄÇÒ»²¿·Ö¡£ÀýÈ磺Èç¹ûÄ¿±êÊÇ"foo.c"£¬ÒòΪ".c"ÊÇmakeËùÄÜʶ±ðµÄºó׺Ãû£¬ËùÒÔ£¬"$*"µÄÖµ¾ÍÊÇ"foo"¡£Õâ¸öÌØÐÔÊÇGNU makeµÄ£¬ºÜÓпÉÄܲ»¼æÈÝÓÚÆäËü°æ±¾µÄmake£¬ËùÒÔ£¬ÄãÓ¦¸Ã¾¡Á¿±ÜÃâʹÓÃ"$*"£¬³ý·ÇÊÇÔÚÒþº¬¹æÔò»òÊǾ²Ì¬Ä£Ê½ÖС£Èç¹ûÄ¿±êÖеĺó׺ÊÇmakeËù²»ÄÜʶ±ðµÄ£¬ÄÇô"$*"¾ÍÊÇ¿ÕÖµ¡£µ±ÄãÏ£ÍûÖ»¶Ô¸üйýµÄÒÀÀµÎļþ½øÐвÙ×÷ʱ£¬"$?"ÔÚÏÔʽ¹æÔòÖкÜÓÐÓã¬ÀýÈ磬¼ÙÉèÓÐÒ»¸öº¯Êý¿âÎļþ½Ð"lib"£¬ÆäÓÉÆäËü¼¸¸öobjectÎļþ¸üС£ÄÇô°ÑobjectÎļþ´ò°üµÄ±È½ÏÓÐЧÂʵÄMakefile¹æÔòÊÇ£º

lib : foo.o bar.o lose.o win.o

ar r lib $?

ÔÚÉÏÊöËùÁгöÀ´µÄ×Ô¶¯Á¿±äÁ¿ÖС£Ëĸö±äÁ¿£¨$@¡¢$<¡¢$%¡¢$*£©ÔÚÀ©Õ¹Ê±Ö»»áÓÐÒ»¸öÎļþ£¬¶øÁíÈý¸öµÄÖµÊÇÒ»¸öÎļþÁÐ±í¡£ÕâÆß¸ö×Ô¶¯»¯±äÁ¿»¹¿ÉÒÔÈ¡µÃÎļþµÄĿ¼Ãû»òÊÇÔÚµ±Ç°Ä¿Â¼ÏµķûºÏģʽµÄÎļþÃû£¬Ö»ÐèÒª´îÅäÉÏ"D"»ò"F"×ÖÑù¡£ÕâÊÇGNU makeÖÐÀϰ汾µÄÌØÐÔ£¬ÔÚа汾ÖУ¬ÎÒÃÇʹÓú¯Êý"dir"»ò"notdir"¾Í¿ÉÒÔ×öµ½ÁË¡£"D"µÄº¬Òå¾ÍÊÇDirectory£¬¾ÍÊÇĿ¼£¬"F"µÄº¬Òå¾ÍÊÇFile£¬¾ÍÊÇÎļþ¡£

ÏÂÃæÊǶÔÓÚÉÏÃæµÄÆß¸ö±äÁ¿·Ö±ð¼ÓÉÏ"D"»òÊÇ"F"µÄº¬Ò壺

$(@D)

±íʾ"$@"µÄĿ¼²¿·Ö£¨²»ÒÔб¸Ü×÷Ϊ½á⣩£¬Èç¹û"$@"ÖµÊÇ"dir/foo.o"£¬ÄÇô"$(@D)"¾ÍÊÇ"dir"£¬¶øÈç¹û"$@"ÖÐûÓаüº¬Ð±¸ÜµÄ»°£¬ÆäÖµ¾ÍÊÇ"."£¨µ±Ç°Ä¿Â¼£©¡£

$(@F)

±íʾ"$@"µÄÎļþ²¿·Ö£¬Èç¹û"$@"ÖµÊÇ"dir/foo.o"£¬ÄÇô"$(@F)"¾ÍÊÇ"foo.o"£¬"$(@F)"Ï൱ÓÚº¯Êý"$(notdir$@)"¡£

"$(*D)"

"$(*F)"

ºÍÉÏÃæËùÊöµÄͬÀí£¬Ò²ÊÇÈ¡ÎļþµÄĿ¼²¿·ÖºÍÎļþ²¿·Ö¡£¶ÔÓÚÉÏÃæµÄÄǸöÀý×Ó£¬"$(*D)"·µ»Ø"dir"£¬¶ø"$(*F)"·µ»Ø"foo"

"$(%D)"

"$(%F)"

·Ö±ð±íʾÁ˺¯Êý°üÎļþ³ÉÔ±µÄĿ¼²¿·ÖºÍÎļþ²¿·Ö¡£Õâ¶ÔÓÚÐÎͬ"archive(member)"ÐÎʽµÄÄ¿±êÖеÄ"member"Öаüº¬Á˲»Í¬µÄĿ¼ºÜÓÐÓá£

"$(<D)"

"$(<F)"

·Ö±ð±íʾÒÀÀµÎļþµÄĿ¼²¿·ÖºÍÎļþ²¿·Ö¡£

"$(^D)"

"$(^F)"

·Ö±ð±íʾËùÓÐÒÀÀµÎļþµÄĿ¼²¿·ÖºÍÎļþ²¿·Ö¡££¨ÎÞÏàͬµÄ£©

"$(+D)"

"$(+F)"

·Ö±ð±íʾËùÓÐÒÀÀµÎļþµÄĿ¼²¿·ÖºÍÎļþ²¿·Ö¡££¨¿ÉÒÔÓÐÏàͬµÄ£©

"$(?D)"

"$(?F)"

·Ö±ð±íʾ±»¸üеÄÒÀÀµÎļþµÄĿ¼²¿·ÖºÍÎļþ²¿·Ö¡£

×îºóÏëÌáÐÑһϵÄÊÇ£¬¶ÔÓÚ"$<"£¬ÎªÁ˱ÜÃâ²úÉú²»±ØÒªµÄÂé·³£¬ÎÒÃÇ×îºÃ¸ø$ºóÃæµÄÄǸöÌØ¶¨×Ö·û¶¼¼ÓÉÏÔ²À¨ºÅ£¬±ÈÈ磬"$(< )"¾ÍÒª±È"$<"ÒªºÃһЩ¡£»¹µÃҪעÒâµÄÊÇ£¬ÕâЩ±äÁ¿Ö»Ê¹ÓÃÔÚ¹æÔòµÄÃüÁîÖУ¬¶øÇÒÒ»°ã¶¼ÊÇ"ÏÔʽ¹æÔò"ºÍ"¾²Ì¬Ä£Ê½¹æÔò"£¨²Î¼ûÇ°Ãæ"Êéд¹æÔò"Ò»Õ£©¡£ÆäÔÚÒþº¬¹æÔòÖв¢Ã»ÓÐÒâÒå¡£

4¡¢Ä£Ê½µÄÆ¥Åä

Ò»°ãÀ´Ëµ£¬Ò»¸öÄ¿±êµÄģʽÓÐÒ»¸öÓÐǰ׺»òÊǺó׺µÄ"%"£¬»òÊÇûÓÐǰºó׺£¬Ö±½Ó¾ÍÊÇÒ»¸ö"%"¡£ÒòΪ"%"´ú±íÒ»¸ö»ò¶à¸ö×Ö·û£¬ËùÒÔÔÚ¶¨ÒåºÃÁ˵ÄģʽÖУ¬ÎÒÃǰÑ"%"ËùÆ¥ÅäµÄÄÚÈݽÐ×ö"¾¥"£¬ÀýÈç"%.c"ËùÆ¥ÅäµÄÎļþ"test.c"ÖÐ"test"¾ÍÊÇ"¾¥"¡£ÒòΪÔÚÄ¿±êºÍÒÀÀµÄ¿±êÖÐͬʱÓÐ"%"ʱ£¬ÒÀÀµÄ¿±êµÄ"¾¥"»á´«¸øÄ¿±ê£¬µ±×öÄ¿±êÖеÄ"¾¥"¡£

µ±Ò»¸öģʽƥÅä°üº¬ÓÐб¸Ü£¨Êµ¼ÊÒ²²»¾­³£°üº¬£©µÄÎļþʱ£¬ÄÇôÔÚ½øÐÐģʽƥÅäʱ£¬Ä¿Â¼²¿·Ö»áÊ×Ïȱ»ÒÆ¿ª£¬È»ºó½øÐÐÆ¥Å䣬³É¹¦ºó£¬ÔÙ°ÑĿ¼¼Ó»ØÈ¥¡£ÔÚ½øÐÐ"¾¥"µÄ´«µÝʱ£¬ÎÒÃÇÐèÒªÖªµÀÕâ¸ö²½Öè¡£ÀýÈçÓÐÒ»¸öģʽ"e%t"£¬Îļþ"src/eat" Æ¥ÅäÓÚ¸Ãģʽ£¬ÓÚÊÇ"src/a"¾ÍÊÇÆä"¾¥"£¬Èç¹ûÕâ¸öģʽ¶¨ÒåÔÚÒÀÀµÄ¿±êÖУ¬¶ø±»ÒÀÀµÓÚÕâ¸öģʽµÄÄ¿±êÖÐÓÖÓиöģʽ"c%r"£¬ÄÇô£¬Ä¿±ê¾ÍÊÇ"src/car"¡££¨"¾¥"±»´«µÝ£©

5¡¢ÖØÔØÄÚ½¨Òþº¬¹æÔò

Äã¿ÉÒÔÖØÔØÄÚ½¨µÄÒþº¬¹æÔò£¨»òÊǶ¨ÒåÒ»¸öÈ«Ðµģ©£¬ÀýÈçÄã¿ÉÒÔÖØÐ¹¹ÔìºÍÄÚ½¨Òþº¬¹æÔò²»Í¬µÄÃüÁÈ磺

%.o : %.c

$(CC) -c $(CPPFLAGS) $(CFLAGS) -D$(date)

Äã¿ÉÒÔÈ¡ÏûÄÚ½¨µÄÒþº¬¹æÔò£¬Ö»Òª²»ÔÚºóÃæÐ´ÃüÁî¾ÍÐС£È磺

%.o : %.s

ͬÑù£¬ÄãÒ²¿ÉÒÔÖØÐ¶¨ÒåÒ»¸öȫеÄÒþº¬¹æÔò£¬ÆäÔÚÒþº¬¹æÔòÖеÄλÖÃÈ¡¾öÓÚÄãÔÚÄÄÀïдÏÂÕâ¸ö¹æÔò¡£³¯Ç°µÄλÖþͿ¿Ç°¡£

Áù¡¢ÀÏʽ·ç¸ñµÄ"ºó׺¹æÔò"

ºó׺¹æÔòÊÇÒ»¸ö±È½ÏÀÏʽµÄ¶¨ÒåÒþº¬¹æÔòµÄ·½·¨¡£ºó׺¹æÔò»á±»Ä£Ê½¹æÔòÖð²½µØÈ¡´ú¡£ÒòΪģʽ¹æÔò¸üÇ¿¸üÇåÎú¡£ÎªÁ˺ÍÀϰ汾µÄMakefile¼æÈÝ£¬GNU makeͬÑù¼æÈÝÓÚÕâЩ¶«Î÷¡£ºó׺¹æÔòÓÐÁ½ÖÖ·½Ê½£º"Ë«ºó׺"ºÍ"µ¥ºó׺"¡£Ë«ºó׺¹æÔò¶¨ÒåÁËÒ»¶Ôºó׺£ºÄ¿±êÎļþµÄºó׺ºÍÒÀÀµÄ¿±ê£¨Ô´Îļþ£©µÄºó׺¡£Èç".c.o"Ï൱ÓÚ"%o : %c"¡£µ¥ºó׺¹æÔòÖ»¶¨ÒåÒ»¸öºó׺£¬Ò²¾ÍÊÇÔ´ÎļþµÄºó׺¡£Èç".c"Ï൱ÓÚ"% : %.c"¡£

ºó׺¹æÔòÖÐËù¶¨ÒåµÄºó׺Ӧ¸ÃÊÇmakeËùÈÏʶµÄ£¬Èç¹ûÒ»¸öºó׺ÊÇmakeËùÈÏʶµÄ£¬ÄÇôÕâ¸ö¹æÔò¾ÍÊǵ¥ºó׺¹æÔò£¬¶øÈç¹ûÁ½¸öÁ¬ÔÚÒ»ÆðµÄºó׺¶¼±»makeËùÈÏʶ£¬ÄǾÍÊÇË«ºó׺¹æÔò¡£ÀýÈ磺".c"ºÍ".o"¶¼ÊÇmakeËùÖªµÀ¡£Òò¶ø£¬Èç¹ûÄ㶨ÒåÁËÒ»¸ö¹æÔòÊÇ".c.o"ÄÇôÆä¾ÍÊÇË«ºó׺¹æÔò£¬ÒâÒå¾ÍÊÇ".c"ÊÇÔ´ÎļþµÄºó׺£¬".o"ÊÇÄ¿±êÎļþµÄºó׺¡£ÈçÏÂʾÀý£º

.c.o:

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

ºó׺¹æÔò²»ÔÊÐíÈκεÄÒÀÀµÎļþ£¬Èç¹ûÓÐÒÀÀµÎļþµÄ»°£¬ÄǾͲ»ÊǺó׺¹æÔò£¬ÄÇЩºó׺ͳͳ±»ÈÏΪÊÇÎļþÃû£¬È磺

.c.o: foo.h

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

Õâ¸öÀý×Ó£¬¾ÍÊÇ˵£¬Îļþ".c.o"ÒÀÀµÓÚÎļþ"foo.h"£¬¶ø²»ÊÇÎÒÃÇÏëÒªµÄÕâÑù£º

%.o: %.c foo.h

$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<

ºó׺¹æÔòÖУ¬Èç¹ûûÓÐÃüÁÄÇÊǺÁÎÞÒâÒåµÄ¡£ÒòΪËûÒ²²»»áÒÆÈ¥ÄÚ½¨µÄÒþº¬¹æÔò¡£

¶øÒªÈÃmakeÖªµÀÒ»Ð©ÌØ¶¨µÄºó׺£¬ÎÒÃÇ¿ÉÒÔʹÓÃαĿ±ê".SUFFIXES"À´¶¨Òå»òÊÇɾ³ý£¬È磺.SUFFIXES:.hack .win

°Ñºó׺.hackºÍ.win¼ÓÈëºó׺ÁбíÖеÄĩβ¡£

.SUFFIXES: # ɾ³ýĬÈϵĺó׺

.SUFFIXES: .c .o .h # ¶¨Òå×Ô¼ºµÄºó׺

ÏÈÇå³þĬÈϺó׺£¬ºó¶¨Òå×Ô¼ºµÄºó׺ÁÐ±í¡£

makeµÄ²ÎÊý"-r"»ò"-no-builtin-rules"Ò²»áʹÓõÃĬÈϵĺó׺ÁбíΪ¿Õ¡£¶ø±äÁ¿"SUFFIXE"±»ÓÃÀ´¶¨ÒåĬÈϵĺó׺ÁÐ±í£¬Äã¿ÉÒÔÓÃ".SUFFIXES"À´¸Ä±äºó׺ÁÐ±í£¬µ«Çë²»Òª¸Ä±ä±äÁ¿"SUFFIXE"µÄÖµ¡£

Æß¡¢Òþº¬¹æÔòËÑË÷Ëã·¨

±ÈÈçÎÒÃÇÓÐÒ»¸öÄ¿±ê½Ð T¡£ÏÂÃæÊÇËÑË÷Ä¿±êTµÄ¹æÔòµÄËã·¨¡£Çë×¢Ò⣬ÔÚÏÂÃæ£¬ÎÒÃÇûÓÐÌáµ½ºó׺¹æÔò£¬Ô­ÒòÊÇ£¬ËùÓеĺó׺¹æÔòÔÚMakefile±»ÔØÈëÄÚ´æÊ±£¬»á±»×ª»»³Éģʽ¹æÔò¡£Èç¹ûÄ¿±êÊÇ"archive(member)"µÄº¯Êý¿âÎļþģʽ£¬ÄÇôÕâ¸öËã·¨»á±»ÔËÐÐÁ½´Î£¬µÚÒ»´ÎÊÇÕÒÄ¿±êT£¬Èç¹ûûÓÐÕÒµ½µÄ»°£¬ÄÇô½øÈëµÚ¶þ´Î£¬µÚ¶þ´Î»á°Ñ"member"µ±×÷TÀ´ËÑË÷¡£

1¡¢°ÑTµÄĿ¼²¿·Ö·ÖÀë³öÀ´¡£½ÐD£¬¶øÊ£Óಿ·Ö½ÐN¡££¨È磺Èç¹ûTÊÇ"src/foo.o"£¬ÄÇô£¬D¾ÍÊÇ"src/"£¬N¾ÍÊÇ"foo.o"£©

2¡¢´´½¨ËùÓÐÆ¥ÅäÓÚT»òÊÇNµÄģʽ¹æÔòÁÐ±í¡£

3¡¢Èç¹ûÔÚģʽ¹æÔòÁбíÖÐÓÐÆ¥ÅäËùÓÐÎļþµÄģʽ£¬Èç"%"£¬ÄÇô´ÓÁбíÖÐÒÆ³ýÆäËüµÄģʽ¡£

4¡¢ÒƳýÁбíÖÐûÓÐÃüÁîµÄ¹æÔò¡£

5¡¢¶ÔÓÚµÚÒ»¸öÔÚÁбíÖеÄģʽ¹æÔò£º

1£©ÍƵ¼Æä"¾¥"S£¬SÓ¦¸ÃÊÇT»òÊÇNÆ¥ÅäÓÚģʽÖÐ"%"·Ç¿ÕµÄ²¿·Ö¡£

2£©¼ÆËãÒÀÀµÎļþ¡£°ÑÒÀÀµÎļþÖеÄ"%"¶¼Ìæ»»³É"¾¥"S¡£Èç¹ûÄ¿±êģʽÖÐûÓаüº¬Ð±¿ò×Ö·û£¬¶ø°ÑD¼ÓÔÚµÚÒ»¸öÒÀÀµÎļþµÄ¿ªÍ·¡£

3£©²âÊÔÊÇ·ñËùÓеÄÒÀÀµÎļþ¶¼´æÔÚ»òÊÇÀíµ±´æÔÚ¡££¨Èç¹ûÓÐÒ»¸öÎļþ±»¶¨Òå³ÉÁíÍâÒ»¸ö¹æÔòµÄÄ¿±êÎļþ£¬»òÕßÊÇÒ»¸öÏÔʽ¹æÔòµÄÒÀÀµÎļþ£¬ÄÇôÕâ¸öÎļþ¾Í½Ð"Àíµ±´æÔÚ"£©

4£©Èç¹ûËùÓеÄÒÀÀµÎļþ´æÔÚ»òÊÇÀíµ±´æÔÚ£¬»òÊǾÍûÓÐÒÀÀµÎļþ¡£ÄÇôÕâÌõ¹æÔò½«±»²ÉÓã¬Í˳ö¸ÃËã·¨¡£

6¡¢Èç¹û¾­¹ýµÚ5²½£¬Ã»ÓÐģʽ¹æÔò±»ÕÒµ½£¬ÄÇô¾Í×ö¸ü½øÒ»²½µÄËÑË÷¡£¶ÔÓÚ´æÔÚÓÚÁбíÖеĵÚÒ»¸öģʽ¹æÔò£º

1£©Èç¹û¹æÔòÊÇÖÕÖ¹¹æÔò£¬ÄǾͺöÂÔËü£¬¼ÌÐøÏÂÒ»Ìõģʽ¹æÔò¡£

2£©¼ÆËãÒÀÀµÎļþ¡££¨Í¬µÚ5²½£©

3£©²âÊÔËùÓеÄÒÀÀµÎļþÊÇ·ñ´æÔÚ»òÊÇÀíµ±´æÔÚ¡£

4£©¶ÔÓÚ²»´æÔÚµÄÒÀÀµÎļþ£¬µÝ¹éµ÷ÓÃÕâ¸öËã·¨²éÕÒËûÊÇ·ñ¿ÉÒÔ±»Òþº¬¹æÔòÕÒµ½¡£

5£©Èç¹ûËùÓеÄÒÀÀµÎļþ´æÔÚ»òÊÇÀíµ±´æÔÚ£¬»òÊǾ͸ù±¾Ã»ÓÐÒÀÀµÎļþ¡£ÄÇôÕâÌõ¹æÔò±»²ÉÓã¬Í˳ö¸ÃËã·¨¡£

7¡¢Èç¹ûûÓÐÒþº¬¹æÔò¿ÉÒÔʹÓ㬲鿴".DEFAULT"¹æÔò£¬Èç¹ûÓУ¬²ÉÓ㬰Ñ".DEFAULT"µÄÃüÁî¸øTʹÓá£

Ò»µ©¹æÔò±»ÕÒµ½£¬¾Í»áÖ´ÐÐÆäÏ൱µÄÃüÁ¶ø´Ëʱ£¬ÎÒÃǵÄ×Ô¶¯»¯±äÁ¿µÄÖµ²Å»áÉú³É¡£

ʹÓÃmake¸üк¯Êý¿âÎļþ

º¯Êý¿âÎļþÒ²¾ÍÊǶÔObjectÎļþ£¨³ÌÐò±àÒëµÄÖмäÎļþ£©µÄ´ò°üÎļþ¡£ÔÚUnixÏ£¬Ò»°ãÊÇÓÉÃüÁî"ar"À´Íê³É´ò°ü¹¤×÷¡£

Ò»¡¢º¯Êý¿âÎļþµÄ³ÉÔ±

Ò»¸öº¯Êý¿âÎļþÓɶà¸öÎļþ×é³É¡£Äã¿ÉÒÔÒÔÈçϸñʽָ¶¨º¯Êý¿âÎļþ¼°Æä×é³É£º

archive(member)

Õâ¸ö²»ÊÇÒ»¸öÃüÁ¶øÒ»¸öÄ¿±êºÍÒÀÀµµÄ¶¨Òå¡£Ò»°ãÀ´Ëµ£¬ÕâÖÖÓ÷¨»ù±¾ÉϾÍÊÇΪÁË"ar"ÃüÁîÀ´·þÎñµÄ¡£È磺

foolib(hack.o) : hack.o

ar cr foolib hack.o

Èç¹ûÒªÖ¸¶¨¶à¸ömember£¬ÄǾÍÒÔ¿Õ¸ñ·Ö¿ª£¬È磺

foolib(hack.o kludge.o)

ÆäµÈ¼ÛÓÚ£º

foolib(hack.o) foolib(kludge.o)

Ä㻹¿ÉÒÔʹÓÃShellµÄÎļþͨÅä·ûÀ´¶¨Ò壬È磺

foolib(*.o)

¶þ¡¢º¯Êý¿â³ÉÔ±µÄÒþº¬¹æÔò

µ± makeËÑË÷Ò»¸öÄ¿±êµÄÒþº¬¹æÔòʱ£¬Ò»¸öÌØÊâµÄÌØÐÔÊÇ£¬Èç¹ûÕâ¸öÄ¿±êÊÇ"a(m)"ÐÎʽµÄ£¬Æä»á°ÑÄ¿±ê±ä³É"(m)"¡£ÓÚÊÇ£¬Èç¹ûÎÒÃǵijÉÔ±ÊÇ"%.o" µÄģʽ¶¨Ò壬²¢ÇÒÈç¹ûÎÒÃÇʹÓÃ"makefoo.a(bar.o)"µÄÐÎʽµ÷ÓÃMakefileʱ£¬Òþº¬¹æÔò»áÈ¥ÕÒ"bar.o"µÄ¹æÔò£¬Èç¹ûûÓж¨Òåbar.oµÄ¹æÔò£¬ÄÇôÄÚ½¨Òþº¬¹æÔòÉúЧ£¬make»áÈ¥ÕÒbar.cÎļþÀ´Éú³Ébar.o£¬Èç¹ûÕҵõ½µÄ»°£¬makeÖ´ÐеÄÃüÁî´óÖÂÈçÏ£º

cc -c bar.c -o bar.o

ar r foo.a bar.o

rm -f bar.o

»¹ÓÐÒ»¸ö±äÁ¿Òª×¢ÒâµÄÊÇ"$%"£¬ÕâÊÇרÊôº¯Êý¿âÎļþµÄ×Ô¶¯»¯±äÁ¿£¬ÓÐ¹ØÆä˵Ã÷Çë²Î¼û"×Ô¶¯»¯±äÁ¿"Ò»½Ú¡£

Èý¡¢º¯Êý¿âÎļþµÄºó׺¹æÔò

Äã¿ÉÒÔʹÓÃ"ºó׺¹æÔò"ºÍ"Òþº¬¹æÔò"À´Éú³Éº¯Êý¿â´ò°üÎļþ£¬È磺

.c.a:

$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o

$(AR) r $@ $*.o

$(RM) $*.o

ÆäµÈЧÓÚ£º

(%.o) : %.c

$(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $*.o

$(AR) r $@ $*.o

$(RM) $*.o

ËÄ¡¢×¢ÒâÊÂÏî

ÔÚ½øÐк¯Êý¿â´ò°üÎļþÉú³Éʱ£¬ÇëСÐÄʹÓÃmakeµÄ²¢ÐлúÖÆ£¨"-j"²ÎÊý£©¡£Èç¹û¶à¸öarÃüÁîÔÚͬһʱ¼äÔËÐÐÔÚͬһ¸öº¯Êý¿â´ò°üÎļþÉÏ£¬¾ÍºÜÓпÉÒÔËð»µÕâ¸öº¯Êý¿âÎļþ¡£ËùÒÔ£¬ÔÚmakeδÀ´µÄ°æ±¾ÖУ¬Ó¦¸ÃÌṩһÖÖ»úÖÆÀ´±ÜÃâ²¢ÐвÙ×÷·¢ÉúÔÚº¯Êý´ò°üÎļþÉÏ¡£

µ«¾ÍĿǰ¶øÑÔ£¬Ä㻹ÊÇÓ¦¸Ã²»Òª¾¡Á¿²»ÒªÊ¹ÓÃ"-j"²ÎÊý¡£

ºóÐò

ÖÕÓÚµ½Ð´½áÊøÓïµÄʱºòÁË£¬ÒÔÉÏ»ù±¾ÉϾÍÊÇGNU makeµÄMakefileµÄËùÓÐϸ½ÚÁË¡£ÆäËüµÄ²úÉ̵Ämake»ù±¾ÉÏÒ²¾ÍÊÇÕâÑùµÄ£¬ÎÞÂÛʲôÑùµÄmake£¬¶¼ÊÇÒÔÎļþµÄÒÀÀµÐÔΪ»ù´¡µÄ£¬Æä»ù±¾ÊǶ¼ÊÇ×ñÑ­Ò»¸ö±ê×¼µÄ¡£ÕâÆªÎĵµÖÐ80%µÄ¼¼Êõϸ½Ú¶¼ÊÊÓÃÓÚÈκεÄmake£¬ÎҲ²â"º¯Êý"ÄÇÒ»ÕµÄÄÚÈÝ¿ÉÄܲ»ÊÇÆäËümakeËùÖ§³ÖµÄ£¬¶øÒþº¬¹æÔò·½Ã棬ÎÒÏ벻ͬµÄmake»áÓв»Í¬µÄʵÏÖ£¬ÎÒûÓо«Á¦À´²é¿´GNUµÄmakeºÍVCµÄnmake¡¢BCBµÄmake£¬»òÊDZðµÄUNIXϵÄmakeÓÐЩʲôÑùµÄ²î±ð£¬Ò»ÊÇʱ¼ä¾«Á¦²»¹»£¬¶þÊÇÒòΪÎÒ»ù±¾É϶¼ÊÇÔÚUnixÏÂʹÓÃmake£¬ÒÔǰÔÚSCOUnixºÍIBMµÄAIX£¬ÏÖÔÚÔÚLinux¡¢Solaris¡¢HP-UX¡¢AIXºÍAlphaÏÂʹÓã¬LinuxºÍSolarisϸü¶àÒ»µã¡£²»¹ý£¬ÎÒ¿ÉÒԿ϶¨µÄÊÇ£¬ÔÚUnixϵÄmake£¬ÎÞÂÛÊÇÄÄÖÖÆ½Ì¨£¬¼¸ºõ¶¼Ê¹ÓÃÁËRichard Stallman¿ª·¢µÄmakeºÍcc/gccµÄ±àÒëÆ÷£¬¶øÇÒ£¬»ù±¾É϶¼ÊÇGNUµÄmake£¨¹«Ë¾ÀïËùÓеÄUNIX»úÆ÷É϶¼±»×°ÉÏÁËGNUµÄ¶«Î÷£¬ËùÒÔ£¬Ê¹ÓÃGNUµÄ³ÌÐòÒ²¾Í¶àÁËһЩ£©¡£GNUµÄ¶«Î÷»¹ÊǺܲ»´íµÄ£¬ÌرðÊÇʹÓõÃÉîÁËÒÔºó£¬Ô½À´Ô½¾õµÃGNUµÄÈí¼þµÄÇ¿´ó£¬Ò²Ô½À´Ô½¾õµÃGNUµÄÔÚ²Ù×÷ϵͳÖУ¨Ö÷ÒªÊÇUnix£¬ÉõÖÁWindows£©"ɱÉËÁ¦"¡£

¶ÔÓÚÉÏÊöËùÓеÄmakeµÄϸ½Ú£¬ÎÒÃDz»µ«¿ÉÒÔÀûÓÃmakeÕâ¸ö¹¤¾ßÀ´±àÒëÎÒÃǵijÌÐò£¬»¹¿ÉÒÔÀûÓÃmakeÀ´Íê³ÉÆäËüµÄ¹¤×÷£¬ÒòΪ¹æÔòÖеÄÃüÁî¿ÉÒÔÊÇÈκÎShell֮ϵÄÃüÁËùÒÔ£¬ÔÚUnixÏ£¬Äã²»Ò»¶¨Ö»ÊÇʹÓóÌÐòÓïÑԵıàÒëÆ÷£¬Ä㻹¿ÉÒÔÔÚMakefileÖÐÊéдÆäËüµÄÃüÁÈ磺tar¡¢awk¡¢mail¡¢sed¡¢cvs¡¢compress¡¢ls¡¢rm¡¢yacc¡¢rpm¡¢ ftp¡­¡­µÈµÈ£¬µÈµÈ£¬À´Íê³ÉÖîÈç"³ÌÐò´ò°ü"¡¢"³ÌÐò±¸·Ý"¡¢"ÖÆ×÷³ÌÐò°²×°°ü"¡¢"Ìá½»´úÂë"¡¢"ʹÓóÌÐòÄ£°å"¡¢"ºÏ²¢Îļþ"µÈµÈÎ廨°ËÃŵŦÄÜ£¬Îļþ²Ù×÷£¬Îļþ¹ÜÀí£¬±à³Ì¿ª·¢Éè¼Æ£¬»òÊÇÆäËüһЩÒìÏëÌ쿪µÄ¶«Î÷¡£±ÈÈ磬ÒÔǰÔÚÊéÐ´ÒøÐн»Ò׳ÌÐòʱ£¬ÓÉÓÚÒøÐеĽ»Ò׳ÌÐò»ù±¾Ò»Ñù£¬¾Í¼ûµ½ÓÐÈËÊéдÁËһЩ½»Ò×µÄͨÓóÌÐòÄ£°å£¬ÔÚ¸ÃÄ£°åÖаÑÒ»Ð©ÍøÂçͨѶ¡¢Êý¾Ý¿â²Ù×÷µÄ¡¢ÒµÎñ²Ù×÷¹²ÐԵĶ«Î÷дÔÚÒ»¸öÎļþÖУ¬ÔÚÕâЩÎļþÖÐÓÃЩÖîÈç"@@@N¡¢###N"Ææ¹Ö×Ö´®±êעһЩλÖã¬È»ºóÊéд½»Ò×ʱ£¬Ö»Ðè°´ÕÕÒ»ÖÖÌØ¶¨µÄ¹æÔòÊéÐ´ÌØ¶¨µÄ´¦Àí£¬×îºóÔÚmakeʱ£¬Ê¹ÓÃawkºÍsed£¬°ÑÄ£°åÖеÄ"@@@N¡¢###N"µÈ×Ö´®Ìæ´ú³ÉÌØ¶¨µÄ³ÌÐò£¬ÐγÉCÎļþ£¬È»ºóÔÙ±àÒë¡£Õâ¸ö¶¯×÷ºÜÏñÊý¾Ý¿âµÄ"À©Õ¹C"ÓïÑÔ£¨¼´ÔÚCÓïÑÔÖÐÓÃ"EXEC¡¡SQL"µÄÑù×ÓÖ´ÐÐSQLÓï¾ä£¬ÔÚÓà cc/gcc±àÒë֮ǰ£¬ÐèҪʹÓÃ"À©Õ¹C"µÄ·­Òë³ÌÐò£¬Èçcpre£¬°ÑÆä·­Òë³É±ê×¼C£©¡£Èç¹ûÄãÔÚʹÓÃmakeʱÓÐһЩ¸üΪ¾øÃîµÄ·½·¨£¬Çë¼ÇµÃ¸æËßÎÒ°¡¡£

»ØÍ·¿´¿´ÕûƪÎĵµ£¬²»¾õ¼ÇÆð¼¸Äêǰ¸Õ¸Õ¿ªÊ¼ÔÚUnixÏÂ×ö¿ª·¢µÄʱºò£¬ÓÐÈËÎÊÎһ᲻»áдMakefileʱ£¬ÎÒÁ½ÑÛ·¢Ö±£¬¸ù±¾²»ÖªµÀÔÚ˵ʲô¡£Ò»¿ªÊ¼¿´µ½±ðÈËÔÚviÖÐдÍê³ÌÐòºóÊäÈë"!make"ʱ£¬»¹ÒÔΪÊÇviµÄ¹¦ÄÜ£¬ºóÀ´²ÅÖªµÀÓÐÒ»¸öMakefileÔÚ×÷¹Ö£¬ÓÚÊÇÉÏÍø²é°¡²é£¬ÄÇʱÓÖ²»Ô¸Òâ¿´Ó¢ÎÄ£¬·¢Ï־͸ù±¾Ã»ÓÐÖÐÎĵÄÎĵµ½éÉÜMakefile£¬Ö»µÃ¿´±ðÈËдµÄMakefile£¬×Ô¼ºÏ¹ÅöϹ¸ã²Å»ýÀÛÁËÒ»µã֪ʶ£¬µ«ÔÚºÜ¶àµØ·½ÍêÈ«ÊÇÖªÆäÈ»²»ÖªËùÒÔÈ»¡£ºóÀ´¿ªÊ¼´ÓÊÂUNIXϲúÆ·Èí¼þµÄ¿ª·¢£¬¿´µ½Ò»¸ö400ÈËÄ꣬½ü200ÍòÐдúÂëµÄ´ó¹¤³Ì£¬·¢ÏÖÒª±àÒëÕâÑùÒ»¸öÅÓÈ»´óÎÈç¹ûûÓÐMakefile£¬ÄÇ»áÊǶàô¿Ö²ÀµÄÒ»Ñùʰ¡¡£ÓÚÊǺáÏÂÐÄÀ´£¬ºÝÃüµØ¶ÁÁËÒ»¶ÑÓ¢ÎÄÎĵµ£¬²Å¾õµÃ¶ÔÆäÕÆÎÕÁË¡£µ«·¢ÏÖÄ¿Ç°ÍøÉ϶ÔMakefile½éÉܵÄÎÄÕ»¹ÊÇÉÙµÃÄÇôµÄ¿ÉÁ¯£¬ËùÒÔÏëдÕâÑùһƪÎÄÕ£¬¹²Ïí¸ø´ó¼Ò£¬Ï£ÍûÄܶԸ÷λÓÐËù°ïÖú¡£

   
3128 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì