锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美不卡视频一区,亚洲激情自拍,欧美高清成人http://m.shnenglu.com/liu1061/category/7456.html鐢熸椿鍜屽伐浣滈兘瑕佸厖婊℃縺鎯?鍚﹀垯浣犳棤娉曚綋浼氬埌娣嬫紦灝借嚧鐨勫揩涔愪笌鐥涜嫤zh-cnSat, 28 Jun 2008 14:45:53 GMTSat, 28 Jun 2008 14:45:53 GMT60makefile info!http://m.shnenglu.com/liu1061/articles/54848.htmlT.S LiuT.S LiuFri, 27 Jun 2008 16:05:00 GMThttp://m.shnenglu.com/liu1061/articles/54848.htmlhttp://m.shnenglu.com/liu1061/comments/54848.htmlhttp://m.shnenglu.com/liu1061/articles/54848.html#Feedback0http://m.shnenglu.com/liu1061/comments/commentRss/54848.htmlhttp://m.shnenglu.com/liu1061/services/trackbacks/54848.html
Make宸ョ▼綆$悊鍣?br>鍒版涓烘錛岃鑰呭凡浜嗚В浜嗗浣曞湪Linux涓嬩嬌鐢ㄧ紪杈戝櫒緙栧啓浠g爜錛屽浣曚嬌鐢℅cc鎶婁唬鐮佺紪璇戞垚鍙墽琛屾枃妗o紝榪樺涔犱簡濡備綍浣跨敤Gdb鏉ヨ皟璇曠▼寮忥紝閭d箞錛屼換浣曠殑宸ヤ綔鐪嬩技宸插畬鎴愪簡錛屼負浠涔堣繕闇瑕丮ake榪欎釜宸ョ▼綆$悊鍣ㄥ憿錛?br>鎵璋撳伐紼嬬鐞嗗櫒錛岄【鍚嶆濅箟錛屾槸鎸囩鐞嗚緝澶氱殑鏂囨。鐨勩傝鑰呰兘澶熻瘯鎯充竴涓嬶紝鏈変竴涓笂鐧句釜鏂囨。鐨勪唬鐮佹瀯鎴愮殑欏圭洰錛屽亣濡傚叾涓彧鏈変竴涓垨灝戞暟鍑犱釜鏂囨。榪涜浜嗕慨鏀癸紝鎸夌収涔嬪墠鎵瀛︾殑Gcc緙栬瘧宸ュ叿錛屽氨涓嶅緱涓嶆妸榪欎換浣曠殑鏂囨。閲嶆柊緙栬瘧涓閬嶏紝鍥犱負緙栬瘧鍣ㄥ茍涓嶇煡閬撳摢浜涙枃妗f槸鏈榪戞洿鏂扮殑錛岃屽彧鐭ラ亾闇瑕佸寘鍚繖浜涙枃妗f墠鑳芥妸婧愪唬鐮佺紪璇戞垚鍙墽琛屾枃妗o紝浜庢槸錛岀▼寮忓憳灝變笉鑳戒笉鍐嶉噸鏂拌緭鍏ユ暟鐩姝ゅ簽澶х殑鏂囨。鍚嶄互瀹屾垚鏈鍚庣殑緙栬瘧宸ヤ綔銆?br>浣嗘槸錛岃璇昏呬粩緇嗗洖鎯充竴涓嬫湰涔﹀湪3.1.2鑺?br>涓墍闃愯堪鐨勭紪璇戣繃紼嬶紝緙栬瘧榪囩▼鏄垎涓虹紪璇戙佹眹緙栥侀摼鎺ヤ笉鍚岄樁孌電殑錛屽叾涓紪璇戦樁孌典粎媯鏌ヨ娉曢敊璇繛鍚屽嚱鏁板拰鍙橀噺鐨勫0鏄庢槸鍚︽紜0鏄庝簡錛屽湪閾炬帴闃舵鍒欎富瑕佸畬鎴?br>鏄嚱鏁伴摼鎺ュ拰鍏ㄥ眬鍙橀噺鐨勯摼鎺ャ傚洜姝わ紝閭d簺娌℃湁鏀瑰彉鐨勬簮浠g爜鏍規湰鏃犻渶閲嶆柊緙栬瘧錛岃屽彧瑕佹妸浠栦滑閲嶆柊閾炬帴榪涘幓灝辮兘澶熶簡銆傛墍浠ワ紝浜轟滑灝卞笇鏈涙湁涓涓伐紼嬬鐞嗗櫒鑳藉
鑷姩璇嗗埆鏇存柊浜嗙殑鏂囨。浠g爜錛屽悓鏃跺張鏃犻渶閲嶅杈撳叆鍐楅暱鐨勫懡浠よ錛岃繖鏍鳳紝Make宸ョ▼綆$悊鍣ㄤ篃灝卞簲榪愯岀敓浜嗐?br>瀹為檯涓婏紝Make宸ョ▼綆$悊鍣ㄤ篃灝辨槸涓?#8220;鑷姩緙栬瘧綆$悊鍣?#8221;錛岃繖閲岀殑“鑷姩”鏄寚浠栬兘澶熸牴鎹枃妗f椂闂存埑鑷姩鍙戠幇鏇存柊榪囩殑鏂囨。鑰屽噺灝戠紪璇戠殑宸ヤ綔閲忥紝鍚屾椂錛屼粬閫氳繃璇誨叆Makefile鏂囨。鐨勫唴瀹規潵鎵ц澶ч噺鐨勭紪璇戝伐浣溿傜敤鎴峰彧闇緙栧啓涓嬈$畝鍗曠殑緙栬瘧璇彞灝辮兘澶熶簡銆備粬澶уぇ鎻愰珮浜嗗疄闄呴」鐩殑宸ヤ綔鏁堢巼錛岃屼笖鍑犱箮浠諱綍Linux涓嬬殑欏圭洰緙栫▼鍧囦細娑夊強鍒頒粬錛屽笇鏈涜鑰呰兘澶熻鐪熷涔犳湰鑺傚唴瀹廣?br>3.6.1  Makefile鍩烘湰緇撴瀯
Makefile鏄疢ake璇誨叆鐨勬儫涓閰嶇疆鏂囨。錛屽洜姝ゆ湰鑺傜殑鍐呭瀹為檯灝辨槸璁茶堪Makefile鐨勭紪鍐欒鍒欍傚湪涓涓狹akefile涓氬父鍖呭惈濡備笅鍐呭錛?br>·  闇瑕佺敱make宸ュ叿鍒涘緩鐨勭洰鏍囦綋錛坱arget錛夛紝閫氬父鏄洰鏍囨枃妗f垨鍙墽琛屾枃妗o紱
·  瑕佸垱寤虹殑鐩爣浣撴墍渚濊禆鐨勬枃妗o紙dependency_file錛夛紱
·  鍒涘緩姣忎釜鐩爣浣撴椂闇瑕佽繍琛岀殑鍛戒護錛坈ommand錛夈?br>浠栫殑鏍煎紡涓猴細

target: dependency_files
       command

渚嬪錛屾湁涓や釜鏂囨。鍒嗗埆涓篽ello.c鍜宧ello.h錛屽垱寤虹殑鐩爣浣撲負hello.o錛屾墽琛岀殑鍛戒護涓篻cc緙栬瘧鎸囦護錛歡cc –c hello.c錛岄偅涔堬紝瀵瑰簲鐨凪akefile灝辮兘澶熷啓涓猴細

#The simplest example
hello.o: hello.c hello.h
       gcc –c hello.c –o hello.o

鎺ョ潃灝辮兘澶熶嬌鐢╩ake浜嗐備嬌鐢╩ake鐨勬牸寮忎負錛歮ake target錛岃繖鏍穖ake灝變細鑷姩璇誨叆Makefile錛堜篃鑳藉鏄瀛楁瘝灝忓啓makefile錛夊茍鎵ц瀵瑰簲target鐨刢ommand璇彞錛屽茍浼氭壘鍒扮浉搴旂殑渚濊禆鏂囨。銆傚涓嬫墍紺猴細

[root@localhost makefile]# make hello.o
gcc –c hello.c –o hello.o
[root@localhost makefile]# ls
hello.c  hello.h  hello.o  Makefile

鑳藉鐪嬪埌錛孧akefile鎵ц浜?#8220;hello.o”瀵瑰簲鐨勫懡浠よ鍙ワ紝騫剁敓鎴愪簡“hello.o”鐩爣浣撱?br>

娉ㄦ剰
鍦∕akefile涓殑姣忎竴涓猚ommand鍓嶅繀欏繪湁“Tab”絎︼紝鍚﹀垯鍦ㄨ繍琛宮ake鍛戒護鏃朵細鍑洪敊銆?br>3.6.2  Makefile鍙橀噺
涓婇潰紺轟緥鐨凪akefile鍦ㄥ疄闄呬腑鏄嚑涔庝笉瀛樺湪鐨勶紝鍥犱負浠栬繃浜庣畝鍗曪紝浠呭寘鍚袱涓枃妗e拰涓涓懡浠わ紝鍦ㄨ繖縐嶆儏鍐典笅瀹屽叏涓嶅繀瑕佺紪鍐橫akefile鑰屽彧闇鍦⊿hell涓洿鎺ヨ緭鍏ュ嵆鍙紝鍦ㄥ疄闄呬腑浣跨敤鐨凪akefile寰寰鏄寘鍚緢澶氱殑鏂囨。鍜屽懡浠ょ殑錛岃繖涔熸槸Makefile浜х敓鐨勫師鍥犮備笅闈㈠氨鍙粰鍑虹◢寰鏉備竴浜涚殑Makefile榪涜璁茶В錛?br>
sunq:kang.o yul.o
Gcc kang.o bar.o -o myprog
kang.o : kang.c kang.h head.h
Gcc –Wall –O -g –c kang.c -o kang.o
yul.o : bar.c head.h
Gcc - Wall –O -g –c yul.c -o yul.o

鍦ㄨ繖涓狹akefile涓湁涓変釜鐩爣浣擄紙target錛夛紝鍒嗗埆涓簊unq銆乲ang.o鍜寉ul.o錛屽叾涓涓涓洰鏍囦綋鐨勪緷璧栨枃妗e氨鏄悗涓や釜鐩爣浣撱傚亣濡傜敤鎴蜂嬌鐢ㄥ懡浠?#8220;make sunq”錛屽垯make綆$悊鍣ㄥ氨鏄壘鍒皊unq鐩爣浣撳紑濮嬫墽琛屻?br>榪欐椂錛宮ake浼氳嚜鍔ㄦ鏌ョ浉鍏蟲枃妗g殑鏃墮棿鎴熾傞鍏堬紝鍦ㄦ鏌?#8220;kang.o”銆?#8220;yul.o”鍜?#8220;sunq”涓変釜鏂囨。鐨勬椂闂存埑涔嬪墠錛屼粬浼氬悜涓嬫煡鎵鵑偅浜涙妸“kang.o”鎴?#8220;yul.o”鍋氫負鐩爣鏂囨。鐨勬椂闂存埑銆傛瘮濡傦紝“kang.o”鐨勪緷璧栨枃妗d負錛?#8220;kang.c”銆?#8220;kang.h”銆?#8220;head.h”銆傚亣濡傝繖浜涙枃妗d腑浠諱綍涓涓殑鏃墮棿鎴蟲瘮“kang.o”鏂幫紝鍒欏懡浠?#8220;gcc –Wall –O -g –c kang.c -o kang.o”灝嗕細鎵ц錛屼粠鑰屾洿鏂版枃妗?#8220;kang.o”銆傚湪鏇存柊瀹?#8220;kang.o”鎴?#8220;yul.o”涔嬪悗錛宮ake浼氭鏌ユ渶鍒濈殑“kang.o”銆?#8220;yul.o”鍜?#8220;sunq”涓変釜鏂囨。錛屽彧瑕佹枃妗?#8220;kang.o”鎴?#8220;yul.o”涓殑浠繪瘮鏂囨。鏃墮棿鎴蟲瘮“sunq”鏂幫紝鍒欑浜岃鍛戒護灝變細琚墽琛屻傝繖鏍鳳紝make灝卞畬鎴愪簡鑷姩媯鏌ユ椂闂存埑鐨勫伐浣滐紝寮濮嬫墽琛岀紪璇戝伐浣溿傝繖涔熷氨鏄疢ake宸ヤ綔鐨勫熀鏈祦紼嬨?br>鎺ヤ笅鏉ワ紝涓轟簡榪涗竴姝ョ畝鍖栫紪杈戝拰緇存姢Makefile錛宮ake鍏佽鍦∕akefile涓垱寤哄拰浣跨敤鍙橀噺銆傚彉閲忔槸鍦∕akefile涓畾涔夌殑鍚嶅瓧錛岀敤鏉ヤ唬鏇夸竴涓枃鏈瓧絎︿覆錛岃鏂囨湰瀛楃涓茬О涓鴻鍙橀噺鐨勫箋傚湪鍏蜂綋闇瑕佷笅錛岃繖浜涘艱兘澶熶唬鏇跨洰鏍囦綋銆佷緷璧栨枃妗c佸懡浠よ繛鍚宮akefile鏂囨。涓叾浠栭儴鍒嗐傚湪Makefile涓殑鍙橀噺瀹氫箟鏈変袱縐嶆柟寮忥細涓縐嶆槸閫掑綊灞曞紑鏂瑰紡錛屽彟涓縐嶆槸綆鍗曟柟寮忋?br>閫掑綊灞曞紑鏂瑰紡瀹氫箟鐨勫彉閲忔槸鍦ㄥ紩鐢ㄥ湪璇ュ彉閲忔椂榪涜鏇挎崲鐨勶紝鍗沖亣濡傝鍙橀噺鍖呭惈浜嗗鍏朵粬鍙橀噺鐨勫簲鐢紝鍒欏湪寮曠敤璇ュ彉閲忔椂涓嬈℃у皢鍐呭祵鐨勫彉閲忓叏閮ㄥ睍寮錛岃櫧鐒惰繖縐嶇被鍨嬬殑鍙橀噺鑳藉寰堝ソ鍦板畬鎴愮敤鎴風殑鎸囦護錛屼絾鏄粬涔熸湁涓ラ噸鐨勭己鐐癸紝濡備笉鑳藉湪鍙橀噺鍚庤拷鍔犲唴瀹癸紙鍥犱負璇彞錛欳FLAGS = $(CFLAGS) -O鍦ㄥ彉閲忔墿灞曡繃紼嬩腑鍙兘瀵艱嚧鏃犵┓寰幆錛夈?br>涓轟簡閬垮厤涓婅堪闂錛岀畝鍗曟墿灞曞瀷鍙橀噺鐨勫煎湪瀹氫箟澶勫睍寮錛屽茍涓斿彧灞曞紑涓嬈★紝鍥犳浠栦笉鍖呭惈浠諱綍瀵瑰叾浠栧彉閲忕殑寮曠敤錛屼粠鑰屾秷闄ゅ彉閲忕殑宓屽寮曠敤銆?br>閫掑綊灞曞紑鏂瑰紡鐨勫畾涔夋牸寮忎負錛歏AR=var
綆鍗曟墿灞曟柟寮忕殑瀹氫箟鏍煎紡涓猴細VAR錛?var
Make涓殑鍙橀噺浣跨敤鍧囦嬌鐢ㄦ牸寮忎負錛?(VAR)


娉ㄦ剰
鍙橀噺鍚嶆槸涓嶅寘鎷?#8220;:”銆?#8220;#”銆?#8220;=”緇撳熬絀烘牸鐨勪換浣曞瓧絎︿覆銆傚悓鏃訛紝鍙橀噺鍚嶄腑鍖呭惈瀛楁瘝銆佹暟瀛楄繛鍚屼笅鍒掔嚎浠ュ鐨勬儏鍐靛簲灝介噺閬垮厤錛屽洜涓轟粬浠彲鑳藉湪灝嗘潵琚祴浜堢壒鍒殑鍚箟銆?br>鍙橀噺鍚嶆槸澶у皬鍐欐晱鎰熺殑錛屼緥濡傚彉閲忓悕“foo”銆?#8220;FOO”銆佸拰“Foo”浠h〃涓嶅悓鐨勫彉閲忋?br>鎺ㄨ崘鍦╩akefile鍐呴儴浣跨敤灝忓啓瀛楁瘝浣滀負鍙橀噺鍚嶏紝棰勭暀澶у啓瀛楁瘝浣滀負鎺у埗闅愬惈瑙勫垯鍙傛暟鎴栫敤鎴烽噸杞藉懡浠ら夐」鍙傛暟鐨勫彉閲忓悕銆?br>
涓嬮潰緇欏嚭浜嗕笂渚嬩腑鐢ㄥ彉閲忔浛鎹慨鏀瑰悗鐨凪akefile錛岃繖閲岀敤OBJS浠f浛kang.o鍜寉ul.o錛岀敤CC浠f浛Gcc錛岀敤CFLAGS浠f浛“-Wall -O –g”銆傝繖鏍峰湪浠ュ悗淇敼鏃訛紝灝辮兘澶熷彧淇敼鍙橀噺瀹氫箟錛岃屾棤闇淇敼涓嬮潰鐨勫畾涔夊疄浣擄紝浠庤屽ぇ澶х畝鍖栦簡Makefile緇存姢鐨勫伐浣滈噺銆?br>緇忓彉閲忔浛鎹㈠悗鐨凪akefile濡備笅鎵紺猴細

OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
       $(CC) $(OBJS) -o sunq
kang.o : kang.c kang.h
       $(CC) $(CFLAGS) -c kang.c -o kang.o
yul.o : yul.c yul.h
       $(CC) $(CFLAGS) -c yul.c -o yul.o

鑳藉鐪嬪埌錛屾澶勫彉閲忔槸浠ラ掑綊灞曞紑鏂瑰紡瀹氫箟鐨勩?br>Makefile涓殑鍙橀噺鍒嗕負鐢ㄦ埛鑷畾涔夊彉閲忋侀瀹氫箟鍙橀噺銆佽嚜鍔ㄥ彉閲忓強鐜鍙橀噺銆傚涓婁緥涓殑OBJS灝辨槸鐢ㄦ埛鑷畾涔夊彉閲忥紝鑷畾涔夊彉閲忕殑鍊肩敱鐢ㄦ埛鑷璁懼畾錛岃岄瀹氫箟鍙橀噺鍜岃嚜鍔ㄥ彉閲忎負閫氬父鍦∕akefile閮戒細鍑虹幇鐨勫彉閲忥紝鍏朵腑閮ㄥ垎鏈夐粯璁ゅ鹼紝涔熷氨鏄父瑙佺殑璁懼畾鍊鹼紝褰撶劧鐢ㄦ埛鑳藉瀵瑰叾榪涜淇敼銆?br>棰勫畾涔夊彉閲忓寘鍚簡甯歌緙栬瘧鍣ㄣ佹眹緙栧櫒鐨勫悕縐板強鍏剁紪璇戦夐」銆備笅琛?.14鍒楀嚭浜哅akefile涓父瑙侀瀹氫箟鍙橀噺鍙婂叾閮ㄥ垎榛樿鍊箋?br>琛?.14                                                  Makefile涓父瑙侀瀹氫箟鍙橀噺
鍛?浠?鏍?寮?br>鍚?nbsp;   涔?br>AR
搴撴枃妗g淮鎶ょ▼寮忕殑鍚嶇О錛岄粯璁ゅ間負ar
AS
姹囩紪紼嬪紡鐨勫悕縐幫紝榛樿鍊間負as
CC
C緙栬瘧鍣ㄧ殑鍚嶇О錛岄粯璁ゅ間負cc
CPP
C棰勭紪璇戝櫒鐨勫悕縐幫紝榛樿鍊間負$(CC) –E
CXX
C++緙栬瘧鍣ㄧ殑鍚嶇О錛岄粯璁ゅ間負g++
FC
FORTRAN緙栬瘧鍣ㄧ殑鍚嶇О錛岄粯璁ゅ間負f77
RM
鏂囨。鍒犻櫎紼嬪紡鐨勫悕縐幫紝榛樿鍊間負rm –f
ARFLAGS
搴撴枃妗g淮鎶ょ▼寮忕殑閫夐」錛屾棤榛樿鍊?br>ASFLAGS
姹囩紪紼嬪紡鐨勯夐」錛屾棤榛樿鍊?br>CFLAGS
C緙栬瘧鍣ㄧ殑閫夐」錛屾棤榛樿鍊?br>CPPFLAGS
C棰勭紪璇戠殑閫夐」錛屾棤榛樿鍊?br>CXXFLAGS
C++緙栬瘧鍣ㄧ殑閫夐」錛屾棤榛樿鍊?br>FFLAGS
FORTRAN緙栬瘧鍣ㄧ殑閫夐」錛屾棤榛樿鍊?br>
鑳藉鐪嬪嚭錛屼笂渚嬩腑鐨凜C鍜孋FLAGS鏄瀹氫箟鍙橀噺錛屽叾涓敱浜嶤C娌℃湁閲囩敤榛樿鍊鹼紝鍥犳錛岄渶瑕佹妸“CC=Gcc”鏄庣‘鍒楀嚭鏉ャ?br>鐢變簬甯歌鐨凣cc緙栬瘧璇彞涓氬父鍖呭惈浜嗙洰鏍囨枃妗e拰渚濊禆鏂囨。錛岃岃繖浜涙枃妗e湪Makefile鏂囨。涓洰鏍囦綋鐨勪竴琛屽凡鏈夋墍浣撶幇錛屽洜姝わ紝涓轟簡榪涗竴姝ョ畝鍖朚akefile鐨勭紪鍐欙紝灝卞紩鍏ヤ簡鑷姩鍙橀噺銆傝嚜鍔ㄥ彉閲忛氬父鑳藉浠h〃緙栬瘧璇彞涓嚭鐜扮洰鏍囨枃妗e拰渚濊禆鏂囨。絳夛紝騫朵笖鍏峰鏈湴鍚箟錛堝嵆涓嬩竴璇彞涓嚭鐜扮殑鐩稿悓鍙橀噺浠h〃鐨勬槸涓嬩竴璇彞鐨勭洰鏍囨枃妗e拰渚濊禆鏂囨。錛夈備笅琛?.15鍒楀嚭浜哅akefile涓父瑙佽嚜鍔ㄥ彉閲忋?br>琛?.15                                                    Makefile涓父瑙佽嚜鍔ㄥ彉閲?br>鍛戒護鏍煎紡
鍚?nbsp;   涔?br>$*
涓嶅寘鍚墿灞曞悕鐨勭洰鏍囨枃妗e悕縐?br>$+
浠諱綍鐨勪緷璧栨枃妗o紝浠ョ┖鏍煎垎寮錛屽茍浠ュ嚭鐜扮殑鍏堝悗涓哄簭錛屽彲鑳藉寘鍚噸澶嶇殑渚濊禆鏂囨。
$
絎竴涓緷璧栨枃妗g殑鍚嶇О
$?
浠諱綍鏃墮棿鎴蟲瘮鐩爣鏂囨。鏅氱殑渚濊禆鏂囨。錛屽茍浠ョ┖鏍煎垎寮
鍛戒護鏍煎紡
鍚?nbsp;   涔?br>$@
鐩爣鏂囨。鐨勫畬鏁村悕縐?br>$^
浠諱綍涓嶉噸澶嶇殑渚濊禆鏂囨。錛屼互絀烘牸鍒嗗紑
$%
鍋囧鐩爣鏄綊妗f垚鍛橈紝鍒欒鍙橀噺琛ㄧず鐩爣鐨勫綊妗f垚鍛樺悕縐?br>
鑷姩鍙橀噺鐨勪功鍐欐瘮杈冮毦璁幫紝浣嗘槸鍦ㄧ啛緇冧簡涔嬪悗浼氬緢鐨勬柟渚匡紝璇瘋鑰呯粨鍚堜笅渚嬩腑鐨勮嚜鍔ㄥ彉閲忔敼鍐欑殑Makefile榪涜璁板繂銆?br>
OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
      $(CC) $^ -o $@
kang.o : kang.c kang.h
      $(CC) $(CFLAGS) -c $
yul.o : yul.c yul.h
      $(CC) $(CFLAGS) -c $

鍙﹀錛屽湪Makefile涓繕鑳藉浣跨敤鐜鍙橀噺銆備嬌鐢ㄧ幆澧冨彉閲忕殑鏂規硶鐩稿姣旇緝綆鍗曪紝make鍦ㄥ惎鍔ㄦ椂浼氳嚜鍔ㄨ鍙栫郴緇熷綋鍓嶅凡瀹氫箟浜嗙殑鐜鍙橀噺錛屽茍涓斾細鍒涘緩鍜屼箣鍏峰鐩稿悓鍚嶇О鍜屾暟鍊肩殑鍙橀噺銆備絾鏄紝鍋囧鐢ㄦ埛鍦∕akefile涓畾涔変簡鐩稿悓鍚嶇О鐨勫彉閲忥紝閭d箞鐢ㄦ埛鑷畾涔夊彉閲忓皢浼氳鐩栧悓鍚嶇殑鐜鍙橀噺銆?br>3.6.3  Makefile瑙勫垯
Makefile鐨勮鍒欐槸Make榪涜澶勭悊鐨勪緷鎹紝浠栧寘鎷簡鐩爣浣撱佷緷璧栨枃妗e強鍏朵箣闂寸殑鍛戒護璇彞銆備竴鑸殑錛孧akefile涓殑涓鏉¤鍙ュ氨鏄釜瑙勫垯銆傚湪涓婇潰鐨勪緥瀛愪腑錛岄兘鏄劇ず鍦版寚鍑轟簡Makefile涓殑瑙勫垯鍏崇郴錛屽“$(CC) $(CFLAGS) -c $”錛屼絾涓轟簡綆鍖朚akefile鐨勭紪鍐欙紝make榪樺畾涔変簡闅愬紡瑙勫垯鍜屾ā寮忚鍒欙紝涓嬮潰灝卞垎鍒鍏惰繘琛岃瑙c?br>1錛庨殣寮忚鍒?br>闅愬惈瑙勫垯鑳藉鍛婅瘔make鎬庢牱浣跨敤浼犵粺鐨勬妧鏈畬鎴愪換鍔★紝榪欐牱錛屽綋鐢ㄦ埛浣跨敤浠栦滑鏃跺氨涓嶅繀鍛ㄨ鎸囧畾緙栬瘧鐨勫叿浣撶粏鑺傦紝鑰屽彧闇鎶婄洰鏍囨枃妗e垪鍑哄嵆鍙侻ake浼氳嚜鍔ㄦ悳绱㈤殣寮忚鍒欑洰褰曟潵紜畾濡備綍鐢熸垚鐩爣鏂囨。銆傚涓婁緥灝辮兘澶熷啓鎴愶細

OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
      $(CC) $^ -o $@

涓轟粈涔堣兘澶熺渷鐣ュ悗涓ゅ彞鍛紵鍥犱負Make鐨勯殣寮忚鍒欐寚鍑猴細浠諱綍“.o”鏂囨。閮藉彲鑷姩鐢?#8220;.c”鏂囨。浣跨敤鍛戒護“$(CC) $(CPPFLAGS) $(CFLAGS) -c file.c –o file.o”鐢熸垚銆傝繖鏍?#8220;kang.o”鍜?#8220;yul.o”灝變細鍒嗗埆璋冪敤“$(CC) $(CFLAGS) -c kang.c -o kang.o”鍜?#8220;$(CC) $(CFLAGS) -c yul.c -o yul.o”鐢熸垚銆?br>

娉ㄦ剰
鍦ㄩ殣寮忚鍒欏彧鑳芥煡鎵懼埌鐩稿悓鏂囨。鍚嶇殑涓嶅悓鍚庣紑鍚嶆枃妗o紝濡?#8221;kang.o”鏂囨。蹇呴』鐢?#8221;kang.c”鏂囨。鐢熸垚銆?br>
涓嬭〃3.16緇欏嚭浜嗗父瑙佺殑闅愬紡瑙勫垯鐩綍錛?br>琛?.16                                                Makefile涓父瑙侀殣寮忚鍒欑洰褰?br>瀵瑰簲璇█鍚庣紑鍚?br>瑙?nbsp;   鍒?br>C緙栬瘧錛?c鍙樹負.o
$(CC) –c $(CPPFLAGS) $(CFLAGS)
C++緙栬瘧錛?cc鎴?C鍙樹負.o
$(CXX) -c $(CPPFLAGS) $(CXXFLAGS)
Pascal緙栬瘧錛?p鍙樹負.o
$(PC) -c $(PFLAGS)
Fortran緙栬瘧錛?r鍙樹負-o
$(FC) -c $(FFLAGS)
2錛庢ā寮忚鍒?br>妯″紡瑙勫垯鏄敤鏉ュ畾涔夌浉鍚屽鐞嗚鍒欑殑澶氫釜鏂囨。鐨勩備粬涓嶅悓浜庨殣寮忚鍒欙紝闅愬紡瑙勫垯浠呬粎鑳藉鐢╩ake榛樿鐨勫彉閲忔潵榪涜鎿嶄綔錛岃屾ā寮忚鍒欒繕鑳藉紩鍏ョ敤鎴瘋嚜瀹氫箟鍙橀噺錛屼負澶氫釜鏂囨。寤虹珛鐩稿悓鐨勮鍒欙紝浠庤岀畝鍖朚akefile鐨勭紪鍐欍?br>妯″紡瑙勫垯鐨勬牸寮忕被浼間簬鏅氳鍒欙紝榪欎釜瑙勫垯涓殑鐩稿叧鏂囨。鍓嶅繀欏葷敤“%”鏍囨槑銆備嬌鐢ㄦā寮忚鍒欎慨鏀瑰悗鐨凪akefile鐨勭紪鍐欏涓嬶細

OBJS = kang.o yul.o
CC = Gcc
CFLAGS = -Wall -O -g
sunq : $(OBJS)
      $(CC) $^ -o $@
%.o : %.c
      $(CC) $(CFLAGS) -c $

3.6.4  Make浣跨敤
浣跨敤make綆$悊鍣ㄥ緢綆鍗曪紝鍙渶鍦╩ake鍛戒護鐨勫悗闈㈤敭鍏ョ洰鏍囧悕鍗沖彲寤虹珛鎸囧畾鐨勭洰鏍囷紝鍋囧鐩存帴榪愯make錛屽垯寤虹珛Makefile涓殑絎竴涓洰鏍囥?br>姝ゅmake鏇存湁涓板瘜鐨勫懡浠よ閫夐」錛岃兘澶熷畬鎴愬悇縐嶄笉鍚岀殑鍔熻兘銆備笅琛?.17鍒楀嚭浜嗗父鐢ㄧ殑make鍛戒護琛岄夐」銆?br>琛?.17                                                        make鐨勫懡浠よ閫夐」
鍛戒護鏍煎紡
鍚?nbsp;   涔?br>-C dir
璇誨叆鎸囧畾鐩綍涓嬬殑Makefile
-f file
璇誨叆褰撳墠鐩綍涓嬬殑file鏂囨。浣滀負Makefile
鍛戒護鏍煎紡
鍚?nbsp;   涔?br>-i
蹇界暐浠諱綍鐨勫懡浠ゆ墽琛岄敊璇?br>-I dir
鎸囧畾琚寘鍚殑Makefile鎵鍦ㄧ洰褰?br>-n
鍙墦鍗拌鎵ц鐨勫懡浠わ紝浣嗕笉鎵ц榪欎簺鍛戒護
-p
鏄劇ずmake鍙橀噺鏁版嵁搴撳拰闅愬惈瑙勫垯
-s
鍦ㄦ墽琛屽懡浠ゆ椂涓嶆樉紺哄懡浠?br>-w
鍋囧make鍦ㄦ墽琛岃繃紼嬩腑鏀瑰彉鐩綍錛屽垯鎵撳嵃褰撳墠鐩綍鍚?br>3.7  浣跨敤autotools
鍦ㄤ笂涓灝忚妭錛岃鑰呭凡浜嗚В鍒頒簡make欏圭洰綆$悊鍣ㄧ殑寮哄ぇ鍔熻兘銆傜殑紜紝Makefile鑳藉甯姪make瀹屾垚浠栫殑浣垮懡錛屼絾瑕佹壙璁ょ殑鏄紝緙栧啓Makefile紜疄涓嶆槸涓浠惰交鏉劇殑浜嬶紝灝ゅ叾瀵逛簬涓涓緝澶х殑欏圭洰鑰岃█鏇存槸濡傛銆傞偅涔堬紝鏈夋病鏈変竴縐嶈交鏉劇殑鎵嬫鐢熸垚Makefile鑰屽悓鏃跺張鑳借鐢ㄦ埛浜彈make鐨勪紭瓚婃у憿錛熸湰鑺傝璁茬殑autotools緋誨垪宸ュ叿姝f槸涓烘鑰岃鐨勶紝浠栧彧闇鐢ㄦ埛杈撳叆綆鍗曠殑鐩爣鏂囨。銆佷緷璧栨枃妗c佹枃妗g洰褰曠瓑灝辮兘澶熻交鏉懼湴鐢熸垚Makefile浜嗭紝榪欐棤鐤戞槸騫垮ぇ鐢ㄦ埛鐨勬墍甯屾湜鐨勩傚彟澶栵紝榪欎簺宸ュ叿榪樿兘澶熷畬鎴愮郴緇熼厤緗俊鎭殑鏀墮泦錛屼粠鑰岃兘澶熸柟渚垮湴澶勭悊鍚勭縐繪鎬х殑闂銆備篃姝f槸鍩轟簬姝わ紝鐜板湪Linux涓婄殑杞歡鐮斿彂涓鑸兘鐢╝utotools鏉ュ埗浣淢akefile錛岃鑰呭湪鍚庨潰鐨勮榪頒腑灝變細浜嗚В鍒般?br>3.7.1  autotools浣跨敤嫻佺▼
姝e鍓嶉潰鎵璦錛宎utotools鏄郴鍒楀伐鍏鳳紝璇昏呴鍏堣紜緋葷粺鏄惁瑁呬簡浠ヤ笅宸ュ叿錛堣兘澶熺敤which鍛戒護榪涜鏌ョ湅錛夈?br>·  aclocal
·  autoscan
·  autoconf
·  autoheader
·  automake
浣跨敤autotools涓昏灝辨槸鍒╃敤鍚勪釜宸ュ叿鐨勮剼鏈枃妗d互鐢熸垚鏈鍚庣殑Makefile銆傚叾鎬諱綋嫻佺▼鏄繖鏍風殑錛?br>·  浣跨敤aclocal鐢熸垚涓涓?#8220;aclocal.m4”鏂囨。錛岃鏂囨。涓昏澶勭悊鏈湴鐨勫畯瀹氫箟錛?br>·  鏀瑰啓“configure.scan”鏂囨。錛屽茍灝嗗叾閲嶅懡鍚嶄負“configure.in”錛屽茍浣跨敤autoconf鏂囨。鐢熸垚configure鏂囨。銆?br>鎺ヤ笅鏉ワ紝絎旇呭皢閫氳繃涓涓畝鍗曠殑hello.c渚嬪瓙甯﹂璇昏呯啛鎮塧utotools鐢熸垚makefile鐨勮繃紼嬶紝鐢變簬鍦ㄨ繖榪囩▼涓湁娑夊強鍒拌緝澶氱殑鑴氭湰鏂囨。錛屼負浜嗘洿娓呮鍦頒簡瑙g浉浜掍箣闂寸殑鍏崇郴錛屽己鐑堝緩璁鑰呭疄闄呭姩鎵嬫搷浣滀互浣撲細鍏舵暣涓繃紼嬨?br>1錛巃utoscan
浠栦細鍦ㄧ粰瀹氱洰褰曞強鍏跺瓙鐩綍鏍戜腑媯鏌ユ簮鏂囨。錛岃嫢娌℃湁緇欏嚭鐩綍錛屽氨鍦ㄥ綋鍓嶇洰褰曞強鍏跺瓙鐩綍鏍戜腑榪涜媯鏌ャ備粬浼氭悳绱㈡簮鏂囨。浠ュ鎵句竴鑸殑縐繪鎬ч棶棰樺茍鍒涘緩涓涓枃妗?#8220;configure.scan”錛岃鏂囨。灝辨槸鎺ヤ笅鏉utoconf瑕佺敤鍒扮殑“configure.in”鍘熷瀷銆傚涓嬫墍紺猴細

[root@localhost automake]# autoscan
autom4te: configure.ac: no such file or directory
autoscan: /usr/bin/autom4te failed with exit status: 1
[root@localhost automake]# ls
autoscan.log  configure.scan  hello.c

濡備笂鎵紺猴紝autoscan棣栧厛浼氬皾璇曞幓璇誨叆“configure.ac”錛堝悓configure.in鐨勯厤緗枃妗o級鏂囨。錛屾鏃惰繕娌℃湁鍒涘緩璇ラ厤緗枃妗o紝浜庢槸浠栦細鑷姩鐢熸垚涓涓?#8220;configure.in”鐨勫師鍨嬫枃妗?#8220;configure.scan”銆?br>2錛巃utoconf
configure.in鏄痑utoconf鐨勮剼鏈厤緗枃妗o紝浠栫殑鍘熷瀷鏂囨。“configure.scan”濡備笅鎵紺猴細

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.59)
#The next one is modified by sunq
#AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS)
AC_INIT(hello,1.0)
# The next one is added by sunq
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.c])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

涓嬮潰瀵硅繖涓剼鏈枃妗h繘琛岃В閲婏細
·  浠?#8220;#”鍙峰紑濮嬬殑琛屼負娉ㄩ噴銆?br>·  AC_PREREQ瀹忓0鏄庢湰鏂囨。闇瑕佺殑autoconf鐗堟湰錛屽鏈緥浣跨敤鐨勭増鏈?.59銆?br>· AC_INIT瀹忕敤鏉ュ畾涔夎蔣浠剁殑鍚嶇О鍜岀増鏈瓑淇℃伅錛屽湪鏈緥涓渷鐣ヤ簡BUG-REPORT-ADDRESS錛屼竴鑸負浣滆呯殑e-mail銆?br>·  AM_INIT_AUTOMAKE鏄瑪鑰呭彟鍔犵殑錛屼粬鏄痑utomake鎵蹇呭鐨勫畯錛屼篃鍚屽墠闈㈢浉鍚岋紝PACKAGE鏄墍瑕佷駭鐢熻蔣浠跺浠剁殑鍚嶇О錛孷ERSION鏄増鏈紪鍙楓?br>·  AC_CONFIG_SRCDIR瀹忕敤鏉ヤ睛嫻嬫墍鎸囧畾鐨勬簮鐮佹枃妗f槸鍚﹀瓨鍦紝鏉ョ‘瀹氭簮鐮佺洰褰曠殑鏈?br>鏁堟с傚湪姝ゅ涓哄綋鍓嶇洰褰曚笅鐨刪ello.c銆?br>·  AC_CONFIG_HEADER瀹忕敤浜庣敓鎴恈onfig.h鏂囨。錛屼互渚縜utoheader浣跨敤銆?br>·  AC_CONFIG_FILES瀹忕敤浜庣敓鎴愮浉搴旂殑Makefile鏂囨。銆?br>·  涓棿鐨勬敞閲婇棿鑳藉娣誨姞鍒嗗埆鐢ㄦ埛嫻嬭瘯紼嬪紡銆佹祴璇曞嚱鏁板簱銆佹祴璇曞ご鏂囨。絳夊畯瀹氫箟銆?br>鎺ヤ笅鏉ラ鍏堣繍琛宎clocal錛岀敓鎴愪竴涓?#8220;aclocal.m4”鏂囨。錛岃鏂囨。涓昏澶勭悊鏈湴鐨勫畯瀹氫箟銆傚涓嬫墍紺猴細

[root@localhost automake]# aclocal

鍐嶆帴鐫榪愯autoconf錛岀敓鎴?#8220;configure”鍙墽琛屾枃妗c傚涓嬫墍紺猴細

[root@localhost automake]# autoconf
[root@localhost automake]# ls
aclocal.m4  autom4te.cache  autoscan.log  configure  configure.in  hello.c
3錛巃utoheader
鎺ョ潃浣跨敤autoheader鍛戒護錛屼粬璐熻矗鐢熸垚config.h.in鏂囨。銆傝宸ュ叿閫氬父浼氫粠“acconfig.h”鏂囨。涓鍒剁敤鎴烽檮鍔犵殑絎﹀彿瀹氫箟錛屽洜姝ゆ澶勬病鏈夐檮鍔犵鍙峰畾涔夛紝鎵浠ユ棤闇鍒涘緩“acconfig.h”鏂囨。銆傚涓嬫墍紺猴細

[root@localhost automake]# autoheader
4錛巃utomake
榪欎竴姝ユ槸鍒涘緩Makefile寰堥噸瑕佺殑涓姝ワ紝automake瑕佺敤鐨勮剼鏈厤緗枃妗f槸Makefile.am錛岀敤鎴烽渶瑕佽嚜宸卞垱寤虹浉搴旂殑鏂囨。銆備箣鍚庯紝automake宸ュ叿杞崲鎴怣akefile.in銆傚湪璇ヤ緥涓紝絎旇呭垱寤虹殑鏂囨。涓篗akefile.am濡備笅鎵紺猴細

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS= hello
hello_SOURCES= hello.c

涓嬮潰瀵硅鑴氭湰鏂囨。鐨勫搴旈」榪涜瑙i噴銆?br>·  鍏朵腑鐨凙UTOMAKE_OPTIONS涓洪厤緗產utomake鐨勯夐」銆傜敱浜嶨NU錛堝湪絎?绔犱腑宸叉湁鎵浠嬬粛錛夊鑷繁鍙戝竷鐨勮蔣浠舵湁涓ユ牸鐨勮鑼冿紝姣斿蹇呴』闄勫甫璁稿彲璇佸0鏄庢枃妗OPYING絳夛紝鍚﹀垯automake鎵ц鏃朵細鎶ラ敊銆俛utomake鎻愪緵浜嗕笁縐嶈蔣浠剁瓑綰э細foreign銆乬nu鍜実nits錛岃鐢ㄦ埛閫夋嫨閲囩敤錛岄粯璁ょ瓑綰т負gnu銆傚湪鏈緥浣跨敤foreign絳夌駭錛屼粬鍙嫻嬪繀欏葷殑鏂囨。銆?br>·  bin_PROGRAMS瀹氫箟瑕佷駭鐢熺殑鎵ц鏂囨。鍚嶃傚亣濡傝浜х敓澶氫釜鎵ц鏂囨。錛屾瘡涓枃妗e悕鐢ㄧ┖鏍奸殧寮銆?br>·  hello_SOURCES瀹氫箟“hello”榪欎釜鎵ц紼嬪紡鎵闇瑕佺殑鍘熷鏂囨。銆傚亣濡?#8221;hello”榪欎釜紼嬪紡鏄敱澶氫釜鍘熷鏂囨。鎵浜х敓鐨勶紝鍒欏繀欏繪妸浠栨墍鐢ㄥ埌鐨勪換浣曞師濮嬫枃妗i兘鍒楀嚭鏉ワ紝騫剁敤絀烘牸闅斿紑銆備緥濡傦細鑻ョ洰鏍囦綋“hello”闇瑕?#8220;hello.c”銆?#8220;sunq.c”銆?#8220;hello.h”涓変釜渚濊禆鏂囨。錛屽垯瀹氫箟hello_SOURCES=hello.c sunq.c hello.h銆傝娉ㄦ剰鐨勬槸錛屽亣濡傝瀹氫箟澶氫釜鎵ц鏂囨。錛屽垯瀵規瘡涓墽琛岀▼寮忛兘瑕佸畾涔夌浉搴旂殑file_SOURCES銆?br>鎺ヤ笅鏉ヨ兘澶熶嬌鐢╝utomake瀵瑰叾鐢熸垚“configure.in”鏂囨。錛屽湪榪欓噷浣跨敤閫夐」“鈥攁dding-missing”鑳藉璁゛utomake鑷姩娣誨姞鏈変竴浜涘繀闇鐨勮剼鏈枃妗c傚涓嬫墍紺猴細

[root@localhost automake]# automake --add-missing
configure.in: installing './install-sh'
configure.in: installing './missing'
Makefile.am: installing 'depcomp'
[root@localhost automake]# ls
aclocal.m4      autoscan.log  configure.in  hello.c     Makefile.am  missing
autom4te.cache  configure     depcomp    install-sh  Makefile.in  config.h.in

鑳藉鐪嬪埌錛屽湪automake涔嬪悗灝辮兘澶熺敓鎴恈onfigure.in鏂囨。銆?br>5錛庤繍琛宑onfigure
鍦ㄨ繖涓姝ヤ腑錛岄氳繃榪愯鑷姩閰嶇疆閰嶇疆鏂囨。configure錛屾妸Makefile.in鍙樻垚浜嗘渶緇堢殑Makefile銆傚涓嬫墍紺猴細

[root@localhost automake]# ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build enVironment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for Gcc... Gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether Gcc accepts -g... yes
checking for Gcc option to accept ANSI C... none needed
checking for style of include used by make... GNU
checking dependency style of Gcc... Gcc3
configure: creating ./config.status
config.status: creating Makefile
config.status: executing depfiles commands
鑳藉鐪嬪埌錛屽湪榪愯configure鏃舵敹闆嗕簡緋葷粺鐨勪俊鎭紝鐢ㄦ埛鑳藉鍦╟onfigure鍛戒護涓鍏惰繘琛屾柟渚垮湴閰嶇疆銆傚湪./configure鐨勮嚜瀹氫箟鍙傛暟鏈変袱縐嶏紝涓縐嶆槸寮鍏沖紡錛?-enable-XXX鎴?-disable-XXX錛夛紝鍙︿竴縐嶆槸寮鏀懼紡錛屽嵆鍚庨潰瑕佸~鍏ヤ竴涓插瓧絎︼紙--with-XXX=yyyy錛夊弬鏁般傝鑰呰兘澶熻嚜琛屽皾璇曞叾浣跨敤鏂規硶銆傚彟澶栵紝璇昏呰兘澶熸煡鐪嬪悓涓鐩綍涓嬬殑”config.log”鏂囨。錛屼互鏂逛究璋冭瘯涔嬬敤銆?br>鍒版涓烘錛宮akefile灝辮兘澶熻嚜鍔ㄧ敓鎴愪簡銆傚洖蹇嗘暣涓楠わ紝鐢ㄦ埛涓嶅啀闇瑕佸畾鍒朵笉鍚岀殑瑙勫垯錛岃屽彧闇瑕佽緭鍏ョ畝鍗曠殑鏂囨。鍙婄洰褰曞悕鍗沖彲錛岃繖鏍峰氨澶уぇ鏂逛究浜嗙敤鎴風殑浣跨敤銆備笅闈㈢殑鍥?.9鎬葷粨浜嗕笂榪拌繃紼嬶細

鍥?.9  autotools鐢熸垚Makefile嫻佺▼鍥?br>3.7.2  浣跨敤autotools鎵鐢熸垚鐨凪akefile
autotools鐢熸垚鐨凪akefile闄ゅ叿澶囨櫘閫氱殑緙栬瘧鍔熻兘澶栵紝榪樺叿澶囦互涓嬩富瑕佸姛鑳斤紙鎰熷叴瓚g殑璇昏呰兘澶熸煡鐪嬭繖涓畝鍗曠殑hello.c紼嬪紡鐨刴akefile錛夛細
1錛巑ake
閿叆make榛樿鎵ц”make all”鍛戒護錛屽嵆鐩爣浣撲負all錛屽叾鎵ц鎯呭喌濡備笅鎵紺猴細

[root@localhost automake]# make
if Gcc
-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\"
-DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"hello\"
-DVERSION=\"1.0\"  -I. -I.     -g -O2 -MT hello.o -MD -MP -MF
".deps/hello.Tpo" -c -o hello.o hello.c; \
then mv -f ".deps/hello.Tpo" ".deps/hello.Po"; else rm -f ".deps/hello.Tpo"; exit 1; fi
Gcc  -g -O2   -o hello  hello.o
姝ゆ椂鍦ㄦ湰鐩綍涓嬪氨鐢熸垚浜嗗彲鎵ц鏂囨。“hello”錛岃繍琛?#8220;./hello”鑳藉嚭鐜版甯哥粨鏋滐紝濡備笅鎵紺猴細

[root@localhost automake]# ./hello
Hello!Autoconf!
2錛巑ake install
姝ゆ椂錛屼細鎶婅紼嬪紡瀹夎鍒扮郴緇熺洰褰曚腑鍘伙紝濡備笅鎵紺猴細

[root@localhost automake]# make install
if Gcc
-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\"
-DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"hello\"
-DVERSION=\"1.0\"  -I. -I.     -g -O2 -MT hello.o -MD -MP -MF
".deps/hello.Tpo" -c -o hello.o hello.c; \
then mv -f ".deps/hello.Tpo" ".deps/hello.Po"; else rm -f ".deps/hello.Tpo"; exit 1; fi
Gcc  -g -O2   -o hello  hello.o
make[1]: Entering directory '/root/workplace/automake'
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
  /usr/bin/install -c 'hello' '/usr/local/bin/hello'
make[1]: Nothing to be done for 'install-data-am'.
make[1]: LeaVing directory '/root/workplace/automake'

姝ゆ椂錛岃嫢鐩存帴榪愯hello錛屼篃鑳藉嚭鐜版紜粨鏋滐紝濡備笅鎵紺猴細

[root@localhost automake]# hello
Hello!Autoconf!
3錛巑ake clean
姝ゆ椂錛宮ake浼氭竻闄や箣鍓嶆墍緙栬瘧鐨勫彲鎵ц鏂囨。鍙婄洰鏍囨枃妗o紙object file, *.o錛夛紝濡備笅鎵紺猴細

[root@localhost automake]# make clean
test -z "hello" || rm -f hello
rm -f *.o
4錛巑ake dist
姝ゆ椂錛宮ake灝嗙▼寮忓拰鐩稿叧鐨勬枃妗f墦鍖呬負涓涓帇緙╂枃妗d互渚涘彂甯冿紝濡備笅鎵紺猴細

[root@localhost automake]# make dist
[root@localhost automake]# ls hello-1.0-tar.gz
hello-1.0-tar.gz

鍙璇ュ懡浠ょ敓鎴愪簡涓涓猦ello-1.0-tar.gz鐨勫帇緙╂枃妗c?br>鐢變笂闈㈢殑璁茶堪璇昏呬笉闅劇湅鍑猴紝autotools紜疄鏄蔣浠剁淮鎶ゅ拰鍙戝竷鐨勫繀澶囧伐鍏鳳紝涔熼壌浜庢錛屽浠奊UN鐨勮蔣浠朵竴鑸兘鏄敱automake鏉ュ埗浣滅殑銆?br>

鎯充竴鎯?br>瀵逛簬automake鍒朵綔鐨勮繖綾昏蔣浠訛紝搴斿浣曞畨瑁呭憿錛?br>3.8.3  緙栧啓鍖呭惈澶氭枃妗g殑Makefile
1錛庡疄楠岀洰鐨?br>閫氳繃瀵瑰寘鍚鏂囨。鐨凪akefile鐨勭紪鍐欙紝鐔熸倝鍚勭褰㈠紡鐨凪akefile錛屽茍涓旇繘涓姝ュ姞娣卞Makefile涓敤鎴瘋嚜瀹氫箟鍙橀噺銆佽嚜鍔ㄥ彉閲忓強棰勫畾涔夊彉閲忕殑鐞嗚В銆?br>2錛庡疄楠岃繃紼?br>錛?錛夌敤Vi鍦ㄥ悓涓鐩綍涓嬬紪杈戜袱涓畝鍗曠殑Hello紼嬪紡錛屽涓嬫墍紺猴細

#hello.c
#include "hello.h"
int main()
{
       printf("Hello everyone!\n");
}
#hello.h
#include

錛?錛変粛鍦ㄥ悓涓鐩綍涓嬬敤Vi緙栬緫Makefile錛屼笖涓嶄嬌鐢ㄥ彉閲忔浛鎹紝鐢ㄤ竴涓洰鏍囦綋瀹炵幇錛堝嵆鐩存帴灝唄ello.c鍜宧ello.h緙栬瘧鎴恏ello鐩爣浣擄級銆傜劧鍚庣敤make楠岃瘉鎵緙栧啓鐨凪akefile鏄惁姝g‘銆?br>錛?錛夊皢涓婅堪Makefile浣跨敤鍙橀噺鏇挎崲瀹炵幇銆傚悓鏍風敤make楠岃瘉鎵緙栧啓鐨凪akefile鏄惁姝g‘
錛?錛夌敤緙栬緫鍙︿竴Makefile錛屽彇鍚嶄負Makefile1錛屼笉浣跨敤鍙橀噺鏇挎崲錛屼絾鐢ㄤ袱涓洰鏍囦綋瀹炵幇錛堜篃灝辨槸棣栧厛灝唄ello.c鍜宧ello.h緙栬瘧涓篽ello.o錛屽啀灝唄ello.o緙栬瘧涓篽ello錛夛紝鍐嶇敤make鐨?#8221;-f”閫夐」楠岃瘉榪欎釜Makefile1鐨勬紜с?br>錛?錛夊皢涓婅堪Makefile1浣跨敤鍙橀噺鏇挎崲瀹炵幇銆?br>3錛庡疄楠屾楠?br>錛?錛夌敤Vi鎵撳紑涓婅堪涓や釜浠g爜鏂囨。“hello.c”鍜?#8220;hello.h”銆?br>錛?錛夊湪shell鍛戒護琛屼腑鐢℅cc灝濊瘯緙栬瘧錛屼嬌鐢ㄥ懡浠わ細”Gcc hello.c –o hello”錛屽茍榪愯hello鍙墽琛屾枃妗f煡鐪嬬粨鏋溿?br>錛?錛夊垹闄ゆ嬈$紪璇戠殑鍙墽琛屾枃妗o細rm hello銆?br>錛?錛夌敤Vi緙栬緫Makefile錛屽涓嬫墍紺猴細

hello:hello.c hello.h
       Gcc hello.c -o hello

錛?錛夐鍑轟繚瀛橈紝鍦╯hell涓敭鍏ワ細make錛屾煡鐪嬬粨鏋溿?br>錛?錛夊啀嬈$敤Vi鎵撳紑Makefile錛岀敤鍙橀噺榪涜鏇挎崲錛屽涓嬫墍紺猴細

OBJS :=hello.o
CC :=Gcc
hello:$(OBJS)
       $(CC) $^ -o $@

錛?錛夐鍑轟繚瀛橈紝鍦╯hell涓敭鍏ワ細make錛屾煡鐪嬬粨鏋溿?br>錛?錛夌敤Vi緙栬緫Makefile1錛屽涓嬫墍紺猴細

hello:hello.o
       Gcc hello.o -o hello
hello.o:hello.c hello.h
       Gcc -c hello.c -o hello.o

錛?錛夐鍑轟繚瀛橈紝鍦╯hell涓敭鍏ワ細make -f Makefile1錛屾煡鐪嬬粨鏋溿?br>錛?0錛夊啀嬈$敤Vi緙栬緫Makefile1錛屽涓嬫墍紺猴細

OBJS1 :=hello.o
OBJS2 :=hello.c hello.h
CC :=Gcc
hello:$(OBJS1)
       $(CC) $^ -o $@
$(OBJS1):$(OBJS2)
       $(CC) -c $

鍦ㄨ繖閲岃娉ㄦ剰鍖哄埆“$^”鍜?#8220;$”銆?br>錛?1錛夐鍑轟繚瀛橈紝鍦╯hell涓敭鍏ワ細make -f Makefile1錛屾煡鐪嬬粨鏋?br>4錛庡疄楠岀粨鏋?br>鍚勭涓嶅悓褰㈠紡鐨刴akefile閮借兘瀹屾垚鍏舵紜殑鍔熻兘銆?br>3.8.4  浣跨敤autotools鐢熸垚鍖呭惈澶氭枃妗g殑Makefile
1錛庡疄楠岀洰鐨?br>閫氳繃浣跨敤autotools鐢熸垚鍖呭惈澶氭枃妗g殑Makefile錛岃繘涓姝ユ帉鎺utotools鐨勬紜嬌鐢ㄦ柟娉曘傚悓鏃訛紝鎺屾帶Linux涓嬪畨瑁呰蔣浠剁殑甯哥敤鏂規硶銆?br>2錛庡疄楠岃繃紼?br>錛?錛夊湪鍘熺洰褰曚笅鏂板緩鏂囨。澶筧uto銆?br>錛?錛夊埄鐢ㄤ笂渚嬬殑涓や釜浠g爜鏂囨。“hello.c”鍜?#8220;hello.h”錛屽茍灝嗕粬浠鍒跺埌璇ョ洰褰曚笅銆?br>錛?錛変嬌鐢╝utoscan鐢熸垚configure.scan銆?br>錛?錛夌紪杈慶onfigure.scan錛屼慨鏀圭浉鍏沖唴瀹癸紝騫跺皢鍏墮噸鍛藉悕涓篶onfigure.in銆?br>錛?錛変嬌鐢╝clocal鐢熸垚aclocal.m4銆?br>錛?錛変嬌鐢╝utoconf鐢熸垚configure銆?br>錛?錛変嬌鐢╝utoheader鐢熸垚config.in.h銆?br>錛?錛夌紪杈慚akefile.am銆?br>錛?錛変嬌鐢╝utomake鐢熸垚Makefile.in銆?br>錛?0錛変嬌鐢╟onfigure鐢熸垚Makefile銆?br>錛?1錛変嬌鐢╩ake鐢熸垚hello鍙墽琛屾枃妗o紝騫跺湪褰撳墠鐩綍涓嬭繍琛宧ello鏌ョ湅緇撴灉銆?br>錛?2錛変嬌鐢╩ake install灝唄ello瀹夎鍒扮郴緇熺洰褰曚笅錛屽茍榪愯錛屾煡鐪嬬粨鏋溿?br>錛?3錛変嬌鐢╩ake dist鐢熸垚hello鍘嬬緝鍖呫?br>錛?4錛夎В鍘媓ello鍘嬬緝鍖呫?br>錛?5錛夎繘鍏ヨВ鍘嬬洰褰曘?br>錛?6錛夊湪璇ョ洰褰曚笅瀹夎hello杞歡銆?br>3錛庡疄楠屾楠?br>錛?錛塵kdir ./auto銆?br>錛?錛塩p hello.* ./auto錛堝亣瀹氬師鍏堝湪“hello.c”鏂囨。鐩綍涓嬶級銆?br>錛?錛夊懡浠わ細autoscan銆?br>錛?錛変嬌鐢╒i緙栬緫configure.scan涓猴細

#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ(2.59)
AC_INIT(hello, 1.0)
AM_INIT_AUTOMAKE(hello,1.0)
AC_CONFIG_SRCDIR([hello.h])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT(Makefile)

錛?錛変繚瀛橀鍑猴紝騫墮噸鍛藉悕涓篶onfigure.in銆?br>錛?錛夎繍琛岋細aclocal銆?br>錛?錛夎繍琛岋細autoconf錛屽茍鐢╨s鏌ョ湅鏄惁鐢熸垚浜哻onfigure鍙墽琛屾枃妗c?br>錛?錛夎繍琛岋細autoheader銆?br>錛?錛夌敤Vi緙栬緫Makefile.am鏂囨。涓猴細

AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=hello.c hello.h

錛?0錛夎繍琛岋細automake銆?br>錛?1錛夎繍琛岋細./configure銆?br>錛?2錛夎繍琛岋細make銆?br>錛?3錛夎繍琛岋細./hello錛屾煡鐪嬬粨鏋滄槸鍚︽紜?br>錛?4錛夎繍琛岋細make install銆?br>錛?5錛夎繍琛岋細hello錛屾煡鐪嬬粨鏋滄槸鍚︽紜?br>錛?6錛夎繍琛岋細make dist銆?br>錛?7錛夊湪褰撳墠鐩綍涓嬭В鍘媓ello-1.0.tar.gz錛歵ar –zxvf hello-1.0.tar.gz銆?br>錛?8錛夎繘鍏ヨВ鍘嬬洰褰曪細cd ./hello-1.0銆?br>錛?9錛変笅闈㈠紑濮婰inux涓嬪父瑙佺殑瀹夎杞歡姝ラ錛?/configure銆?br>錛?0錛夎繍琛岋細make銆?br>錛?1錛夎繍琛岋細./hello錛堝湪姝e父瀹夎鏃惰繖涓姝ュ彲鐪佺暐錛夈?br>錛?2錛夎繍琛岋細make install銆?br>錛?3錛夎繍琛岋細hello錛屾煡鐪嬬粨鏋滄槸鍚︽紜?br>4錛庡疄楠岀粨鏋?br>鑳藉姝g‘浣跨敤autotools鐢熸垚Makefile錛屽茍涓旇兘澶熷畨瑁呮垚鍔熺煭灝忕殑Hello杞歡銆?br>

T.S Liu 2008-06-28 00:05 鍙戣〃璇勮
]]>
鑷姩鐢熸垚Makefile (杞?http://m.shnenglu.com/liu1061/articles/54793.htmlT.S LiuT.S LiuFri, 27 Jun 2008 04:33:00 GMThttp://m.shnenglu.com/liu1061/articles/54793.htmlhttp://m.shnenglu.com/liu1061/comments/54793.htmlhttp://m.shnenglu.com/liu1061/articles/54793.html#Feedback0http://m.shnenglu.com/liu1061/comments/commentRss/54793.htmlhttp://m.shnenglu.com/liu1061/services/trackbacks/54793.html鍦╰est鐩綍涓婃柊寤簊rc鍜宨nclude鐩綍錛屾簮鏂囦歡涓璼rc鐩綍涓嬶紝澶存枃浠跺湪include鐩綍銆傚湪src鐩綍鏂板緩Makefile.am鏂囦歡錛岀紪鍐橫akefile.am錛屽涓嬶細
AUTOMAKE_OPTIONS = foreign
INCLUDES= -I../include
bin_PROGRAMS = main
radio_SOURCES = main.c \
keyboard.c \
lcd.c \
setup.c \
storage.c
 
淇濆瓨閫鍑恒?/div>
榪斿洖test鐩綍錛屽啀鏂板緩Makefile.am鏂囦歡錛岀紪鍐橫akefile.am,濡備笅錛?/div>
SUBDIRS = src
淇濆瓨閫鍑恒?/div>
 
鎵ц 
autoscan
鐢熸垚configure.scan鏂囦歡 錛屽錛?/div>
autoscan.log  configure.scan  include  Makefile.am  src
緙栬緫configure.scan鏂囦歡錛屽錛?/div>
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.61)
AC_INIT(radio,1.0.0,[wenzel@163.com])
AM_INIT_AUTOMAKE
AC_CONFIG_SRCDIR([src/make.c])
AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
# Checks for libraries.
#AC_PROG_RANLIB
# Checks for header files.
AC_HEADER_DIRENT
AC_HEADER_STDC
AC_CHECK_HEADERS([fcntl.h stdlib.h string.h sys/time.h termios.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
# Checks for library functions.
AC_FUNC_CLOSEDIR_VOID
AC_FUNC_FORK
AC_PROG_GCC_TRADITIONAL
AC_FUNC_LSTAT
AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
AC_FUNC_MALLOC
AC_TYPE_SIGNAL
AC_CHECK_FUNCS([bzero memset strcasecmp strchr strrchr])
#AC_CONFIG_FILES([Makefile
#                 src/Makefile])
AC_OUTPUT(Makefile src/Makefile)
 
淇濆瓨閫鍑猴紝鏀瑰悕涓猴細mv configure.scan configure.in
鎵ц錛?/div>
touch NEWS README AUTHORS ChangeLog
鍐嶆墽琛岋細
autoreconf -fvi
 
鏈鍚庯紝鍙互鎵ц錛?/div>
./configure
閰嶇疆涓篈RM騫沖彴錛?/div>
 ./configure --host=arm --target=arm CC=arm-linux-gcc
灝卞彲浠ョ紪璇戜簡錛屽錛?/div>
make 
make install
make clean
make distclean


T.S Liu 2008-06-27 12:33 鍙戣〃璇勮
]]>GNU Automakehttp://m.shnenglu.com/liu1061/articles/54741.htmlT.S LiuT.S LiuFri, 27 Jun 2008 01:43:00 GMThttp://m.shnenglu.com/liu1061/articles/54741.htmlhttp://m.shnenglu.com/liu1061/comments/54741.htmlhttp://m.shnenglu.com/liu1061/articles/54741.html#Feedback0http://m.shnenglu.com/liu1061/comments/commentRss/54741.htmlhttp://m.shnenglu.com/liu1061/services/trackbacks/54741.html闃呰鍏ㄦ枃

T.S Liu 2008-06-27 09:43 鍙戣〃璇勮
]]>
杞竴涓猘utomake鐨勬暀紼?/title><link>http://m.shnenglu.com/liu1061/articles/54740.html</link><dc:creator>T.S Liu</dc:creator><author>T.S Liu</author><pubDate>Fri, 27 Jun 2008 01:42:00 GMT</pubDate><guid>http://m.shnenglu.com/liu1061/articles/54740.html</guid><wfw:comment>http://m.shnenglu.com/liu1061/comments/54740.html</wfw:comment><comments>http://m.shnenglu.com/liu1061/articles/54740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/liu1061/comments/commentRss/54740.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/liu1061/services/trackbacks/54740.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">浣跨敤 GNU autotools 鏀歸犱竴涓蔣浠墮」鐩?br><br>鏈枃涓嶆槸涓綃囪鑼冪殑鏁欑▼錛岃屾槸鐢ㄤ竴涓蔣浠墮」鐩綔涓轟緥瀛愶紝婕旂ず浣跨敤 GNU autotools 榪涜<br>杞歡綆$悊鐨勬濊礬鍜岃繃紼?br><br>鐩?褰?br><br>· 紺轟緥欏圭洰<br>· 杞歡甯冨眬<br>· Makefile 鍒嗘瀽<br>· GNU 鐨勮蔣浠墮鏍?br>· 鍑嗗 autotools<br>· 鏀歸犳枃浠跺竷灞<br>· autoscan<br>· configure.ac 鐨勫熀鏈粨鏋?br>· Makefile 鏂囦歡鐨勪駭鐢?br>· 緙栧啓 Makefile.am<br>杞歡鏍圭洰褰?Makefile.am<br>src/Makefile.am<br>data/Makefile.am<br>docs/Makefile.am<br>fonts/Makefile.am<br>images/Makefile.am<br>music/Makefile.am<br>sound/Makefile.am<br><br>· 榪愯 autotools<br>· SDL 搴撶殑渚︽祴<br>· 杞歡浣跨敤鐨勬暟鎹枃浠?br>· configure 閫夐」<br>· autotools 鑴氭湰<br>· 浣跨敤 configure 浜х敓鐨?Makefile<br>· 鏈緇堢殑 configure.ac 鏂囦歡<br>· 緇撴潫璇?br><br>紺轟緥欏圭洰<br><br>榪欓噷鍊熺敤浜?Wei Mingzhi <whistler_wmz@users.sf.net> 寮鍙戠殑楹誨皢娓告垙鏉ヨ繘琛屾紨紺猴紝鍦?br>姝わ紝鍏堝浠栬〃紺烘劅璋?<br><br>紺轟緥杞歡涓嬭澆:<br><br><br><br>杞歡甯冨眬<br><br>灝嗕笅杞界殑杞歡鍖呰В鍘嬪埌涓涓洰褰?br><br>$ cd ~/work<br>$ tar xjf mahjong.tar.bz2<br><br>鍙互鐪嬪埌榪欐槸涓涓吀鍨嬬殑 Windows 椋庢牸鐨勮蔣浠墮」鐩竷灞錛屽湪 mahjong 鐩綍涓嬫斁鐫紼嬪簭鐨?br>婧愮爜錛岀▼搴忚繍琛屾椂浣跨敤鐨勬暟鎹枃浠舵斁鍦ㄥ瓙鐩綍涓嬮潰<br><br>浣滆呰繕鎻愪緵浜嗕竴涓?Makefile錛屼竴涓?DOS 椋庢牸鐨?!play.bat 鎵瑰鐞嗘枃浠訛紝涓涓紪璇戝ソ鐨?br>mj.exe 鍙墽琛屾枃浠跺湪 Win32 騫沖彴涓婅繍琛?!play.bat 灝卞彲浠ョ洿鎺ヨ繍琛岀▼搴忓湪 Unix/<br>Linux 緋葷粺涓婏紝榪涘叆 mahjong 鐩綍錛岄敭鍏?make 鍛戒護錛屽鏋滀竴鍒囬『鍒╃殑璇濓紝灝嗙敓鎴?mj 鍙?br>鎵ц鏂囦歡錛岀劧鍚庡湪鍛戒護琛屼笂榪愯 ./mj 紼嬪簭錛屼篃鍙互鍚姩楹誨皢娓告垙<br><br>瀵逛簬涓涓?Windows 紼嬪簭鏉ヨ錛岃杞歡甯冨眬鍙互璇撮潪甯告竻鏅版槑浜嗕絾鍦?Unix/Linux 緋葷粺<br>涓婏紝鎵ц make 鍛戒護灝卞彲鑳介亣鍒伴棶棰橈細緙栬瘧鎵句笉鍒板ご鏂囦歡錛屾垨鑰呰繛鎺ユ壘涓嶅埌搴撴枃浠惰屽湪<br>make 鎴愬姛浠ュ悗錛岃繍琛岄夯灝嗙▼搴忓繀欏誨厛榪涘叆璇?majiong 鐩綍錛屾墠鑳芥墽琛岀▼搴忓鏋滆鍍?br>鍏朵粬鐨勭▼搴忎竴鏍鳳紝鍙互鍦ㄤ換鎰忕洰褰曚嬌鐢紝灝辮涓撻棬涓鴻繖涓涓▼搴忎慨鏀?PATH 鐜鍙橀噺錛屾垨<br>鑰呭啀鍐欎竴涓惎鍔ㄨ剼鏈紝騫跺皢瀹冨鍒跺埌 /usr/bin 榪欐牱鐨勭洰褰曚笅<br><br>Makefile 鍒嗘瀽<br><br>1 #<br>2 # Copyright (c) 2005, Wei Mingzhi. All rights reserved.<br>3 #<br>4 # Use, redistributions and modifications of this file is<br>5 # unrestricted provided the above copyright notice is<br>6 # preserved.<br>7 #<br>8<br>9 OBJ = \<br>10 bot.o config.o game.o general.o hand.o ini.o main.o \<br>11 player.o text.o tile.o util.o<br>12<br>13 HEADERS = \<br>14 bot.h game.h general.h hand.h ini.h main.h player.h \<br>15 tile.h<br>16<br>17 CC = gcc<br>18 CXX = g++<br>19<br>20 TARGET = mj<br>21<br>22 BASEFLAGS = -g3 -D_DEBUG=1<br>23 #BASEFLAGS = -s -O3<br>24<br>25 CFLAGS = ${BASEFLAGS} `sdl-config --cflags`<br>26 LDFLAGS = ${BASEFLAGS} `sdl-config --libs` -lSDL_image -lSDL_mixer -lSDL_ttf<br>27<br>28 all: ${TARGET}<br>29<br>30 ${TARGET}: ${OBJ}<br>31 ${CXX} ${LDFLAGS} -o ${TARGET} ${OBJ}<br>32<br>33 clean:<br>34 rm -f *.o ${TARGET}<br>35<br>36 distclean:<br>37 rm -f *.o ${TARGET}<br>38<br>39 %.o: %.cpp ${HEADERS}<br>40 ${CXX} ${CFLAGS} -c $< -o $@<br>41<br>42 %.o: %.c ${HEADERS}<br>43 ${CC} ${CFLAGS} -c $< -o $@<br><br>Makefile 寰堟竻妤氾細絎?20 琛屽畾涔?TARGET 鍙橀噺涓?mj錛岀 28 琛岃〃鏄?make 榛樿鐨?target<br>涔熷氨鏄敓鎴?`mj'錛涚 22 琛屽姞鍏ョ紪璇戞椂鐨勮皟璇曚俊鎭紱絎?2526 琛屼嬌鐢ㄤ簡 sdl-config 宸?br>鍏蜂睛嫻?SDL 寮鍙戝簱緙栬瘧閾炬帴淇℃伅錛屽湪 26 琛岃繕鎸囨槑闇瑕佽繛鎺?SDL_imageSDL_mixser 鍜?br>SDL_ttf 搴?br><br>GNU 鐨勮蔣浠墮鏍?br><br>涓涓爣鍑嗙殑 GNU 杞歡錛岀紪璇戝畨瑁呴兘鏄嬌鐢ㄤ笅闈笁涓楠?<br><br>$ ./configure<br>$ make<br>$ make install<br><br>configure 鑴氭湰榪愯鏃跺彲浠ヤ睛嫻嬬郴緇熺殑鐜錛岀‘瀹氳蔣浠跺畨瑁呯洰褰曪紝鐒跺悗鐢熸垚 Makefile 鏂?br>浠秏ake 璋冪敤緋葷粺涓殑緙栬瘧鍣ㄨ繘琛岀紪璇戝拰榪炴帴make install 灝嗚蔣浠跺畨瑁呭埌璁懼畾鐨勭洰褰?br><br><br>鐢ㄦ埛鎵ц configure 鏃跺彲浠ラ氳繃瀹冪殑鍛戒護琛屽弬鏁版寚瀹氳嚜宸辨墍闇鐨勭紪璇戦夐」錛屾瘮濡傚畨瑁呯洰褰?br>閫氳繃 --prefix=PREFIX 璁劇疆錛屽鏋滀笉鎸囧畾錛岀己鐪佹儏鍐典笅 PREFIX 鏄?/usr/local榛樿瀹?br>瑁呮椂錛屾墽琛屾枃浠跺畨瑁呭埌 /usr/local/bin 鐩綍錛屽簱瀹夎鍒?/usr/local/lib 鐩綍錛屾暟鎹枃<br>浠跺畨瑁呭埌 /usr/local/share 鐩綍<br><br>鐢變簬 GNU 鐨勮蔣浠墮鏍兼柟渚挎槗鐢紝閫氱敤鎬уソ錛屽彲縐繪鎬ч珮錛岀幇鍦ㄥぇ澶氭暟 Unix/Linux 緋葷粺涓?br>鐨勮嚜鐢辮蔣浠墮兘閲囩敤榪欑鏂瑰紡鍒嗗彂杞歡<br><br>鍑嗗 autotools<br><br>GNU autotools 涓昏鍖呭惈涓変釜杞歡錛?autoconf錛宎utomake 鍜?libtool褰撳墠嫻佽鐨勬湁鏂?br>鏃т袱涓増鏈紝鏈緥閲囩敤鐨勬槸鏂扮増鏈紝鍒嗗埆瀵瑰簲鐨勬槸錛?autoconf 2.59錛?automake 1.9.6<br>鍜?libtool 1.5.18<br><br>寰堝 linux 鍙戣鐗堥兘浼氶粯璁ゅ畨瑁呰繖鍑犱釜宸ュ叿鏈緥鏄湪 NetBSD 涓嬭繘琛屾搷浣滐紝瀹夎榪欏嚑涓?br>杞歡鍖呮槸閫氳繃 pkgsrc錛屽畠浠湪 pkgsrc 鐩綍涓?devel/autoconf devel/automake 鍜?br>devel/libtool<br><br>鏀歸犳枃浠跺竷灞<br><br>鍘熸潵杞歡鐨勬牴鐩綍涓嬮潰鏀劇殑鏄▼搴忕殑婧愮爜錛屾寜鐓?GNU 鐨勪範鎯紝灝嗗畠浠斁鍒?src 瀛愮洰褰曪紝<br>鏍圭洰褰曠暀緇?configure 榪欑被鏂囦歡浣跨敤錛屽叾浠栫殑鏁版嵁鏂囦歡淇濇寔涓嶅彉錛屼粛鐒舵斁鍦ㄥ悇鑷殑瀛愮洰褰?br><br><br>鍏堝垱寤轟竴涓洰褰?majiang錛岀劧鍚庢牴鎹渶瑕佸皢 mahjong 鐩綍涓嬬殑鏂囦歡澶嶅埗榪囨潵鐢變簬鏄負<br>Unix/Linux 緋葷粺榪涜鏀瑰啓錛屽師鐩綍閲岀殑 win32 鐩稿叧鏂囦歡灝變笉鐢ㄥ鍒跺埌鏂扮洰褰?br><br>$ cd ~/work/majiang<br>$ ls<br>data/ docs/ fonts/ images/ music/ sound/ src/<br><br>autoscan<br><br>autoconf 杞歡鍖呴噷闈㈢殑 autoscan 宸ュ叿鍙互鎵弿宸ヤ綔鐩綍錛岀敓鎴愪竴涓?configure.ac 鐨?br>妯℃澘鏂囦歡 configure.scan<br><br>$ cd ~/work/majiang<br>$ autoscan<br><br>autoscan 鍛戒護鍦ㄥ綋鍓嶇洰褰曠敓鎴愮殑 configure.scan 鏂囦歡鍐呭涓?<br><br>1 # -*- Autoconf -*-<br>2 # Process this file with autoconf to produce a configure script.<br>3<br>4 AC_PREREQ(2.59)<br>5 AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)<br>6 AC_CONFIG_SRCDIR([src/bot.h])<br>7 AC_CONFIG_HEADER([config.h])<br>8<br>9 # Checks for programs.<br>10 AC_PROG_CXX<br>11 AC_PROG_CC<br>12<br>13 # Checks for libraries.<br>14<br>15 # Checks for header files.<br>16 AC_HEADER_STDC<br>17 AC_CHECK_HEADERS([limits.h malloc.h stdlib.h string.h unistd.h])<br>18<br>19 # Checks for typedefs, structures, and compiler characteristics.<br>20 AC_HEADER_STDBOOL<br>21 AC_C_CONST<br>22 AC_C_INLINE<br>23<br>24 # Checks for library functions.<br>25 AC_FUNC_MALLOC<br>26 AC_FUNC_REALLOC<br>27 AC_CHECK_FUNCS([memset strcasecmp strchr strdup])<br>28 AC_OUTPUT<br><br># 鍙峰紑濮嬬殑琛屾槸娉ㄩ噴錛屽叾浠栭兘鏄?m4 瀹忓懡浠ゅ皢瀹冩敼鍚嶄負 configure.ac錛岀劧鍚庡湪姝ゅ熀紜涓?br>榪涜淇敼<br><br>configure.ac 鐨勫熀鏈粨鏋?br><br>configure.ac 鏂囦歡鏄?autoconf 鐨勮緭鍏ユ枃浠訛紝緇忚繃 autoconf 澶勭悊錛屽睍寮閲岄潰鐨?m4 瀹忥紝<br>杈撳嚭鐨勬槸 configure 鑴氭湰<br><br>絎?4 琛屽0鏄庢湰鏂囦歡瑕佹眰鐨?autoconf 鐗堟湰錛屽洜涓烘湰渚嬩嬌鐢ㄤ簡鏂扮増鏈?2.59錛屾墍浠ュ湪姝ゆ敞鏄?br><br><br>絎?5 琛?AC_INIT 瀹忕敤鏉ュ畾涔夎蔣浠剁殑鍚嶇О鍜岀増鏈瓑淇℃伅錛屾湰渚嬪啓鎴?<br><br>AC_INIT(majiang, 1.0)<br><br>榪欓噷鐪佺暐浜?BUG-REPORT-ADDRESS 鍙傛暟錛屽畠鏄彲閫夐」錛屼竴鑸啓鎴愪綔鑰呯殑閭歡鍦板潃<br><br>絎?6 琛?AC_CONFIG_SRCDIR 瀹忛氳繃渚︽祴鎵鎸囧畾鐨勬簮鐮佹枃浠舵槸鍚﹀瓨鍦紝鏉ョ‘瀹氭簮鐮佺洰褰曠殑鏈?br>鏁堟у彲浠ラ夋嫨婧愮爜鐩綍涓殑浠諱綍涓涓枃浠朵綔涓轟唬琛紝姣斿灝?autoscan 閫夋嫨鐨?bot.h<br>鏂囦歡鏀規垚 main.cpp:<br><br>AC_CONFIG_SRCDIR([src/main.cpp])<br><br>瀹忓弬鏁頒腑浣跨敤 `[ ]'錛屾槸涓轟簡琛ㄦ槑鍏朵腑鐨勫瓧絎︿覆鏄竴涓暣浣?br><br>絎?7 琛岀殑 AC_CONFIG_HEADER 瀹忕敤浜庣敓鎴?config.h 鏂囦歡錛岄噷闈㈠瓨鏀?configure 鑴氭湰渚?br>嫻嬪埌鐨勪俊鎭鏋滅▼搴忛渶瑕佷嬌鐢ㄥ叾涓殑瀹氫箟錛屽氨鍦ㄦ簮鐮佷腑鍔犲叆<br><br>#include <config.h><br><br>鍏朵粬鐨勪竴浜涘畯鏄爣鍑嗙殑渚︽祴榪囩▼錛屽彲浠ヤ繚鐣欎笉鍔?br><br>configure.ac 鏂囦歡瑕佹眰 AC_INIT 瀹忓繀欏繪斁鍦ㄥ紑澶翠綅緗紝AC_OUTPUT 鏀懼湪鏂囦歡鏈紝涓棿鐢?br>鏉ユ嫻嬬紪璇戠幆澧冪殑鍚勭瀹忔病鏈夌壒鍒殑鍏堝悗嬈″簭瑕佹眰錛岀敱瀹忎箣闂寸浉浜掑叧緋誨喅瀹?br><br>Makefile 鏂囦歡鐨勪駭鐢?br><br>鍓嶉潰 configure.ac 閲岄潰鐨勫畯錛屼富瑕佷綔鐢ㄦ槸渚︽祴緋葷粺錛屽茍娌℃湁緙栬瘧鐩稿叧鐨勮緗洜涓鴻繖浜?br>淇℃伅鏄啓鍦?Makefile.am 閲岄潰錛岀劧鍚庣敤 automake 宸ュ叿杞崲鎴?Makefile.in錛宑onfigure<br>鑴氭湰鎵ц鏃跺啀璇誨彇 Makefile.in錛屽茍涓庝睛嫻嬩俊鎭竴璧峰啓鍒?Makefile 鏂囦歡<br><br>鍦?autotools 鐨勫懡鍚嶄範鎯腑錛屽悗緙 ac 鐨勬枃浠舵槸 autoconf 鐨勮緭鍏ユ枃浠訛紝鍚庣紑 am 鐨勬枃<br>浠舵槸 automake 鐨勮緭鍏ユ枃浠訛紝鍚庣紑 in 鐨勬枃浠舵槸 configure 鐨勮緭鍏ユ枃浠?autoconf 鏃х増<br>鏈腑 configure.in 絳夊悓浜?configure.ac錛岃櫧鐒舵柊鐗堟湰涔熷彲浠ヨ瘑鍒紝浣嗗畠涓嶇鍚堝懡鍚嶈鍒?br>錛屾墍浠ユ柊鐗堟湰鐨勬枃浠跺簲璇ヤ嬌鐢?ac 鍚庣紑<br><br>綆鍗曠殑 Makefile.in 鍙互鎵嬪姩緙栧啓錛屽鏋滀嬌鐢?automake 浜х敓錛岄渶瑕佸湪 configure.ac<br>閲岄潰鍔犲叆 AM_INIT_AUTOMAKE 瀹忚繘琛屽0鏄?br><br>瑕佽緭鍑?Makefile錛岃繕闇瑕佸湪 configure.ac 涓嬌鐢?AC_CONFIG_FILES 瀹忔寚鏄庤瀹忓茍涓?br>鏄彧澶勭悊 Makefile錛岃屾槸灝?FILE.in 鏂囦歡杞崲涓?FILE 鏂囦歡鍥犱負 make 鍙互閬嶅巻瀛愮洰<br>褰曪紝濡傛灉瀛愮洰褰曚腑瀛樺湪 Makefile錛屼篃灝嗗悓鏃跺鐞嗗湪鏈緥涓?src 鐩綍涓嬫槸婧愮爜錛屽叾浠栨槸<br>鏁版嵁鏂囦歡錛屽彲浠ヤ嬌鐢ㄥ崟鐙竴涓?Makefile 鏀懼湪鏍圭洰褰曚笅闈紝涔熷彲浠ョ敤澶氫釜 Makefile鐢變簬<br>姣忎釜瀛愮洰褰曠殑 Makefile 鍙鐞嗘湰鐩綍鐨勬枃浠訛紝鍒嗗伐鏄庣‘錛屾槸妯″潡鍖栫殑鏂規硶錛屾帹鑽愪嬌鐢?br>鍥犳鍦?configure.ac 閲岄潰澧炲姞涓嬮潰鐨勫畯錛岃〃紺鴻蔣浠舵牴鐩綍鍜屽瓙鐩綍涓兘闇瑕佺敓鎴?br>Makefile 鏂囦歡:<br><br>AC_CONFIG_FILES([Makefile<br>src/Makefile<br>data/Makefile<br>docs/Makefile<br>fonts/Makefile<br>images/Makefile<br>music/Makefile<br>sound/Makefile])<br><br>緙栧啓 Makefile.am<br><br>杞歡鏍圭洰褰?Makefile.am<br><br>鐢變簬璇ョ洰褰曚笅闈繚瀛樼殑鏄笌 autotools 鐩稿叧鐨勬枃浠訛紝娌℃湁闇瑕佺紪璇戝畨瑁呯殑鏂囦歡錛屾墍浠ュ彧娉?br>鏄庨渶瑕佽繘涓姝ュ鐞嗙殑瀛愮洰褰曚俊鎭?<br><br>SUBDIRS = src data docs fonts images music sound<br><br>src/Makefile.am<br><br>姝ょ洰褰曢噷鏄簮浠g爜錛屾渶緇堢敓鎴?mj 鍙墽琛屾枃浠訛紝鍦ㄥ叾 Makefile.am 涓啓鍏?br><br>bin_PROGRAMS = mj<br><br>mj_SOURCES = bot.h \<br>bot.cpp \<br>config.cpp \<br>game.h \<br>game.cpp \<br>general.h \<br>general.cpp \<br>hand.h \<br>hand.cpp \<br>ini.h \<br>ini.cpp \<br>main.h \<br>main.cpp \<br>player.h \<br>player.cpp \<br>text.cpp \<br>tile.h \<br>tile.cpp \<br>util.cpp<br><br>am 鏂囦歡閲屽彉閲忛氳繃鍛藉悕鍒ゆ柇鍏跺惈涔夛紝淇濈暀鐨勫瓧絎︿覆闂寸敤涓嬪垝綰垮垎闅?br><br>bin_PROGRAMS 琛ㄧず鍒楀嚭浜岃繘鍒剁殑紼嬪簭錛屽間負澶氫釜絀烘牸鍒嗗紑鐨勭▼搴忓垪琛紝榪欓噷浠呮湁涓涓?mj<br><br><br>mj_SOURCES 鍒楀嚭鐨勬槸緇勬垚 mj 紼嬪簭鐨勬枃浠訛紝鏂囦歡姣旇緝澶氱殑鏃跺欙紝姣忎釜鏂囦歡鍐欐垚涓琛屽鏄撶湅<br>娓呮<br><br>data/Makefile.am<br><br>鏈洰褰曠殑鏂囦歡鏄?mj 榪愯鏃惰鍙栫殑鏁版嵁錛屽畠鐨?Makefile.am 鍙互榪欐牱鍐?br><br>mjdatadir = $(pkgdatadir)/data<br>mjdata_DATA = mj.ini titles.txt<br>EXTRA_DIST = $(mjdata_DATA)<br><br>鍥犱負 datadir 鏄繚鐣欑殑鍏抽敭瀛楋紝鎵浠ョ敤 mjdatadir 浠f浛錛宲kgdatadir 鎸囧悜 $prefix/<br>share/FULL-PACKAGE-NAME 鐩綍錛屽洜涓哄湪 AC_INIT 涓凡緇忓0鏄?FULL-PACKAGE-NAME 涓?br>majiang錛宲kgdatadir 灝辯瓑浜?$prefix/share/majiang 鐩綍<br><br>鍏朵腑 mjdatadir 璁?data 鐩綍涓嬬殑鏂囦歡瀹夎鍒?$prefix/share/majiang/data 鐩綍閲岄潰<br><br>mjdata_DATA 鍒楀嚭姝ょ洰褰曚笅闇瑕佸畨瑁呯殑鏂囦歡錛岀劧鍚庣敤 EXTRA_DIST 鍙橀噺娉ㄦ槑<br><br>浣欎笅鍑犱釜瀛愮洰褰曢兘涓?data 鐩綍綾諱技<br><br>docs/Makefile.am<br><br>docsdir = $(pkgdatadir)/docs<br>docs_DATA = gkai00mp.txt gpl.html readme.txt<br>EXTRA_DIST = $(docs_DATA)<br><br>fonts/Makefile.am<br><br>fontsdir = $(pkgdatadir)/fonts<br>fonts_DATA = brush.ttf gkai00mp.ttf<br>EXTRA_DIST = $(fonts_DATA)<br><br>images/Makefile.am<br><br>imagesdir = $(pkgdatadir)/images<br>images_DATA = bgame.jpg \<br>mjgirl1a.jpg \<br>mjgirl2a.jpg \<br>mjgirl3a.jpg \<br>mjgirl4a.jpg \<br>tiles.jpg \<br>electron.jpg \<br>mjgirl1b.jpg \<br>mjgirl2b.jpg \<br>mjgirl3b.jpg \<br>mjgirl4b.jpg \<br>gameover.jpg \<br>mjgirl1c.jpg \<br>mjgirl2c.jpg \<br>mjgirl3c.jpg \<br>mjgirl4c.jpg<br>EXTRA_DIST = $(images_DATA)<br><br>music/Makefile.am<br><br>musicdir = $(pkgdatadir)/music<br>music_DATA = bet.ogg \<br>bonus.ogg \<br>music.ogg \<br>musicb.ogg \<br>musice.ogg \<br>win.ogg \<br>bgame.ogg \<br>gameover.ogg \<br>music1.ogg \<br>musicc.ogg \<br>musicp.ogg<br>EXTRA_DIST = $(music_DATA)<br><br>sound/Makefile.am<br><br>sounddir = $(pkgdatadir)/sound<br>sound_DATA = boom.wav \<br>ding.wav \<br>discard.wav \<br>discard2.wav \<br>flash.wav \<br>snd1.wav \<br>snd2.wav \<br>snd3.wav \<br>snd4.wav<br>EXTRA_DIST = $(sound_DATA)<br><br>榪愯 autotools<br><br>鍑嗗濂?configure.ac 鍜?Makefile.am錛屽氨鍙互鐢?autotools 鐨勫懡浠ゅ鐞嗚繖浜涙枃浠跺紑濮?br>鍙兘浼氬嚭鐜伴敊璇紝涓嶈繃娌″叧緋伙紝鍙互鎸夌収閿欒淇℃伅鐨勬彁紺洪愭榪涜淇<br><br>棣栧厛瑕佷嬌鐢ㄧ殑鏄?aclocal 鍛戒護錛屽畠鏍規嵁 configure.ac 鐨勫畾涔夛紝灝嗛渶瑕佷嬌鐢ㄧ殑 m4 瀹忓畾<br>涔夊鍒跺埌 aclocal.m4 閲岄潰緙虹渷鏃訛紝鎼滅儲 m4 瀹忔槸浠?autoconf 鐨勫畨瑁呯洰褰曞拰緋葷粺鐨?br>aclocal 鐩綍濡傛灉闇瑕佷嬌鐢ㄥ叾浠栬礬寰勪笅鐨勫畯錛屽彲浠ラ氳繃鍛戒護琛岀殑 -I 閫夐」鎸囧畾<br><br>鎺ョ潃浣跨敤 autoheader 鍛戒護錛屽畠璐熻矗鐢熸垚 config.h.in 鏂囦歡錛岃繖閲岄潰鐨?C 璇█瀹忓畾涔変篃<br>鏄氳繃瑙f瀽 configure.ac 浜х敓<br><br>涓嬫潵榪愯 automake 鍛戒護澶勭悊 Makefile.am錛岀敓鎴?Makefile.inGNU 瀵硅嚜宸卞彂甯冪殑杞歡<br>鏈変弗鏍肩殑瑙勮寖錛屾瘮濡傚繀欏婚檮甯﹁鍙瘉澹版槑鏂囦歡 COPYING 絳夌瓑錛屽惁鍒?automake 鎵ц鏃朵細<br>鎶ラ敊automake 鎻愪緵浜嗕笁縐嶈蔣浠剁瓑綰э細 foreigngnu 鍜?gnits錛岃鐢ㄦ埛閫夋嫨閲囩敤錛岄粯璁?br>絳夌駭涓?gnu鏈緥浣跨敤 foreign 絳夌駭錛屽畠鍙嫻嬪繀欏葷殑鏂囦歡鏈変竴浜涘繀闇鐨勮剼鏈枃浠跺彲浠?br>浠?automake 杞歡鍖呴噷澶嶅埗榪囨潵錛屽湪鎵ц鏃朵嬌鐢?--add-missing 閫夐」鍙互璁?automake 鑷?br>鍔ㄦ坊鍔狅紝榛樿鏂瑰紡鏄噰鐢ㄧ鍙烽摼鎺ワ紝濡傚姞涓?--copy 閫夐」鍒欏彲浠ヤ嬌鐢ㄥ鍒舵柟寮忔湰渚嬩腑錛?br>automake 鐨勫懡浠ゅ涓?<br><br>$ automake --foreign --add-missing --copy<br><br>鏈鍚庯紝浣跨敤 autoconf 鍛戒護鐢熸垚 configure 鑴氭湰鏂囦歡<br><br>SDL 搴撶殑渚︽祴<br><br>榪欎釜楹誨皢娓告垙鏄熀浜?SDL 搴撳紑鍙戠殑錛屼竴鑸郴緇熼粯璁や笉浼氬畨瑁咃紝鍥犳 configure 鑴氭湰鐨勪竴<br>涓換鍔″氨鏄鏌ョ敤鎴風殑緋葷粺涓槸鍚︽湁璇ヨ蔣浠跺寘<br><br>autoconf 鎻愪緵浜嗗緢澶氬畯鍙互瀹炵幇渚︽祴鍔熻兘錛屼絾棣栧厛搴旇鏌ョ湅 SDL 杞歡鍖呮槸鍚﹀凡緇忔彁渚涚浉<br>搴旂殑瀹忛氳繃 pkgsrc 鐨勫伐鍏峰彲浠ョ湅鍒?<br><br>$ pkg_info -L SDL|grep m4<br>/usr/pkg/share/aclocal/sdl.m4<br><br>鍗?SDL 杞歡鍖呮彁渚涗簡涓涓?sdl.m4 瀹忥紝鏀懼湪緋葷粺鐨?aclocal 鐩綍涓?br><br>鍦ㄨ繖涓畯鏂囦歡鐨勬敞閲婁腑璇存槑浜嗕嬌鐢ㄧ殑鏂規硶:<br><br>dnl AM_PATH_SDL([MINIMUM-VERSION,[ACTION-IF-FOUND[,ACTION-IF-NOT-FOUND]]])<br>dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS<br><br>涔熷氨鏄鍦?configure.ac 閲岄潰璋冪敤 AM_PATH_SDL 瀹忥紝灝卞彲浠ヤ睛嫻?SDL鎵懼埌 SDL 搴撲互<br>鍚庯紝璇ュ畯榪樿緭鍑?SDL_CFLAGS 鍜?SDL_LIBS 緙栬瘧榪炴帴閫夐」錛屽畠浠疄闄呬笂灝辨槸璋冪敤<br>`sdl-config --cflags` 鍜?`sdl-config --libs`<br><br>浜庢槸鍦?configure.ac 閲岄潰鍔犲叆 AM_PATH_SDL 瀹?br><br># Checks for libraries.<br>SDL_VERSION=1.2.0<br>AM_PATH_SDL($SDL_VERSION,<br>:,<br>AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])<br>)<br><br>褰撳墠 SDL 鐨勭増鏈負 1.2.9錛屼簬鏄?MINIMUM-VERSION 灝辮涓?1.2.0濡傛灉鍦ㄧ郴緇熶腑渚︽祴鍒?br>闇瑕佺殑搴擄紝娌′粈涔堥澶栫殑鎿嶄綔錛屽亣濡傛病鏈夋壘鍒幫紝鍒欑粰鍑洪敊璇俊鎭?br><br>AM_PATH_SDL 杈撳嚭 SDL_CFLAGS 鍜?SDL_LIBS 緙栬瘧鍙傛暟錛岄渶瑕佹坊鍔犲埌 src/Makefile.am 閲?br>闈?<br><br>mj_CPPFLAGS = @SDL_CFLAGS@<br>mj_LDFLAGS = @SDL_LIBS@<br><br>鐢?`@' 鍖呭洿鐨勫彉閲忎細鍦?configure 鎵ц鏃惰鏇挎崲<br><br>浠?mahjong 鐨?Makefile 涓湅鍒幫紝榪欎釜杞歡榪樿浣跨敤 SDL_imageSDL_mixser 鍜?br>SDL_ttf 搴擄紝浣嗗畠浠笉灞炰簬 SDL 杞歡鍖咃紝闇瑕佸彟澶栧畨瑁呯敱浜庤繖浜涘簱鍦?sdl.m4 涓篃娌?br>鏈夎繘琛屼睛嫻嬶紝鎵浠ヨ嚜宸辮鍐欎竴浜涜剼鏈?br><br>autotools 鎻愪緵浜嗕竴涓?AC_CHECK_LIB 瀹忓彲浠ョ敤鏉ユ嫻嬪簱錛岀幇鍦ㄥ氨浣跨敤瀹冩潵媯嫻嬭繖鍑犱釜<br>SDL 搴撹瀹忕殑璇硶涓?<br><br>AC_CHECK_LIB (LIBRARY, FUNCTION, [ACTION-IF-FOUND],<br>[ACTION-IF-NOT-FOUND], [OTHER-LIBRARIES])<br><br>絎竴涓弬鏁版槸搴撳悕錛岀浜屼釜鍙傛暟鏄簱涓殑涓涓嚱鏁幫紝絎笁涓弬鏁版槸媯嫻嬪埌浠ュ悗榪涜鐨勫姩浣?br>錛岀鍥涗釜鍙傛暟鏄湭媯嫻嬪埌浠ュ悗鐨勫姩浣滐紝絎簲涓弬鏁版槸鍏朵粬鐨勫簱<br><br>瀵逛簬 SDL_imageSDL_mixer 鍜?SDL_ttf 瀵瑰簲鐨勪嬌鐢ㄦ柟娉曞涓?<br><br># Check for SDL_image library<br>AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, , AC_MSG_ERROR([<br>*** Unable to find SDL_image libary with PNG support<br>(http://www.libsdl.org/projects/SDL_image/)<br>]), `sdl-config --libs`)<br><br># Check for SDL_mixer library<br>AC_CHECK_LIB(SDL_mixer, Mix_LoadOGG_RW, , AC_MSG_ERROR([<br>*** Unable to find SDL_mixer libary with OGG support<br>(http://www.libsdl.org/projects/SDL_mixer/)<br>]), `sdl-config --libs`)<br><br># Check for SDL_ttf library<br>AC_CHECK_LIB(SDL_ttf, TTF_OpenFont, , AC_MSG_ERROR([<br>*** Unable to find SDL_ttf libary<br>(http://www.libsdl.org/projects/SDL_ttf/)<br>]), `sdl-config --libs`)<br><br>杞歡浣跨敤鐨勬暟鎹枃浠?br><br>鍘熸潵 mj 璇誨彇鏁版嵁鏄粠鎵ц鏃剁洰褰曠殑瀛愮洰褰曚腑璇誨彇錛屼絾鐜板湪灝嗘暟鎹斁鍒?$prefix/share/<br>majiang 鐩綍涓嬶紝闇瑕侀氳繃涓縐嶉斿緞璁╃▼搴忓彲浠ョ煡閬撴暟鎹枃浠惰瀹夋斁鐨勪綅緗?br><br>瑕佽揪鍒拌繖涓洰鐨勬湁寰堝鏂規硶錛岃繖閲岄噰鐢ㄦ渶鐩存帴鐨勪竴縐嶏細灝嗘暟鎹枃浠跺畨瑁呯洰褰曞彉閲忛氳繃<br>CPPFLAGS 緙栬瘧鍙傛暟浼犻掔粰紼嬪簭<br><br>浜庢槸淇敼 src/Makefile.am 鐨?CPPFLAGS:<br><br>mj_CPPFLAGS = @SDL_CFLAGS@ -DDATA_DIR=\"${datadir}/majiang\"<br><br>鐩稿簲鍦頒慨鏀?src 鐩綍涓嬬殑婧愮爜錛屽湪璇誨彇鏁版嵁鏂囦歡鐨勫湴鏂癸紝灝嗚鍙栫殑璺緞鏀規垚 DATA_DIR<br>閲屽搴旂殑瀛愮洰褰曚緥濡傦紝鍘熷厛 config.cpp 涓槸:<br><br>void LoadCfg()<br>{<br>cfg.Load("data/mj.ini");<br>}<br><br>鐜版敼鎴?<br><br>void LoadCfg()<br>{<br>char ini_file[260];<br>sprintf(ini_file, "%s/data/mj.ini", DATA_DIR);<br>cfg.Load(ini_file);<br>}<br><br>configure 閫夐」<br><br>鍘熸潵 mahjong 鐨?Makefile 絎?22 琛屽畾涔変簡 debug 璋冭瘯閫夐」錛岃櫧鐒朵篃鍙互鐓ф牱鏀懼埌 src/<br>Makefile.am 鐨?CPPFLAGS 閲岄潰瀹炵幇錛屼絾 autotools 鎻愪緵浜嗕竴縐嶆洿鐏墊椿鐨勬満鍒?br><br>configure 鑴氭湰鍙互閫氳繃閫夐」鏉ヨ緗紪璇戝弬鏁幫紝鐜板鍔犱竴涓?--enable-debug 閫夐」錛岄渶瑕?br>DEBUG 鏃訛紝鍦ㄥ懡浠よ涓婂姞涓婂畠鏉ユ墦寮錛岄粯璁ゅ垯鍏抽棴<br><br>榪欓」鍔熻兘鏄嬌鐢?AC_ARG_ENABLE 瀹忓疄鐜?<br><br>AC_ARG_ENABLE (FEATURE, HELP-STRING, [ACTION-IF-GIVEN],<br>[ACTION-IF-NOT-GIVEN])<br><br>鍏朵腑 FEATURE 鏄悕縐幫紝HELP_STRING 涓鴻鏄庝俊鎭紝鍦ㄤ嬌鐢?./configure --help 鏃跺彲浠ョ湅<br>鍒版渶鍚庝袱涓垎鍒搴旀墦寮鍜屽叧闂椂鐨勬搷浣?br><br>鐜板湪灝?DEBUG 鍔熻兘鍔犲叆 configure.ac:<br><br>AC_ARG_ENABLE(debug,<br>[ --enable-debug turn on debug],<br>CXXFLAGS="$CXXFLAGS -g3 -D_DEBUG=1")<br><br>autotools 鑴氭湰<br><br>姣忔淇敼浜?configure.ac 鎴?Makefile.am 絳?autotools 杈撳叆鏂囦歡鍚庨兘闇瑕佸啀嬈¤繍琛?br>aclocalautomakeautoconf 榪欎簺鍛戒護錛屼負浜嗘柟渚胯搗瑙侊紝鍙互灝嗕粬浠斁鍒頒竴涓?shell<br>鑴氭湰閲岄潰錛屼緥濡?<br><br>#! /bin/sh<br>set -x<br>aclocal<br>autoheader<br>automake --foreign --add-missing --copy<br>autoconf<br><br>灝嗕笂闈㈠唴瀹逛繚瀛樺埌 autogen.sh 鏂囦歡錛屽茍淇敼鏂囦歡灞炴т負 755姣忔闇瑕侀噸鏂扮敓鎴?br>configure 鑴氭湰鏃訛紝鎵ц ./autogen.sh 鍗沖彲<br><br>浣跨敤 configure 浜х敓鐨?Makefile<br><br>鐜板湪鎵ц ./autogen.sh 寰楀埌鐨?configure 鑴氭湰宸茬粡鍙互姝e父宸ヤ綔浜嗭紝榪涘叆 ~/work/<br>majiang 鐩綍錛屾墽琛?./configure錛屽彲浠ョ湅鍒板畠媯鏌ョ郴緇熺殑榪囩▼錛屽寘鎷?SDL 鍜?br>SDL_image 絳夊簱鐨勪睛嫻嬬粨鏋滀嬌鐢?./configure --help 鍙互鐪嬪埌 autotools 鎻愪緵鐨勫府<br>鍔╀俊鎭?br><br>configure 鎵ц鐨勫畬姣曪紝杈撳嚭杞歡鏍圭洰褰曞拰鍑犱釜瀛愮洰褰曚笅闈㈢殑 Makefile 鏂囦歡榪欎簺<br>Makefile 鏈夊嚑涓父鐢ㄧ殑 target:<br><br>· make all<br><br>涓嶅姞浠諱綍 target錛岄粯璁ゅ氨鏄?all錛屼綔鐢ㄦ槸緙栬瘧杞歡<br><br>· make install<br><br>瀹夎杞歡鍖咃紝濡傛灉瀹夎鍒扮郴緇熺洰褰曪紝闇瑕?root 鏉冮檺<br><br>· make clean<br><br>娓呴櫎緙栬瘧浜х敓鐨勭洰鏍囨枃浠?br><br>· make distclean<br><br>鍙互鍚屾椂娓呴櫎緙栬瘧鐨勭粨鏋滃拰 configure 杈撳嚭鐨勬枃浠?br><br>· make tags<br><br>鐢熸垚 etags 浣跨敤鐨?TAGS 鏂囦歡<br><br>· make dist<br><br>鐢熸垚杞歡鍙戝竷鍖咃紝涓?tar.gz 鏍煎紡鐨勫帇緙╁寘錛屾枃浠跺悕鐢辮蔣浠跺寘鍚嶅拰鐗堟湰緇勬垚<br><br>鏈緇堢殑 configure.ac 鏂囦歡<br><br># -*- Autoconf -*-<br># Process this file with autoconf to produce a configure script.<br><br>AC_PREREQ(2.59)<br>AC_INIT([majiang], [1.0])<br>AC_CONFIG_SRCDIR([src/main.cpp])<br>AC_CONFIG_HEADER([config.h])<br><br>AC_CANONICAL_HOST<br>AC_CANONICAL_TARGET<br>AM_INIT_AUTOMAKE<br><br># Checks for programs.<br>AC_PROG_CXX<br>AC_PROG_CC<br><br>AC_LANG(C++)<br><br># Checks for libraries.<br>SDL_VERSION=1.2.0<br>AM_PATH_SDL($SDL_VERSION,<br>:,<br>AC_MSG_ERROR([*** SDL version $SDL_VERSION not found!])<br>)<br><br># Check for SDL_image library<br>AC_CHECK_LIB(SDL_image, IMG_LoadPNG_RW, , AC_MSG_ERROR([<br>*** Unable to find SDL_image libary with PNG support<br>(http://www.libsdl.org/projects/SDL_image/)<br>]), `sdl-config --libs`)<br><br># Check for SDL_mixer library<br>AC_CHECK_LIB(SDL_mixer, Mix_LoadOGG_RW, , AC_MSG_ERROR([<br>*** Unable to find SDL_mixer libary with OGG support<br>(http://www.libsdl.org/projects/SDL_mixer/)<br>]), `sdl-config --libs`)<br><br># Check for SDL_ttf library<br>AC_CHECK_LIB(SDL_ttf, TTF_OpenFont, , AC_MSG_ERROR([<br>*** Unable to find SDL_ttf libary<br>(http://www.libsdl.org/projects/SDL_ttf/)<br>]), `sdl-config --libs`)<br><br># Checks for header files.<br>AC_HEADER_STDC<br>AC_CHECK_HEADERS([limits.h malloc.h stdlib.h string.h unistd.h])<br><br># Checks for typedefs, structures, and compiler characteristics.<br>AC_HEADER_STDBOOL<br>AC_C_CONST<br>AC_C_INLINE<br><br># Checks for library functions.<br>AC_FUNC_MALLOC<br>AC_FUNC_REALLOC<br>AC_CHECK_FUNCS([memset strcasecmp strchr strdup])<br><br>AC_ARG_ENABLE(debug,<br>[ --enable-debug turn on debug],<br>CXXFLAGS="$CXXFLAGS -g3 -D_DEBUG=1")<br><br>AC_CONFIG_FILES([Makefile<br>src/Makefile<br>data/Makefile<br>docs/Makefile<br>fonts/Makefile<br>images/Makefile<br>music/Makefile<br>sound/Makefile])<br>AC_OUTPUT<br><br>緇撴潫璇?br><br>GNU 鐨勫緢澶氬伐鍏風粡甯哥粰浜轟竴縐嶆劅瑙? 鍔熻兘寰堝己澶э紝浣嗕篃寰堥毦瀛utotools 鍙互璇存槸榪欑被<br>宸ュ叿鐨勪竴涓吀鍨嬶紝瀹冮渶瑕佺敤鎴峰 shellmake杞歡緙栬瘧m4 瀹忚璦錛屼互鍙?Unix/Linux<br>鎿嶄綔緋葷粺鍚勬柟闈㈢煡璇嗛兘鏈変竴瀹氱殑浜嗚В浣跨敤鏃跺張瑕?autoconf automakelibtool 澶氫釜<br>宸ュ叿鐩鎬簰閰嶅悎^1錛屽鏋滆緇欒蔣浠跺鍔犲浗闄呭寲鍔熻兘錛岃繕瑕佸啀浜嗚В鍜屾帉鎻?gettextpo 絳夊伐鍏?br>鍜岃鍒?br><br>涓庡涔犲叾浠栫煡璇嗕竴鏍鳳紝鎵璋撻毦錛屽叾瀹炴槸涓嶄簡瑙o紝涓嶇啛鎮夋湰鏂囬氳繃涓涓寖渚嬫紨紺轟嬌鐢?br>autotools 鐨勮繃紼嬶紝鏄涓嶄簡瑙g殑浜虹啛鎮夎繖涓伐鍏蜂絾鐪熸鐨勭悊瑙o紝榪橀渶瑕佸皢瀹冭繍鐢ㄥ埌鑷?br>宸辯殑杞歡欏圭洰褰撲腑錛屼笉鏂湴瀹炶返錛屼笉鏂湴鎬濊冨拰鎬葷粨<br><br><br><br><br>鑴氭敞<br><br>... 澶氫釜宸ュ叿鐩鎬簰閰嶅悎^1<br>鐢變簬鏈緥杞歡涓病鏈夌敓鎴愬簱鏂囦歡錛屾墍浠ユ病鏈夋秹鍙?libtool 宸ュ叿鐨勪嬌鐢?br></span> <img src ="http://m.shnenglu.com/liu1061/aggbug/54740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/liu1061/" target="_blank">T.S Liu</a> 2008-06-27 09:42 <a href="http://m.shnenglu.com/liu1061/articles/54740.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>榪愮敤autoconf鍜宎utomake鑷姩鐢熸垚Makefil http://m.shnenglu.com/liu1061/articles/54675.htmlT.S LiuT.S LiuThu, 26 Jun 2008 07:23:00 GMThttp://m.shnenglu.com/liu1061/articles/54675.htmlhttp://m.shnenglu.com/liu1061/comments/54675.htmlhttp://m.shnenglu.com/liu1061/articles/54675.html#Feedback0http://m.shnenglu.com/liu1061/comments/commentRss/54675.htmlhttp://m.shnenglu.com/liu1061/services/trackbacks/54675.html瀵逛簬涓涓猆NIX/Linux涓婥紼嬪簭鍛樻潵璇達紝涓涓瘮杈冮夯鐑︾殑宸ヤ綔灝辨槸鍐欒嚜宸辯殑Makefile銆?
鍙兘浣犳湁濡備笅緇忛獙錛氬啓涓涓畝鍗曠殑C紼嬪簭錛岃嚜宸卞鍐欏嚑琛実cc鍛戒護灝辨妸紼嬪簭鍙樻垚鍙墽琛岀殑浜嗭紱鍐欎竴涓◢寰鏉傜偣鐨勭▼搴忥紝婧愭枃浠朵釜鏁板彲鑳藉湪30涓乏鍙籌紝榪樻槸鍐欎竴琛岃鐨刧cc鍛戒護灝遍夯鐑︿簡錛屼綘鍙兘鎯沖埌鍐欎釜makefile錛屼綘鍙兘涔熷湪榪欐牱鍋氱潃錛涗絾浣犳煇涓澶╀細鍙戠幇浣犲啓鐨勮繖涓狹akefile鍙兘涓嶆槸涓涓墍鏈?UNIX/Linux綾繪搷浣滅郴緇熶笅閫氱敤鐨凪akefile錛屾瘮濡傛煇浜轟笅杞戒簡浣犵殑紼嬪簭鍘諱粬鑷繁鐢佃剳涓婂彲鑳絤ake涓嶄簡銆?

榪欐牱錛屼綘灝辨湁蹇呰浜嗚В騫跺浼氳繍鐢╝utoconf鍜宎utomake浜嗐?
autoconf鏄竴涓敤浜庣敓鎴愬彲浠ヨ嚜鍔ㄥ湴閰嶇疆杞歡婧愪唬鐮佸寘浠ラ傚簲澶氱UNIX綾葷郴緇熺殑shell鑴氭湰鐨勫伐鍏楓傜敱autoconf鐢熸垚鐨勯厤緗剼鏈湪榪愯鐨勬椂鍊欎笉闇瑕佺敤鎴風殑鎵嬪伐騫查錛涢氬父瀹冧滑鐢氳嚦涓嶉渶瑕佹墜宸ョ粰鍑哄弬鏁頒互紜畾緋葷粺鐨勭被鍨嬨傜浉鍙嶏紝瀹冧滑瀵硅蔣浠跺寘鍙兘闇瑕佺殑鍚勭鐗瑰緛榪涜鐙珛鐨勬祴璇曘傚湪姣忎釜嫻嬭瘯涔嬪墠錛屽畠浠墦鍗頒竴涓崟琛岀殑娑堟伅浠ヨ鏄庡畠浠鍦ㄨ繘琛岀殑媯嫻嬶紝浠ヤ嬌寰楃敤鎴蜂笉浼氬洜涓虹瓑寰呰剼鏈墽琛屽畬姣曡岀劍韜併傚洜姝わ紝瀹冧滑鍦ㄦ販鍚堢郴緇熸垨鑰呬粠鍚勭甯歌UNIX鍙樼瀹氬埗鑰屾垚鐨勭郴緇熶腑宸ヤ綔鐨勫緢濂姐備綘涔熺渷浜嗗伐浣滐紝娌″繀瑕佺淮鎶ゆ枃浠朵互鍌ㄥ瓨鐢卞悇涓猆NIX鍙樼銆佸悇涓彂琛岀増鏈墍鏀寔鐨勭壒寰佺殑鍒楄〃銆?
automake鏄竴涓粠鏂囦歡Makefile.am鑷姩鐢熸垚Makefile.in鐨勫伐鍏楓傛瘡涓狹akefile.am鍩烘湰涓婃槸涓緋誨垪make鐨勫畯瀹氫箟錛坢ake瑙勫垯涔熶細鍋跺皵鍑虹幇錛夌敓鎴愮殑Makefile.in錛屾湇浠嶨NU Makefile鏍囧噯銆?
涓轟簡鐢熸垚Makefile.in錛宎utomake闇瑕乸erl銆備絾鏄敱automake鍒涘緩鐨勫彂甯冨畬鍏ㄦ湇浠嶨NU鏍囧噯錛屽茍涓斿湪鍒涘緩涓笉闇瑕乸erl銆?

鍦ㄥ紑濮嬩嬌鐢╝utoconf鍜宎utomake涔嬪墠錛岄鍏堢‘璁や綘鐨勭郴緇熷畨瑁呮湁GNU鐨勫涓嬭蔣浠訛細
1. automake
2. autoconf
3. m4
4. perl
5. 濡傛灉浣犻渶瑕佷駭鐢熷叡浜簱錛坰hared library錛夊垯榪橀渶瑕丟NU Libtool

浠嬬粛鏂規硶涔嬪墠澶у鐪嬩竴涓嬩笅闈㈣繖涓浘錛屽厛璁頒笅autoconf鍜宎utomake宸ヤ綔鐨勫嚑涓楠わ細


姝ラ瑙i噴濡備笅錛?
1銆佺敱浣犵殑婧愭枃浠墮氳繃autoscan鍛戒護鐢熸垚configure.scan鏂囦歡錛岀劧鍚庝慨鏀筩onfigure.scan鏂囦歡騫墮噸鍛藉悕涓篶onfigure.in
2銆佺敱aclocal鍛戒護鐢熸垚aclocal.m4
3銆佺敱autoconf鍛戒護鐢熸垚configure
4銆佺紪杈戜竴涓狹akefile.am鏂囦歡騫剁敱automake鍛戒護鐢熸垚Makefile.in鏂囦歡
5銆佽繍琛宑onfigure鍛戒護鐢熸垚Makefile

automake鏀寔涓夌鐩綍灞傛錛歠lat銆乻hallow鍜宒eep銆?
涓涓猣lat鍖呮寚鐨勬槸鎵鏈夋枃浠墮兘鍦ㄤ竴涓洰褰曚腑鐨勫寘銆備負榪欑被鍖呮彁渚涚殑Makefile.am涓嶉渶瑕丼UBDIRS榪欎釜瀹忋傝繖綾誨寘鐨勪竴涓緥瀛愭槸termutils銆傚搴斿挶浠▼搴忓憳鏉ヨ錛氬氨鏄墍鏈夋簮鏂囦歡鍙婅嚜宸卞啓鐨勫ご鏂囦歡閮戒綅浜庡綋鍓嶇洰褰曢噷闈紝涓旀病鏈夊瓙鐩綍銆?
涓涓猟eep鍖呮寚鐨勬槸鎵鏈夌殑婧愪唬鐮侀兘琚偍瀛樺湪瀛愮洰褰曚腑鐨勫寘錛涢《灞傜洰褰曚富瑕佸寘鍚厤緗俊鎭侴NU cpio鏄繖綾誨寘鐨勪竴涓緢濂界殑渚嬪瓙錛孏NU tar涔熸槸銆俤eep鍖呯殑欏跺眰Makefile.am灝嗗寘鎷畯SUBDIRS錛屼絾娌℃湁鍏跺畠瀹氫箟闇瑕佸垱寤虹殑瀵硅薄鐨勫畯銆傚搴斿挶浠▼搴忓憳鏉ヨ錛氬氨鏄墍鏈夋簮鏂囦歡鍙婅嚜宸卞啓鐨勫ご鏂囦歡閮戒綅浜庡綋鍓嶇洰褰曠殑涓涓瓙鐩綍閲岄潰錛岃屽綋鍓嶇洰褰曢噷娌℃湁浠諱綍婧愭枃浠躲?
涓涓猻hallow鍖呮寚鐨勬槸涓昏鐨勬簮浠g爜鍌ㄥ瓨鍦ㄩ《灞傜洰褰曚腑錛岃屽悇涓儴鍒嗭紙鍏稿瀷鐨勬槸搴擄級鍒欏偍瀛樺湪瀛愮洰褰曚腑鐨勫寘銆俛utomake鏈韓灝辨槸榪欑被鍖咃紙GNU make涔熸槸濡傛錛屽畠鐜板湪宸茬粡涓嶄嬌鐢╝utomake錛夈傚搴斿挶浠▼搴忓憳鏉ヨ錛氬氨鏄富瑕佹簮鏂囦歡鍦ㄥ綋鍓嶇洰褰曢噷錛岃屽叾瀹冧竴浜涘疄鐜板悇閮ㄥ垎鍔熻兘鐨勬簮鏂囦歡鍚勮嚜浣嶄簬涓嶅悓鐩綍銆?

鍓嶄袱涓眰嬈$殑紼嬪簭緙栬緫鏂規硶闈炲父綆鍗曪紝鎸夌収涓婅堪姝ラ涓姝ユ鍗沖彲銆傝岀涓夌灞傛shallow紼嶅井澶嶆潅涓鐐癸紝浣嗚繖鏄垜浠粡甯稿啓紼嬪簭鐢ㄥ埌鐨勭粨鏋勩備笅闈互涓涓緥瀛愯鏄巗hallow灞傛緇撴瀯鐨勬簮鏂囦歡濡備綍鑷姩鐢熸垚Makefile鏂囦歡銆?
渚嬪瓙婧愮▼搴忕粨鏋勫涓嬶細
hello鏄垜浠殑宸ヤ綔鐩綍錛宧ello鐩綍涓嬫湁main.c婧愭枃浠跺拰comm銆乼ools銆乨b銆乶etwork銆乮nterface絳変簲涓洰褰曘?comm鐩綍涓嬫湁comm.c鍜宑omm.h婧愭枃浠跺強澶存枃浠訛紝tools鐩綍涓嬫湁tools.c鍜宼ools.h錛屽悓鏍峰叾瀹冪洰褰曞垎鍒湁db.c銆?db.h銆乶etwork.c銆乶etwork.h銆乮nterface.c銆乮nterface.h絳変竴浜涙簮鏂囦歡銆?

鎸夌収濡備笅姝ラ鏉ヨ嚜鍔ㄧ敓鎴怣akefile鍚э細
1銆佽繘鍏ello鐩綍錛岃繍琛宎utoscan鍛戒護錛屽懡浠ゅ涓嬶細
cd hello
autoscan
2銆乴s浼氬彂鐜板浜嗕竴涓猚onfigure.scan鏂囦歡銆備慨鏀規鏂囦歡錛屽湪AC_INIT瀹忎箣鍚庡姞鍏M_INIT_AUTOMAKE(hello, 1.0)錛岃繖閲宧ello鏄綘鐨勮蔣浠跺悕縐幫紝1.0鏄増鏈彿錛屽嵆浣犵殑榪欎簺婧愮▼搴忕紪璇戝皢鐢熸垚涓涓蔣浠秇ello-1.0鐗堛傜劧鍚庢妸 configure.scan鏂囦歡鐨勬渶鍚庝竴琛孉C_OUTPUT瀹忓~鍐欏畬鏁村彉鎴怉C_OUTPUT(Makefile)錛岃〃鏄巃utoconf鍜?automake鏈緇堝皢鐢熸垚Makefile鏂囦歡銆傛渶鍚庢妸configure.scan鏂囦歡鏀瑰悕涓篶onfigure.in銆傛渶緇?configure.in鏂囦歡鍐呭濡備笅錛?

dnl Process this file with autoconf to produce a configure script.
AC_INIT(target.c)
AM_INIT_AUTOMAKE(hello, 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)

3銆佽繍琛宎clocal鍛戒護錛宭s浼氬彂鐜板浜嗕竴涓猘clocal.m4鏂囦歡銆?
4銆佺劧鍚庤繍琛宎utoconf鍛戒護錛宭s灝嗗彂鐜扮敓鎴愪簡涓涓彲鎵ц鐨刢onfigure鍛戒護銆?
5銆佺紪杈戜竴涓狹akefile.am鏂囦歡錛屾枃浠跺唴瀹瑰涓嬶細
AUTOMAKE_OPTIONS=foreign
bin_PROGRAMS=hello
hello_SOURCES=main.c comm/comm.c comm/comm.h tools/tools.c tools/tools.h db/db.c db/db.h network/network.c network/network.h interface/interface.c interface/interface.h
榪欒〃鏄庝綘鏈鍚庡皢閫氳繃涓涓猰ake鍛戒護鍒╃敤涓婅堪hello_SOURCES婧愭枃浠剁敓鎴愪竴涓猦ello鐨勭▼搴忋?
6銆佽繍琛宎utomake --add-missing鍛戒護銆傚睆騫曟彁紺哄涓嬶細
automake: configure.in: installing `./install-sh'
automake: configure.in: installing `./mkinstalldirs'
automake: configure.in: installing `./missing'
7銆佺劧鍚庝綘鍙互榪愯涔嬪墠鐢熸垚鐨刢onfigure鍛戒護鏉ョ敓鎴愪竴涓狹akefile鏂囦歡錛岃緭鍏?/configure鍛戒護鍗沖彲銆?
8銆佺紪杈慚akefile鏂囦歡錛屾壘鍒?(LINK)鎵鍦ㄧ殑閭d竴琛岋紝鏈潵鐢熸垚鐨勬枃浠跺唴瀹瑰涓嬶細
@rm -f hello
$(LINK) $(hello_LDFLAGS) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
鍦ㄨ繖涓よ涔嬮棿澧炲姞鍑犺鍙樻垚錛?
@rm -f hello
@mv -f comm.o comm
@mv -f tools.o tools
@mv -f db.o db
@mv -f network.o network
@mv -f interface.o interface
$(LINK) $(hello_LDFLAGS) $(hello_OBJECTS) $(hello_LDADD) $(LIBS)
榪欐槸鍥犱負榛樿鐢熸垚鐨凪akefile灝嗗湪緙栬瘧鍚庢妸鎵鏈夌洰鏍囨枃浠剁疆浜庡綋鍓嶇洰褰曪紝鑰屽湪榪涜閾炬帴(link)鏃跺張浼氬埌鍚勪釜瀛愮洰褰曞幓鎵劇浉搴旂殑鐩爣鏂囦歡銆?
褰撶劧錛屼負浜嗗畬鏁達紝寤鴻鍚勪綅鍦╟lean閮ㄥ垎鍔犱笂濡備笅涓浜涜錛?
@rm -f comm/comm.o
@rm -f tools/tools.o
@rm -f db/db.o
@rm -f network/network.o
@rm -f interface/interface.o

濂戒簡錛岀粡榪囦笂榪拌繖浜涙楠ゅ悗錛岀幇鍦ㄤ綘鍙互鏉ョ紪璇戠敓鎴愪綘鑷繁鐨勫彲鎵ц紼嬪簭浜嗐傝緭鍏ヤ竴涓猰ake all鍚э紝鐒跺悗灝卞彲浠ヨ繍琛?/hello鏉ョ湅浣犵殑紼嬪簭榪愯浜嗐?

榪愮敤autoconf鍜宎utomake鐨勬渶澶уソ澶勬槸錛屼綘鐨勭▼搴忎互婧愮▼搴忔柟寮忓彂甯冨悗錛屽叾瀹冩墍鏈変漢鍙渶瑕佷緷嬈¤緭鍏?
./configure
make
make install
鍛戒護灝卞彲浠ユ妸浣犵殑紼嬪簭瀹夎鍦ㄨ嚜宸辯殑鐢佃剳涓婅繍琛屼簡銆傛墍鏈夌鍚圙NU鏍囧噯鐨刄NIX/Linux閮戒笉闇瑕佸啀淇敼Makefile閲岀殑浠諱綍瀛楃銆?/p> [@more@]

T.S Liu 2008-06-26 15:23 鍙戣〃璇勮
]]>
autoconf 鍜?automake 鐢熸垚 Makefile 鏂囦歡 (杞?http://m.shnenglu.com/liu1061/articles/54653.htmlT.S LiuT.S LiuThu, 26 Jun 2008 04:01:00 GMThttp://m.shnenglu.com/liu1061/articles/54653.htmlhttp://m.shnenglu.com/liu1061/comments/54653.htmlhttp://m.shnenglu.com/liu1061/articles/54653.html#Feedback0http://m.shnenglu.com/liu1061/comments/commentRss/54653.htmlhttp://m.shnenglu.com/liu1061/services/trackbacks/54653.html
鏂囨。閫夐」
灝嗘欏典綔涓虹數瀛愰偖浠跺彂閫?src="http://www.ibm.com/i/v14/icons/em.gif"

灝嗘欏典綔涓虹數瀛愰偖浠跺彂閫?/a>

鏈樉紺洪渶瑕?JavaScript 鐨勬枃妗i夐」

鏍蜂緥浠g爜


綰у埆錛?鍒濈駭

鏉?灝忓崕 (normalnotebook@126.com), Linux 鍐呮牳鐮旂┒鍛?br>鑻?鏄ヨ壋, 鍦ㄨ鐮旂┒鐢?br>

2006 騫?9 鏈?21 鏃?/p>

鏈枃浠嬬粛浜嗗湪 linux 緋葷粺涓紝閫氳繃 Gnu autoconf 鍜?automake 鐢熸垚 Makefile 鐨勬柟娉曘備富瑕佹帰璁ㄤ簡鐢熸垚 Makefile 鐨勬潵榫欏幓鑴夊強鍏舵満鐞嗭紝鎺ョ潃璇︾粏浠嬬粛浜嗛厤緗?Configure.in 鐨勬柟娉曞強鍏惰鍒欍?/blockquote>

寮曞瓙

鏃犺鏄湪Linux榪樻槸鍦║nix鐜涓紝make閮芥槸涓涓潪甯擱噸瑕佺殑緙栬瘧鍛戒護銆備笉綆℃槸鑷繁榪涜欏圭洰寮鍙戣繕鏄畨瑁呭簲鐢ㄨ蔣浠訛紝鎴戜滑閮界粡甯歌鐢ㄥ埌make鎴?make install銆傚埄鐢╩ake宸ュ叿錛屾垜浠彲浠ュ皢澶у瀷鐨勫紑鍙戦」鐩垎瑙f垚涓哄涓洿鏄撲簬綆$悊鐨勬ā鍧楋紝瀵逛簬涓涓寘鎷嚑鐧句釜婧愭枃浠剁殑搴旂敤紼嬪簭錛屼嬌鐢╩ake鍜?makefile宸ュ叿灝卞彲浠ヨ交鑰屾槗涓劇殑鐞嗛『鍚勪釜婧愭枃浠朵箣闂寸悍綣佸鏉傜殑鐩鎬簰鍏崇郴銆?/p>

浣嗘槸濡傛灉閫氳繃鏌ラ槄make鐨勫府鍔╂枃妗f潵鎵嬪伐緙栧啓Makefile,瀵逛換浣曠▼搴忓憳閮芥槸涓鍦烘寫鎴樸傚垢鑰屾湁GNU 鎻愪緵鐨凙utoconf鍙夾utomake榪欎袱濂楀伐鍏蜂嬌寰楃紪鍐檓akefile涓嶅啀鏄竴涓毦棰樸?/p>

鏈枃灝嗕粙緇嶅浣曞埄鐢?GNU Autoconf 鍙?Automake 榪欎袱濂楀伐鍏鋒潵鍗忓姪鎴戜滑鑷姩浜х敓 Makefile鏂囦歡錛屽茍涓旇寮鍙戝嚭鏉ョ殑杞歡鍙互鍍忓ぇ澶氭暟婧愮爜鍖呴偅鏍鳳紝鍙渶"./configure", "make","make install" 灝卞彲浠ユ妸紼嬪簭瀹夎鍒扮郴緇熶腑銆?/p>



鍥為〉棣?/a>


妯℃嫙闇姹?/a>

鍋囪婧愭枃浠舵寜濡備笅鐩綍瀛樻斁錛屽鍥?鎵紺猴紝榪愮敤autoconf鍜宎utomake鐢熸垚makefile鏂囦歡銆?/p>
鍥?1鏂囦歡鐩綍緇撴瀯
鍥?1鏂囦歡鐩綍緇撴瀯

鍋囪src鏄垜浠簮鏂囦歡鐩綍錛宨nclude鐩綍瀛樻斁鍏朵粬搴撶殑澶存枃浠訛紝lib鐩綍瀛樻斁鐢ㄥ埌鐨勫簱鏂囦歡錛岀劧鍚庡紑濮嬫寜妯″潡瀛樻斁錛屾瘡涓ā鍧楅兘鏈変竴涓搴旂殑鐩綍錛屾ā鍧椾笅鍐嶅垎瀛愭ā鍧楋紝濡俛pple銆乷range銆傛瘡涓瓙鐩綍涓嬪張鍒哻ore錛宨nclude錛宻hell涓変釜鐩綍錛屽叾涓璫ore鍜宻hell鐩綍瀛樻斁.c鏂囦歡錛宨nclude鐨勫瓨鏀?h鏂囦歡錛屽叾浠栫被浼箋?/p>

鏍蜂緥紼嬪簭鍔熻兘錛氬熀浜庡綰跨▼鐨勬暟鎹鍐欎繚鎶わ紙鑱旂郴浣滆呰幏鍙栨暣涓猘utoconf鍜宎utomake鐢熸垚鐨凪akefile宸ョ▼鍜屾簮鐮侊紝E-mail錛?a href="mailto:normalnotebook@126.com">normalnotebook@126.com錛夈?/p>



鍥為〉棣?/a>


宸ュ叿綆浠?/a>

鎵蹇呴』鐨勮蔣浠訛細autoconf/automake/m4/perl/libtool錛堝叾涓璴ibtool闈炲繀欏伙級銆?/p>

autoconf鏄竴涓敤浜庣敓鎴愬彲浠ヨ嚜鍔ㄥ湴閰嶇疆杞歡婧愮爜鍖咃紝鐢ㄤ互閫傚簲澶氱UNIX綾葷郴緇熺殑shell鑴氭湰宸ュ叿錛屽叾涓璦utoconf闇瑕佺敤鍒?m4錛屼究浜庣敓鎴愯剼鏈俛utomake鏄竴涓粠Makefile.am鏂囦歡鑷姩鐢熸垚Makefile.in鐨勫伐鍏楓備負浜嗙敓鎴怣akefile.in錛宎utomake榪橀渶鐢ㄥ埌perl錛岀敱浜巃utomake鍒涘緩鐨勫彂甯冨畬鍏ㄩ伒寰狦NU鏍囧噯錛屾墍浠ュ湪鍒涘緩涓笉闇瑕乸erl銆俵ibtool鏄竴嬈炬柟渚跨敓鎴愬悇縐嶇▼搴忓簱鐨勫伐鍏楓?/p>

鐩墠automake鏀寔涓夌鐩綍灞傛錛歠lat銆乻hallow鍜宒eep銆?/p>

1) flat鎸囩殑鏄墍鏈夋枃浠墮兘浣嶄簬鍚屼竴涓洰褰曚腑銆?/p>

灝辨槸鎵鏈夋簮鏂囦歡銆佸ご鏂囦歡浠ュ強鍏朵粬搴撴枃浠墮兘浣嶄簬褰撳墠鐩綍涓紝涓旀病鏈夊瓙鐩綍銆俆ermutils灝辨槸榪欎竴綾匯?/p>

2) shallow鎸囩殑鏄富瑕佺殑婧愪唬鐮侀兘鍌ㄥ瓨鍦ㄩ《灞傜洰褰曪紝鍏朵粬鍚勪釜閮ㄥ垎鍒欏偍瀛樺湪瀛愮洰褰曚腑銆?/p>

灝辨槸涓昏婧愭枃浠跺湪褰撳墠鐩綍涓紝鑰屽叾瀹冧竴浜涘疄鐜板悇閮ㄥ垎鍔熻兘鐨勬簮鏂囦歡浣嶄簬鍚勮嚜涓嶅悓鐨勭洰褰曘俛utomake鏈韓灝辨槸榪欎竴綾匯?/p>

3) deep鎸囩殑鏄墍鏈夋簮浠g爜閮借鍌ㄥ瓨鍦ㄥ瓙鐩綍涓紱欏跺眰鐩綍涓昏鍖呭惈閰嶇疆淇℃伅銆?/p>

灝辨槸鎵鏈夋簮鏂囦歡鍙婅嚜宸卞啓鐨勫ご鏂囦歡浣嶄簬褰撳墠鐩綍鐨勪竴涓瓙鐩綍涓紝鑰屽綋鍓嶇洰褰曢噷娌℃湁浠諱綍婧愭枃浠躲?GNU cpio鍜孏NU tar灝辨槸榪欎竴綾匯?/p>

flat綾誨瀷鏄渶綆鍗曠殑錛宒eep綾誨瀷鏄渶澶嶆潅鐨勩備笉闅劇湅鍑猴紝鎴戜滑鐨勬ā鎷熼渶姹傛鏄熀浜庣涓夌被deep鍨嬶紝涔熷氨鏄鎴戜滑瑕佸仛鎸戞垬鎬х殑浜嬫儏錛?銆傛敞錛氭垜浠殑嫻嬭瘯紼嬪簭鏄熀浜庡綰跨▼鐨勭畝鍗曠▼搴忋?/p>



鍥為〉棣?/a>


鐢熸垚 Makefile 鐨勬潵榫欏幓鑴?/a>

棣栧厛榪涘叆 project 鐩綍錛屽湪璇ョ洰褰曚笅榪愯涓緋誨垪鍛戒護錛屽垱寤哄拰淇敼鍑犱釜鏂囦歡錛屽氨鍙互鐢熸垚絎﹀悎璇ュ鉤鍙扮殑Makefile鏂囦歡錛屾搷浣滆繃紼嬪涓嬶細

1) 榪愯autoscan鍛戒護

2) 灝哻onfigure.scan 鏂囦歡閲嶅懡鍚嶄負configure.in錛屽茍淇敼configure.in鏂囦歡

3) 鍦╬roject鐩綍涓嬫柊寤篗akefile.am鏂囦歡錛屽茍鍦╟ore鍜宻hell鐩綍涓嬩篃鏂板緩makefile.am鏂囦歡

4) 鍦╬roject鐩綍涓嬫柊寤篘EWS銆?README銆?ChangeLog 銆丄UTHORS鏂囦歡

5) 灝?usr/share/automake-1.X/鐩綍涓嬬殑depcomp鍜宑omplie鏂囦歡鎷瘋礉鍒版湰鐩綍涓?/p>

6) 榪愯aclocal鍛戒護

7) 榪愯autoconf鍛戒護

8) 榪愯automake -a鍛戒護

9) 榪愯./confiugre鑴氭湰

鍙互閫氳繃鍥?鐪嬪嚭浜х敓Makefile鐨勬祦紼嬶紝濡傚浘鎵紺猴細


鍥?2鐢熸垚Makefile嫻佺▼鍥?/a>
鍥?2鐢熸垚Makefile嫻佺▼鍥? src=




鍥為〉棣?/a>


Configure.in鐨勫叓鑲℃枃

褰撴垜浠埄鐢╝utoscan宸ュ叿鐢熸垚confiugre.scan鏂囦歡鏃訛紝鎴戜滑闇瑕佸皢confiugre.scan閲嶅懡鍚嶄負confiugre.in鏂囦歡銆俢onfiugre.in璋冪敤涓緋誨垪autoconf瀹忔潵嫻嬭瘯紼嬪簭闇瑕佺殑鎴栫敤鍒扮殑鐗規ф槸鍚﹀瓨鍦紝浠ュ強榪欎簺鐗規х殑鍔熻兘銆?/p>

涓嬮潰鎴戜滑灝辨潵鐩澒涓涓媍onfiugre.scan鐨勫簮灞辯湡闈㈢洰錛?/p>
# Process this file with autoconf to produce a configure script.
            AC_PREREQ(2.59)
            AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
            AC_CONFIG_SRCDIR([config.h.in])
            AC_CONFIG_HEADER([config.h])
            # Checks for programs.
            AC_PROG_CC
            # Checks for libraries.
            # FIXME: Replace `main' with a function in `-lpthread':
            AC_CHECK_LIB([pthread], [main])
            # Checks for header files.
            # Checks for typedefs, structures, and compiler characteristics.
            # Checks for library functions.
            AC_OUTPUT
            

姣忎釜configure.scan鏂囦歡閮芥槸浠C_INIT寮澶達紝浠C_OUTPUT緇撴潫銆傛垜浠笉闅句粠鏂囦歡涓湅鍑篶onfiugre.in鏂囦歡鐨勪竴鑸竷灞錛?/p>
AC_INIT
            嫻嬭瘯紼嬪簭
            嫻嬭瘯鍑芥暟搴?
            嫻嬭瘯澶存枃浠?
            嫻嬭瘯綾誨瀷瀹氫箟
            嫻嬭瘯緇撴瀯
            嫻嬭瘯緙栬瘧鍣ㄧ壒鎬?
            嫻嬭瘯搴撳嚱鏁?
            嫻嬭瘯緋葷粺璋冪敤
            AC_OUTPUT
            

涓婇潰鐨勮皟鐢ㄦ搴忓彧鏄緩璁ц川鐨勶紝浣嗘垜浠繕鏄己鐑堝緩璁笉瑕侀殢鎰忔敼鍙樺瀹忚皟鐢ㄧ殑嬈″簭銆?/p>

鐜板湪灝卞紑濮嬩慨鏀硅鏂囦歡錛?/p>
$mv configure.scan configure.in
            $vim configure.in
            

淇敼鍚庣殑緇撴灉濡備笅錛?/p>
            #                                -*- Autoconf -*-
            # Process this file with autoconf to produce a configure script.
            AC_PREREQ(2.59)
            AC_INIT(test, 1.0, normalnotebook@126.com)
            AC_CONFIG_SRCDIR([src/ModuleA/apple/core/test.c])
            AM_CONFIG_HEADER(config.h)
            AM_INIT_AUTOMAKE(test,1.0)
            # Checks for programs.
            AC_PROG_CC
            # Checks for libraries.
            # FIXME: Replace `main' with a function in `-lpthread':
            AC_CHECK_LIB([pthread], [pthread_rwlock_init])
            AC_PROG_RANLIB
            # Checks for header files.
            # Checks for typedefs, structures, and compiler characteristics.
            # Checks for library functions.
            AC_OUTPUT([Makefile
            src/lib/Makefile
            src/ModuleA/apple/core/Makefile
            src/ModuleA/apple/shell/Makefile
            ])
            

鍏朵腑瑕佸皢AC_CONFIG_HEADER([config.h])淇敼涓猴細AM_CONFIG_HEADER(config.h), 騫跺姞鍏M_INIT_AUTOMAKE(test,1.0)銆傜敱浜庢垜浠殑嫻嬭瘯紼嬪簭鏄熀浜庡綰跨▼鐨勭▼搴忥紝鎵浠ヨ鍔犲叆AC_PROG_RANLIB錛屼笉鐒惰繍琛宎utomake鍛戒護鏃朵細鍑洪敊銆傚湪AC_OUTPUT杈撳叆瑕佸垱寤虹殑Makefile鏂囦歡鍚嶃?/p>

鐢變簬鎴戜滑鍦ㄧ▼搴忎腑浣跨敤浜嗚鍐欓攣錛屾墍浠ラ渶瑕佸搴撴枃浠惰繘琛屾鏌ワ紝鍗矨C_CHECK_LIB([pthread], [main])錛岃瀹忕殑鍚箟濡備笅錛?/p>

鍏朵腑錛孡IBS鏄痩ink鐨勪竴涓夐」錛岃緇嗚鍙傜湅鍚庣畫鐨凪akefile鏂囦歡銆傜敱浜庢垜浠湪紼嬪簭涓嬌鐢ㄤ簡璇誨啓閿侊紝鎵浠ユ垜浠祴璇昿thread搴撲腑鏄惁瀛樺湪pthread_rwlock_init鍑芥暟銆?/p>

鐢變簬鎴戜滑鏄熀浜巇eep綾誨瀷鏉ュ垱寤簃akefile鏂囦歡錛屾墍浠ユ垜浠渶瑕佸湪鍥涘鍒涘緩Makefile鏂囦歡銆傚嵆錛歱roject鐩綍涓嬶紝lib鐩綍涓嬶紝core鍜宻hell鐩綍涓嬨?

Autoconf鎻愪緵浜嗗緢澶氬唴緗畯鏉ュ仛鐩稿叧鐨勬嫻嬶紝闄愪簬綃囧箙鍏崇郴錛屾垜浠湪榪欓噷瀵瑰叾浠栧畯涓嶅仛璇︾粏鐨勮В閲婏紝鍏蜂綋璇峰弬鐪嬪弬鑰冩枃鐚?鍜屽弬鑰冩枃鐚?錛屼篃鍙弬鐪媋utoconf淇℃伅欏點?/p>



鍥為〉棣?/a>


瀹炴垬Makefile.am

Makefile.am鏄竴縐嶆瘮Makefile鏇撮珮灞傛鐨勮鍒欍傚彧闇鎸囧畾瑕佺敓鎴愪粈涔堢洰鏍囷紝瀹冪敱浠涔堟簮鏂囦歡鐢熸垚錛岃瀹夎鍒頒粈涔堢洰褰曠瓑鏋勬垚銆?/p>

琛ㄤ竴鍒楀嚭浜嗗彲鎵ц鏂囦歡銆侀潤鎬佸簱銆佸ご鏂囦歡鍜屾暟鎹枃浠訛紝鍥涚涔﹀啓Makefile.am鏂囦歡涓竴鑸牸寮忋?/p>
琛?1Makefile.am涓鑸牸寮?/a>
琛?1Makefile.am涓鑸牸寮? src=

瀵逛簬鍙墽琛屾枃浠跺拰闈欐佸簱綾誨瀷錛屽鏋滃彧鎯崇紪璇戯紝涓嶆兂瀹夎鍒扮郴緇熶腑錛屽彲浠ョ敤noinst_PROGRAMS浠f浛bin_PROGRAMS錛宯oinst_LIBRARIES浠f浛lib_LIBRARIES銆?/p>

Makefile.am榪樻彁渚涗簡涓浜涘叏灞鍙橀噺渚涙墍鏈夌殑鐩爣浣撲嬌鐢細


琛?2 Makefile.am涓彲鐢ㄧ殑鍏ㄥ眬鍙橀噺
琛?2 Makefile.am涓彲鐢ㄧ殑鍏ㄥ眬鍙橀噺

鍦∕akefile.am涓敖閲忎嬌鐢ㄧ浉瀵硅礬寰勶紝緋葷粺棰勫畾涔変簡涓や釜鍩烘湰璺緞錛?/p>
琛?3Makefile.am涓彲鐢ㄧ殑璺緞鍙橀噺
琛?3Makefile.am涓彲鐢ㄧ殑璺緞鍙橀噺

鍦ㄤ笂鏂囦腑鎴戜滑鎻愬埌榪囧畨瑁呰礬寰勶紝automake璁劇疆浜嗛粯璁ょ殑瀹夎璺緞錛?/p>

1) 鏍囧噯瀹夎璺緞

榛樿瀹夎璺緞涓猴細$(prefix) = /usr/local錛屽彲浠ラ氳繃./configure --prefix=<new_path>鐨勬柟娉曟潵瑕嗙洊銆?/p>

鍏跺畠鐨勯瀹氫箟鐩綍榪樺寘鎷細bindir = $(prefix)/bin, libdir = $(prefix)/lib, datadir = $(prefix)/share, sysconfdir = $(prefix)/etc絳夌瓑銆?/p>

2) 瀹氫箟涓涓柊鐨勫畨瑁呰礬寰?/p>

姣斿test, 鍙畾涔塼estdir = $(prefix)/test, 鐒跺悗test_DATA =test1 test2錛屽垯test1錛宼est2浼氫綔涓烘暟鎹枃浠跺畨瑁呭埌$(prefix)/ /test鐩綍涓嬨?/p>

鎴戜滑棣栧厛闇瑕佸湪宸ョ▼欏跺眰鐩綍涓嬶紙鍗硃roject/錛夊垱寤轟竴涓狹akefile.am鏉ユ寚鏄庡寘鍚殑瀛愮洰褰曪細


SUBDIRS=src/lib src/ModuleA/apple/shell src/ModuleA/apple/core
            CURRENTPATH=$(shell /bin/pwd)
            INCLUDES=-I$(CURRENTPATH)/src/include -I$(CURRENTPATH)/src/ModuleA/apple/include
            export INCLUDES
            

鐢變簬姣忎釜婧愭枃浠墮兘浼氱敤鍒扮浉鍚岀殑澶存枃浠訛紝鎵浠ユ垜浠湪鏈欏跺眰鐨凪akefile.am涓寘鍚簡緙栬瘧婧愭枃浠舵椂鎵鐢ㄥ埌鐨勫ご鏂囦歡錛屽茍瀵煎嚭錛岃钃濊壊閮ㄥ垎浠g爜銆?/p>

鎴戜滑灝唋ib鐩綍涓嬬殑swap.c鏂囦歡緙栬瘧鎴恖ibswap.a鏂囦歡錛岃apple/shell/apple.c鏂囦歡璋冪敤錛岄偅涔坙ib鐩綍涓嬬殑Makefile.am濡備笅鎵紺猴細


noinst_LIBRARIES=libswap.a
            libswap_a_SOURCES=swap.c
            INCLUDES=-I$(top_srcdir)/src/includ
            

緇嗗績鐨勮鑰呭彲鑳藉氨浼氶棶錛氭庝箞琛?涓粰鍑虹殑鏄痓in_LIBRARIES錛岃岃繖閲屾槸noinst_LIBRARIES錛熻繖鏄洜涓哄鏋滃彧鎯崇紪璇戯紝鑰屼笉鎯沖畨瑁呭埌緋葷粺涓紝灝辯敤noinst_LIBRARIES浠f浛bin_LIBRARIES錛屽浜庡彲鎵ц鏂囦歡灝辯敤noinst_PROGRAMS浠f浛bin_PROGRAMS銆傚浜庡畨瑁呯殑鎯呭喌錛屽簱灝嗕細瀹夎鍒?(prefix)/lib鐩綍涓嬶紝鍙墽琛屾枃浠跺皢浼氬畨瑁呭埌${prefix}/bin銆傚鏋滄兂瀹夎璇ュ簱錛屽垯Makefile.am紺轟緥濡備笅錛?/p>
bin_LIBRARIES=libswap.a
            libswap_a_SOURCES=swap.c
            INCLUDES=-I$(top_srcdir)/src/include
            swapincludedir=$(includedir)/swap
            swapinclude_HEADERS=$(top_srcdir)/src/include/swap.h
            

鏈鍚庝袱琛岀殑鎰忔濇槸灝唖wap.h瀹夎鍒?{prefix}/include /swap鐩綍涓嬨?/p>

鎺ヤ笅鏉ワ紝瀵逛簬鍙墽琛屾枃浠剁被鍨嬬殑鎯呭喌錛屾垜浠皢璁ㄨ濡備綍鍐橫akefile.am錛熷浜庣紪璇慳pple/core鐩綍涓嬬殑鏂囦歡錛屾垜浠啓鎴愮殑Makefile.am濡備笅鎵紺猴細


noinst_PROGRAMS=test
            test_SOURCES=test.c
            test_LDADD=$(top_srcdir)/src/ModuleA/apple/shell/apple.o $(top_srcdir)/src/lib/libswap.a
            test_LDFLAGS=-D_GNU_SOURCE
            DEFS+=-D_GNU_SOURCE
            #LIBS=-lpthread
            

鐢變簬鎴戜滑鐨則est.c鏂囦歡鍦ㄩ摼鎺ユ椂錛岄渶瑕乤pple.o鍜宭ibswap.a鏂囦歡錛屾墍浠ユ垜浠渶瑕佸湪test_LDADD涓寘鍚繖涓や釜鏂囦歡銆傚浜嶭inux涓嬬殑淇″彿閲?璇誨啓閿佹枃浠惰繘琛岀紪璇戯紝闇瑕佸湪緙栬瘧閫夐」涓寚鏄?D_GNU_SOURCE銆傛墍浠ュ湪test_LDFLAGS涓寚鏄庛傝宼est_LDFLAGS鍙槸閾炬帴鏃剁殑閫夐」錛岀紪璇戞椂鍚屾牱闇瑕佹寚鏄庤閫夐」錛屾墍浠ラ渶瑕丏EFS鏉ユ寚鏄庣紪璇戦夐」錛岀敱浜嶥EFS宸茬粡鏈夊垵濮嬪鹼紝鎵浠ヨ繖閲岀敤+=鐨勫艦寮忔寚鏄庛備粠榪欓噷鍙互鐪嬪嚭錛孧akefile.am涓殑璇硶涓嶮akefile鐨勮娉曚竴鑷達紝涔熷彲浠ラ噰鐢ㄦ潯浠惰〃杈懼紡銆傚鏋滀綘鐨勭▼搴忚繕鍖呭惈鍏朵粬鐨勫簱錛岄櫎浜嗙敤AC_CHECK_LIB瀹忔潵鎸囨槑澶栵紝榪樺彲浠ョ敤LIBS鏉ユ寚鏄庛?/p>

濡傛灉浣犲彧鎯崇紪璇戞煇涓涓枃浠訛紝閭d箞Makefile.am濡備綍鍐欏憿錛熻繖涓枃浠朵篃寰堢畝鍗曪紝鍐欐硶璺熷彲鎵ц鏂囦歡鐨勫樊涓嶅錛屽涓嬩緥鎵紺猴細


noinst_PROGRAMS=apple
            apple_SOURCES=apple.c
            DEFS+=-D_GNU_SOURCE
            

鎴戜滑榪欓噷鍙槸嬈洪獥automake錛屽亣瑁呰鐢熸垚apple鏂囦歡錛岃瀹冧負鎴戜滑鐢熸垚渚濊禆鍏崇郴鍜屾墽琛屽懡浠ゃ傛墍浠ュ綋浣犺繍琛屽畬automake鍛戒護鍚庯紝鐒跺悗淇敼apple/shell/涓嬬殑Makefile.in鏂囦歡錛岀洿鎺ュ皢LINK璇彞鍒犻櫎錛屽嵆錛?/p>
…….
            clean-noinstPROGRAMS:
            -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS)
            apple$(EXEEXT): $(apple_OBJECTS) $(apple_DEPENDENCIES)
            @rm -f apple$(EXEEXT)
            #$(LINK) $(apple_LDFLAGS) $(apple_OBJECTS) $(apple_LDADD) $(LIBS)
            …….
            

閫氳繃涓婅堪澶勭悊錛屽氨鍙互杈懼埌鎴戜滑鐨勭洰鐨勩備粠鍥?涓笉闅劇湅鍑轟負浠涔堣淇敼Makefile.in鐨勫師鍥狅紝鑰屼笉鏄慨鏀瑰叾浠栫殑鏂囦歡銆?/p>




鍥為〉棣?/a>


涓嬭澆

鍚嶅瓧 澶у皬 涓嬭澆鏂規硶
project.rar HTTP
鍏充簬涓嬭澆鏂規硶鐨勪俊鎭?/a>


鍙傝冭祫鏂?

  1. Kurt Wall錛屽紶杈夎瘧 銆奊NU/Linux緙栫▼鎸囧崡銆?娓呭崕澶у鍑虹増紺?
  2. Robert Mecklenburg錛屻奊NU Make欏圭洰綆$悊錛堢涓夌増錛夈?涓滃崡澶у鍑虹増紺?2006
  3. http://www.cngnu.org/technology/index.html


T.S Liu 2008-06-26 12:01 鍙戣〃璇勮
]]>Linux緋葷粺涓婣utoconf/AutoMake瀛︿範絎旇http://m.shnenglu.com/liu1061/articles/54635.htmlT.S LiuT.S LiuThu, 26 Jun 2008 02:31:00 GMThttp://m.shnenglu.com/liu1061/articles/54635.htmlhttp://m.shnenglu.com/liu1061/comments/54635.htmlhttp://m.shnenglu.com/liu1061/articles/54635.html#Feedback0http://m.shnenglu.com/liu1061/comments/commentRss/54635.htmlhttp://m.shnenglu.com/liu1061/services/trackbacks/54635.html1銆乤utoscan
銆銆autoscan鏄敤鏉ユ壂鎻忔簮浠g爜鐩綍鐢熸垚configure.scan鏂囦歡鐨勩俛utoscan鍙互鐢ㄧ洰褰曞悕鍋氫負鍙傛暟錛屼絾濡傛灉浣犱笉浣跨敤鍙傛暟鐨勮瘽錛岄偅涔坅utoscan灝嗚涓轟嬌鐢ㄧ殑鏄綋鍓嶇洰褰曘俛utoscan灝嗘壂鎻忎綘鎵鎸囧畾鐩綍涓殑婧愭枃浠訛紝騫跺垱寤篶onfigure.scan鏂囦歡銆?br>
銆銆2銆乧onfigure.scan
銆銆configure.scan鍖呭惈浜?
銆銆緋葷粺閰嶇疆鐨勫熀鏈夐」錛岄噷闈㈤兘鏄竴浜涘畯瀹氫箟銆傛垜浠渶瑕佸皢瀹冩敼鍚嶄負configure.in

銆銆3銆乤clocal
銆銆aclocal鏄竴涓猵erl鑴氭湰紼嬪簭銆俛clocal鏍規嵁configure.in鏂囦歡鐨勫唴瀹癸紝鑷姩鐢熸垚aclocal.m4鏂囦歡銆?aclocal鐨勫畾涔夋槸錛?aclocal - create aclocal.m4 by scanning configure.ac"銆?br>
銆銆4銆乤utoconf
銆銆autoconf鏄敤鏉ヤ駭鐢焎onfigure鏂囦歡鐨勩俢onfigure鏄竴涓剼鏈紝瀹冭兘璁劇疆婧愮▼搴忔潵閫傚簲鍚勭涓嶅悓鐨勬搷浣滅郴緇熷鉤鍙幫紝騫朵笖鏍規嵁涓嶅悓鐨勭郴緇熸潵浜х敓鍚堥傜殑Makefile錛屼粠鑰屽彲浠ヤ嬌浣犵殑婧愪唬鐮佽兘鍦ㄤ笉鍚岀殑鎿嶄綔緋葷粺騫沖彴涓婅緙栬瘧鍑烘潵銆?br>
銆銆configure.in鏂囦歡鐨勫唴瀹規槸涓浜涘畯錛岃繖浜涘畯緇忚繃autoconf澶勭悊鍚庝細鍙樻垚媯鏌ョ郴緇熺壒鎬с佺幆澧冨彉閲忋佽蔣浠跺繀欏葷殑鍙傛暟鐨剆hell鑴氭湰銆俢onfigure.in鏂囦歡涓殑瀹忕殑欏哄簭騫舵病鏈夎瀹氾紝浣嗘槸浣犲繀欏誨湪鎵鏈夊畯鐨勬渶鍓嶉潰鍜屾渶鍚庨潰鍒嗗埆鍔犱笂AC_INIT瀹忓拰AC_OUTPUT瀹忋?br>
銆銆鍦╟onfigure.ini涓細

銆銆#鍙瘋〃紺烘敞閲婏紝榪欎釜瀹忓悗闈㈢殑鍐呭灝嗚蹇界暐銆?br>
銆銆AC_INIT(FILE)

銆銆榪欎釜瀹忕敤鏉ユ鏌ユ簮浠g爜鎵鍦ㄧ殑璺緞銆?br>
銆銆AM_INIT_AUTOMAKE(PACKAGE, VERSION)

銆銆榪欎釜瀹忔槸蹇呴』鐨勶紝瀹冩弿榪頒簡鎴戜滑灝嗚鐢熸垚鐨勮蔣浠跺寘鐨勫悕瀛楀強鍏剁増鏈彿錛歅ACKAGE鏄蔣浠跺寘鐨勫悕瀛楋紝VERSION鏄増鏈彿銆傚綋浣犱嬌鐢╩ake dist鍛戒護鏃訛紝瀹冧細緇欎綘鐢熸垚涓涓被浼糷elloworld-1.0.tar.gz鐨勮蔣浠跺彂琛屽寘錛屽叾涓氨鏈夊搴旂殑杞歡鍖呯殑鍚嶅瓧鍜岀増鏈彿銆?br>
銆銆AC_PROG_CC

銆銆榪欎釜瀹忓皢媯鏌ョ郴緇熸墍鐢ㄧ殑C緙栬瘧鍣ㄣ?br>
銆銆AC_OUTPUT(FILE)

銆銆榪欎釜瀹忔槸鎴戜滑瑕佽緭鍑虹殑Makefile鐨勫悕瀛椼?br>
銆銆鎴戜滑鍦ㄤ嬌鐢╝utomake鏃訛紝瀹為檯涓婅繕闇瑕佺敤鍒板叾浠栫殑涓浜涘畯錛屼絾鎴戜滑鍙互鐢╝clocal鏉ュ府鎴戜滑鑷姩浜х敓銆傛墽琛宎clocal鍚庢垜浠細寰楀埌aclocal.m4鏂囦歡銆?br>
銆銆浜х敓浜哻onfigure.in鍜宎clocal.m4涓や釜瀹忔枃浠跺悗錛屾垜浠氨鍙互浣跨敤autoconf鏉ヤ駭鐢焎onfigure鏂囦歡浜嗐?br>
銆銆5銆丮akefile.am
銆銆Makefile.am鏄敤鏉ョ敓鎴怣akefile.in鐨勶紝闇瑕佷綘鎵嬪伐涔﹀啓銆侻akefile.am涓畾涔変簡涓浜涘唴瀹癸細

銆銆AUTOMAKE_OPTIONS

銆銆榪欎釜鏄痑utomake鐨勯夐」銆傚湪鎵цautomake鏃訛紝瀹冧細媯鏌ョ洰褰曚笅鏄惁瀛樺湪鏍囧噯GNU杞歡鍖呬腑搴斿叿澶囩殑鍚勭鏂囦歡錛屼緥濡侫UTHORS銆丆hangeLog銆丯EWS絳夋枃浠躲傛垜浠皢鍏惰緗垚foreign鏃訛紝automake浼氭敼鐢ㄤ竴鑸蔣浠跺寘鐨勬爣鍑嗘潵媯鏌ャ?br>
銆銆bin_PROGRAMS

銆銆榪欎釜鏄寚瀹氭垜浠墍瑕佷駭鐢熺殑鍙墽琛屾枃浠剁殑鏂囦歡鍚嶃傚鏋滀綘瑕佷駭鐢熷涓彲鎵ц鏂囦歡錛岄偅涔堝湪鍚勪釜鍚嶅瓧闂寸敤絀烘牸闅斿紑銆?br>
銆銆helloworld_SOURCES

銆銆榪欎釜鏄寚瀹氫駭鐢?helloworld"鏃舵墍闇瑕佺殑婧愪唬鐮併傚鏋滃畠鐢ㄥ埌浜嗗涓簮鏂囦歡錛岄偅涔堣浣跨敤絀烘牸絎﹀彿灝嗗畠浠殧寮銆傛瘮濡傞渶瑕?helloworld.h錛宧elloworld.c閭d箞璇峰啓鎴恏elloworld_SOURCES= helloworld.h helloworld.c銆?br>
銆銆濡傛灉浣犲湪bin_PROGRAMS瀹氫箟浜嗗涓彲鎵ц鏂囦歡錛屽垯瀵瑰簲姣忎釜鍙墽琛屾枃浠墮兘瑕佸畾涔夌浉瀵圭殑filename_SOURCES銆?br>
銆銆6銆乤utomake
銆銆鎴戜滑浣跨敤automake --add-missing鏉ヤ駭鐢烳akefile.in銆?br>
銆銆閫夐」--add-missing鐨勫畾涔夋槸"add missing standard files to package"錛屽畠浼氳automake鍔犲叆涓涓爣鍑嗙殑杞歡鍖呮墍蹇呴』鐨勪竴浜涙枃浠躲?br>
銆銆鎴戜滑鐢╝utomake浜х敓鍑烘潵鐨凪akefile.in鏂囦歡鏄鍚圙NU Makefile鎯緥鐨勶紝鎺ヤ笅鏉ユ垜浠彧瑕佹墽琛宑onfigure榪欎釜shell鑴氭湰灝卞彲浠ヤ駭鐢熷悎閫傜殑Makefile鏂囦歡浜嗐?br>
銆銆7銆丮akefile
銆銆鍦ㄧ鍚圙NU Makefiel鎯緥鐨凪akefile涓紝鍖呭惈浜嗕竴浜涘熀鏈殑棰勫厛瀹氫箟鐨勬搷浣滐細

銆銆make

銆銆鏍規嵁Makefile緙栬瘧婧愪唬鐮侊紝榪炴帴錛岀敓鎴愮洰鏍囨枃浠訛紝鍙墽琛屾枃浠躲?br>
銆銆make clean

銆銆娓呴櫎涓婃鐨刴ake鍛戒護鎵浜х敓鐨刼bject鏂囦歡(鍚庣紑涓?.o"鐨勬枃浠?鍙婂彲鎵ц鏂囦歡銆?br>
銆銆make install

銆銆灝嗙紪璇戞垚鍔熺殑鍙墽琛屾枃浠跺畨瑁呭埌緋葷粺鐩綍涓紝涓鑸負/usr/local/bin鐩綍銆?br>
銆銆make dist

銆銆浜х敓鍙戝竷杞歡鍖呮枃浠?鍗砫istribution package)銆傝繖涓懡浠ゅ皢浼氬皢鍙墽琛屾枃浠跺強鐩稿叧鏂囦歡鎵撳寘鎴愪竴涓猼ar.gz鍘嬬緝鐨勬枃浠剁敤鏉ヤ綔涓哄彂甯冭蔣浠剁殑杞歡鍖呫?br>
銆銆瀹冧細鍦ㄥ綋鍓嶇洰褰曚笅鐢熸垚涓涓悕瀛楃被浼?PACKAGE-VERSION.tar.gz"鐨勬枃浠躲侾ACKAGE鍜孷ERSION錛屾槸鎴戜滑鍦╟onfigure.in涓畾涔夌殑AM_INIT_AUTOMAKE(PACKAGE, VERSION)銆?br>
銆銆make distcheck

銆銆鐢熸垚鍙戝竷杞歡鍖呭茍瀵瑰叾榪涜嫻嬭瘯媯鏌ワ紝浠ョ‘瀹氬彂甯冨寘鐨勬紜с傝繖涓搷浣滃皢鑷姩鎶婂帇緙╁寘鏂囦歡瑙e紑錛岀劧鍚庢墽琛宑onfigure鍛戒護錛屽茍涓旀墽琛宮ake錛屾潵紜緙栬瘧涓嶅嚭鐜伴敊璇紝鏈鍚庢彁紺轟綘杞歡鍖呭凡緇忓噯澶囧ソ錛屽彲浠ュ彂甯冧簡銆?br>
銆銆distclean

銆銆綾諱技make clean錛屼絾鍚屾椂涔熷皢configure鐢熸垚鐨勬枃浠跺叏閮ㄥ垹闄ゆ帀錛屽寘鎷琈akefile銆?/font>


T.S Liu 2008-06-26 10:31 鍙戣〃璇勮
]]>
linux 涓嬪浣曠敤autoconf鍜宎utomake涓や釜宸ュ叿鐢熸垚Makefile 錛堣漿錛?/title><link>http://m.shnenglu.com/liu1061/articles/54543.html</link><dc:creator>T.S Liu</dc:creator><author>T.S Liu</author><pubDate>Wed, 25 Jun 2008 03:46:00 GMT</pubDate><guid>http://m.shnenglu.com/liu1061/articles/54543.html</guid><wfw:comment>http://m.shnenglu.com/liu1061/comments/54543.html</wfw:comment><comments>http://m.shnenglu.com/liu1061/articles/54543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/liu1061/comments/commentRss/54543.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/liu1061/services/trackbacks/54543.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>浣滀負Linux涓嬬殑紼嬪簭寮鍙戜漢鍛橈紝澶у涓瀹氶兘閬囧埌榪嘙akefile錛岀敤make鍛戒護鏉ョ紪璇戣嚜宸卞啓鐨勭▼搴忕‘瀹炴槸寰堟柟渚褲備竴鑸儏鍐典笅錛屽ぇ瀹墮兘鏄墜宸ュ啓涓涓畝鍗昅akefile錛屽鏋滆鎯沖啓鍑轟竴涓鍚堣嚜鐢辮蔣浠舵儻渚嬬殑Makefile灝變笉閭d箞瀹規槗浜嗐?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鍦ㄦ湰鏂囦腑錛屽皢緇欏ぇ瀹朵粙緇嶅浣曚嬌鐢?nbsp; autoconf鍜宎utomake涓や釜宸ュ叿鏉ュ府鍔╂垜浠嚜鍔ㄥ湴鐢熸垚絎﹀悎鑷敱杞歡鎯緥鐨凪akefile錛岃繖鏍峰氨鍙互璞″父瑙佺殑GNU紼嬪簭涓鏍鳳紝鍙浣跨敤“./configure”錛?#8220;make”錛?#8220;make instal”灝卞彲浠ユ妸紼嬪簭瀹夎鍒癓inux緋葷粺涓幓浜嗐傝繖灝嗙壒鍒傚悎鎯沖仛寮鏀炬簮浠g爜杞歡鐨勭▼搴忓紑鍙戜漢鍛橈紝鍙堟垨濡傛灉浣犲彧鏄嚜宸卞啓浜涘皬鐨凾oy紼嬪簭錛岄偅涔堣繖涓枃绔犲浣犱篃浼氭湁寰堝ぇ鐨勫府鍔┿?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆涓銆丮akefile浠嬬粛</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆Makefile鏄敤浜庤嚜鍔ㄧ紪璇戝拰閾炬帴鐨勶紝涓涓伐紼嬫湁寰堝鏂囦歡緇勬垚錛屾瘡涓涓枃浠剁殑鏀瑰彉閮戒細瀵艱嚧宸ョ▼鐨勯噸鏂伴摼鎺ワ紝浣嗘槸涓嶆槸鎵鏈夌殑鏂囦歡閮介渶瑕侀噸鏂扮紪璇戯紝Makefile涓邯褰曟湁鏂囦歡鐨勪俊鎭紝鍦╩ake鏃朵細鍐沖畾鍦ㄩ摼鎺ョ殑鏃跺欓渶瑕侀噸鏂扮紪璇戝摢浜涙枃浠躲?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆Makefile鐨勫畻鏃ㄥ氨鏄細璁╃紪璇戝櫒鐭ラ亾瑕佺紪璇戜竴涓枃浠墮渶瑕佷緷璧栧叾浠栫殑鍝簺鏂囦歡銆傚綋閭d簺渚濊禆鏂囦歡鏈変簡鏀瑰彉錛岀紪璇戝櫒浼氳嚜鍔ㄧ殑鍙戠幇鏈緇堢殑鐢熸垚鏂囦歡宸茬粡榪囨椂錛岃岄噸鏂扮紪璇戠浉搴旂殑妯″潡銆?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆Makefile鐨勫熀鏈粨鏋勪笉鏄緢澶嶆潅錛屼絾褰撲竴涓▼搴忓紑鍙戜漢鍛樺紑濮嬪啓Makefile鏃訛紝緇忓父浼氭鐤戣嚜宸卞啓鐨勬槸鍚︾鍚堟儻渚嬶紝鑰屼笖鑷繁鍐欑殑Makefile緇忓父鍜岃嚜宸辯殑寮鍙戠幆澧冪浉鍏寵仈錛屽綋緋葷粺鐜鍙橀噺鎴栬礬寰勫彂鐢熶簡鍙樺寲鍚庯紝Makefile鍙兘榪樿璺熺潃淇敼銆傝繖鏍峰氨閫犳垚浜嗘墜宸ヤ功鍐橫akefile鐨勮澶氶棶棰橈紝automake鎭板ソ鑳藉緢濂藉湴甯姪鎴戜滑瑙e喅榪欎簺闂銆?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆浣跨敤automake錛岀▼搴忓紑鍙戜漢鍛樺彧闇瑕佸啓涓浜涚畝鍗曠殑鍚湁棰勫畾涔夊畯鐨勬枃浠訛紝鐢盿utoconf鏍規嵁涓涓畯鏂囦歡鐢熸垚configure錛岀敱automake鏍規嵁鍙︿竴涓畯鏂囦歡鐢熸垚Makefile.in錛屽啀浣跨敤configure渚濇嵁Makefile.in鏉ョ敓鎴愪竴涓鍚堟儻渚嬬殑Makefile銆備笅闈㈡垜浠皢璇︾粏浠嬬粛Makefile鐨刟utomake鐢熸垚鏂規硶銆?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆浜屻佷嬌鐢ㄧ殑鐜</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鏈枃鎵鎻愬埌鐨勭▼搴忔槸鍩轟簬Linux鍙戣鐗堟湰錛欶edora Core release 1錛屽畠鍖呭惈浜嗘垜浠鐢ㄥ埌鐨刟utoconf錛宎utomake銆?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆涓夈佷粠helloworld鍏ユ墜</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鎴戜滑浠庡ぇ瀹舵渶甯鎬嬌鐢ㄧ殑渚嬪瓙紼嬪簭helloworld寮濮嬨?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆涓嬮潰鐨勮繃紼嬪鏋滅畝鍗曞湴璇存潵灝辨槸錛?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鏂板緩涓変釜鏂囦歡錛?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆銆helloworld.c<br>銆銆銆configure.in<br>銆銆銆Makefile.am</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鐒跺悗鎵ц錛?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>aclocal; autoconf; automake --add-missing; ./configure; make; ./helloworld</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆灝卞彲浠ョ湅鍒癕akefile琚駭鐢熷嚭鏉ワ紝鑰屼笖鍙互灝唄elloworld.c緙栬瘧閫氳繃銆?/font></p> <font face=瀹嬩綋>寰堢畝鍗曞惂錛屽嚑鏉″懡浠ゅ氨鍙互鍋氬嚭涓涓鍚堟儻渚嬬殑Makefile錛屾劅瑙夊浣曞憖銆?/font> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鐜板湪寮濮嬩粙緇嶈緇嗙殑榪囩▼錛?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆1銆佸緩鐩綍</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鍦ㄤ綘鐨勫伐浣滅洰褰曚笅寤轟竴涓猦elloworld鐩綍錛屾垜浠敤瀹冩潵瀛樻斁helloworld紼嬪簭鍙婄浉鍏蟲枃浠訛紝濡傚湪/home/my/build涓嬶細</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>$ mkdir helloword<br>$ cd helloworld</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆2銆?helloworld.c</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鐒跺悗鐢ㄤ綘鑷繁鏈鍠滄鐨勭紪杈戝櫒鍐欎竴涓猦ellowrold.c鏂囦歡錛屽鍛戒護錛歷i helloworld.c銆備嬌鐢ㄤ笅闈㈢殑浠g爜浣滀負helloworld.c鐨勫唴瀹廣?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>int main(int argc, char** argv)<br>{<br>printf("Hello, Linux World!\n");<br>return 0;<br>}</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆瀹屾垚鍚庝繚瀛橀鍑恒?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鐜板湪鍦╤elloworld鐩綍涓嬪氨搴旇鏈変竴涓綘鑷繁鍐欑殑helloworld.c浜嗐?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆3銆佺敓鎴恈onfigure</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鎴戜滑浣跨敤autoscan鍛戒護鏉ュ府鍔╂垜浠牴鎹洰褰曚笅鐨勬簮浠g爜鐢熸垚涓涓猚onfigure.in鐨勬ā鏉挎枃浠躲?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鍛戒護錛?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>$ autoscan<br>$ ls<br>configure.scan helloworld.c</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鎵ц鍚庡湪hellowrold鐩綍涓嬩細鐢熸垚涓涓枃浠訛細configure.scan錛屾垜浠彲浠ユ嬁瀹冧綔涓篶onfigure.in鐨勮摑鏈?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鐜板湪灝哻onfigure.scan鏀瑰悕涓篶onfigure.in錛屽茍涓旂紪杈戝畠錛屾寜涓嬮潰鐨勫唴瀹逛慨鏀癸紝鍘繪帀鏃犲叧鐨勮鍙ワ細</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>============================configure.in鍐呭寮濮?========================================<br># -*- Autoconf -*-<br># Process this file with autoconf to produce a configure script.</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>AC_INIT(helloworld.c)<br>AM_INIT_AUTOMAKE(helloworld, 1.0)</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋># Checks for programs.<br>AC_PROG_CC</font></p> <font face=瀹嬩綋>AC_PROG_CC</font> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋># Checks for libraries.</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋># Checks for header files.</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋># Checks for typedefs, structures, and compiler characteristics.</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋># Checks for library functions.<br>AC_OUTPUT(Makefile)<br>============================configure.in鍐呭緇撴潫=========================================</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>銆銆鐒跺悗鎵ц鍛戒護aclocal鍜宎utoconf錛屽垎鍒細浜х敓aclocal.m4鍙奵onfigure涓や釜鏂囦歡錛?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋>$ aclocal<br>$ls<br>aclocal.m4 configure.in helloworld.c<br>$ autoconf<br>$ ls<br>aclocal.m4 autom4te.cache configure configure.in helloworld.c</font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><font face=瀹嬩綋><br>銆銆澶у鍙互鐪嬪埌configure.in鍐呭鏄竴浜涘畯瀹氫箟錛岃繖浜涘畯緇廰utoconf澶勭悊鍚庝細鍙樻垚媯鏌ョ郴緇熺壒鎬с佺幆澧冨彉閲忋佽蔣浠跺繀欏葷殑鍙傛暟鐨剆hell鑴氭湰銆?/font></p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆autoconf 鏄敤鏉ョ敓鎴愯嚜鍔ㄩ厤緗蔣浠舵簮浠g爜鑴氭湰錛坈onfigure錛夌殑宸ュ叿銆俢onfigure鑴氭湰鑳界嫭绔嬩簬autoconf榪愯錛屼笖鍦ㄨ繍琛岀殑榪囩▼涓紝涓嶉渶瑕佺敤鎴風殑騫查銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆瑕佺敓鎴恈onfigure鏂囦歡錛屼綘蹇呴』鍛婅瘔autoconf濡備綍鎵懼埌浣犳墍鐢ㄧ殑瀹忋傛柟寮忔槸浣跨敤aclocal紼嬪簭鏉ョ敓鎴愪綘鐨刟clocal.m4銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆aclocal鏍規嵁configure.in鏂囦歡鐨勫唴瀹癸紝鑷姩鐢熸垚aclocal.m4鏂囦歡銆俛clocal鏄竴涓猵erl 鑴氭湰紼嬪簭錛屽畠鐨勫畾涔夋槸錛?#8220;aclocal - create aclocal.m4 by scanning configure.ac”銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆autoconf浠巆onfigure.in榪欎釜鍒椾婦緙栬瘧杞歡鏃舵墍闇瑕佸悇縐嶅弬鏁扮殑妯℃澘鏂囦歡涓垱寤篶onfigure銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆autoconf闇瑕丟NU m4瀹忓鐞嗗櫒鏉ュ鐞哸clocal.m4錛岀敓鎴恈onfigure鑴氭湰銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆m4鏄竴涓畯澶勭悊鍣ㄣ傚皢杈撳叆鎷瘋礉鍒拌緭鍑猴紝鍚屾椂灝嗗畯灞曞紑銆傚畯鍙互鏄唴宓岀殑錛屼篃鍙互鏄敤鎴峰畾涔夌殑銆傞櫎浜嗗彲浠ュ睍寮瀹忥紝m4榪樻湁涓浜涘唴寤虹殑鍑芥暟錛岀敤鏉ュ紩鐢ㄦ枃浠訛紝鎵ц鍛戒護錛屾暣鏁拌繍綆楋紝鏂囨湰鎿嶄綔錛屽驚鐜瓑銆俶4鏃㈠彲浠ヤ綔涓虹紪璇戝櫒鐨勫墠绔紝涔熷彲浠ュ崟鐙綔涓轟竴涓畯澶勭悊鍣ㄣ?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">4銆佹柊寤篗akefile.am</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鏂板緩Makefile.am鏂囦歡錛屽懡浠わ細</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>$ vi Makefile.am</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>銆銆鍐呭濡備笅:</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>AUTOMAKE_OPTIONS=foreign<br>bin_PROGRAMS=helloworld<br>helloworld_SOURCES=helloworld.c</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>銆銆automake浼氭牴鎹綘鍐欑殑Makefile.am鏉ヨ嚜鍔ㄧ敓鎴怣akefile.in銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆Makefile.am涓畾涔夌殑瀹忓拰鐩爣,浼氭寚瀵糰utomake鐢熸垚鎸囧畾鐨勪唬鐮併備緥濡傦紝瀹廱in_PROGRAMS灝嗗鑷寸紪璇戝拰榪炴帴鐨勭洰鏍囪鐢熸垚銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆5銆佽繍琛宎utomake</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鍛戒護錛?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>$ automake --add-missing<br>configure.in: installing `./install-sh'<br>configure.in: installing `./mkinstalldirs'<br>configure.in: installing `./missing'<br>Makefile.am: installing `./depcomp'</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>銆銆automake浼氭牴鎹甅akefile.am鏂囦歡浜х敓涓浜涙枃浠訛紝鍖呭惈鏈閲嶈鐨凪akefile.in銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆6銆佹墽琛宑onfigure鐢熸垚Makefile</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>$ ./configure<br>checking for a BSD-compatible install... /usr/bin/install -c<br>checking whether build environment is sane... yes<br>checking for gawk... gawk<br>checking whether make sets $(MAKE)... yes<br>checking for gcc... gcc<br>checking for C compiler default output... a.out<br>checking whether the C compiler works... yes<br>checking whether we are cross compiling... no<br>checking for suffix of executables...<br>checking for suffix of object files... o<br>checking whether we are using the GNU C compiler... yes<br>checking whether gcc accepts -g... yes<br>checking for gcc option to accept ANSI C... none needed<br>checking for style of include used by make... GNU<br>checking dependency style of gcc... gcc3<br>configure: creating ./config.status<br>config.status: creating Makefile<br>config.status: executing depfiles commands<br>$ ls -l Makefile<br>-rw-rw-r-- 1 yutao yutao 15035 Oct 15 10:40 Makefile</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>銆銆浣犲彲浠ョ湅鍒幫紝姝ゆ椂Makefile宸茬粡浜х敓鍑烘潵浜嗐?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆7銆佷嬌鐢∕akefile緙栬瘧浠g爜</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>$ make<br>if gcc -DPACKAGE_NAME="" -DPACKAGE_TARNAME="" -DPACKAGE_VERSION="" -</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">DPACKAGE_STRING="" -DPACKAGE_BUGREPORT="" -DPACKAGE="helloworld" -DVERSION="1.0"</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">-I. -I. -g -O2 -MT helloworld.o -MD -MP -MF ".deps/helloworld.Tpo" \<br>-c -o helloworld.o `test -f 'helloworld.c' || echo './'`helloworld.c; \<br>then mv -f ".deps/helloworld.Tpo" ".deps/helloworld.Po"; \<br>else rm -f ".deps/helloworld.Tpo"; exit 1; \<br>fi<br>gcc -g -O2 -o helloworld helloworld.o </p> 榪愯helloworld <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>$ ./helloworld<br>Hello, Linux World!</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"> </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new"><br>銆銆榪欐牱helloworld灝辯紪璇戝嚭鏉ヤ簡錛屼綘濡傛灉鎸変笂闈㈢殑姝ラ鏉ュ仛鐨勮瘽錛屽簲璇ヤ篃浼氬緢瀹規槗鍦扮紪璇戝嚭姝g‘鐨刪elloworld鏂囦歡銆備綘榪樺彲浠ヨ瘯鐫浣跨敤涓浜涘叾浠栫殑make鍛戒護錛屽make clean錛宮ake install錛宮ake dist錛岀湅鐪嬪畠浠細緇欎綘浠涔堟牱鐨勬晥鏋溿傛劅瑙夊浣曪紵鑷繁涔熻兘鍐欏嚭榪欎箞涓撲笟鐨凪akefile錛岃佹澘涓瀹氫細瀵逛綘鍒洰鐩哥湅銆?br>鍥涖佹繁鍏ユ祬鍑?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆閽堝涓婇潰鎻愬埌鐨勫悇涓懡浠わ紝鎴戜滑鍐嶅仛浜涜緇嗙殑浠嬬粛銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆1銆?autoscan</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆autoscan鏄敤鏉ユ壂鎻忔簮浠g爜鐩綍鐢熸垚configure.scan鏂囦歡鐨勩俛utoscan鍙互鐢ㄧ洰褰曞悕鍋氫負鍙傛暟錛屼絾濡傛灉浣犱笉浣跨敤鍙傛暟鐨勮瘽錛岄偅涔坅utoscan灝嗚涓轟嬌鐢ㄧ殑鏄綋鍓嶇洰褰曘俛utoscan灝嗘壂鎻忎綘鎵鎸囧畾鐩綍涓殑婧愭枃浠訛紝騫跺垱寤篶onfigure.scan鏂囦歡銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆2銆?configure.scan</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆configure.scan鍖呭惈浜?nbsp;<br> <br> <br>  <br> <br> <br>緋葷粺閰嶇疆鐨勫熀鏈夐」錛岄噷闈㈤兘鏄竴浜涘畯瀹氫箟銆傛垜浠渶瑕佸皢瀹冩敼鍚嶄負configure.in</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆3銆?aclocal</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆aclocal鏄竴涓猵erl 鑴氭湰紼嬪簭銆俛clocal鏍規嵁configure.in鏂囦歡鐨勫唴瀹癸紝鑷姩鐢熸垚aclocal.m4鏂囦歡銆俛clocal鐨勫畾涔夋槸錛?#8220;aclocal - create aclocal.m4 by scanning configure.ac”銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆4銆?autoconf</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆autoconf鏄敤鏉ヤ駭鐢焎onfigure鏂囦歡鐨勩俢onfigure鏄竴涓剼鏈紝瀹冭兘璁劇疆婧愮▼搴忔潵閫傚簲鍚勭涓嶅悓鐨勬搷浣滅郴緇熷鉤鍙幫紝騫朵笖鏍規嵁涓嶅悓鐨勭郴緇熸潵浜х敓鍚堥傜殑Makefile錛屼粠鑰屽彲浠ヤ嬌浣犵殑婧愪唬鐮佽兘鍦ㄤ笉鍚岀殑鎿嶄綔緋葷粺騫沖彴涓婅緙栬瘧鍑烘潵銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆configure.in鏂囦歡鐨勫唴瀹規槸涓浜涘畯錛岃繖浜涘畯緇忚繃autoconf 澶勭悊鍚庝細鍙樻垚媯鏌ョ郴緇熺壒鎬с佺幆澧冨彉閲忋佽蔣浠跺繀欏葷殑鍙傛暟鐨剆hell鑴氭湰銆俢onfigure.in鏂囦歡涓殑瀹忕殑欏哄簭騫舵病鏈夎瀹氾紝浣嗘槸浣犲繀欏誨湪鎵鏈夊畯鐨勬渶鍓嶉潰鍜屾渶鍚庨潰鍒嗗埆鍔犱笂AC_INIT瀹忓拰AC_OUTPUT瀹忋?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鍦╟onfigure.ini涓細</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆#鍙瘋〃紺烘敞閲婏紝榪欎釜瀹忓悗闈㈢殑鍐呭灝嗚蹇界暐銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆AC_INIT(FILE)</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜瀹忕敤鏉ユ鏌ユ簮浠g爜鎵鍦ㄧ殑璺緞銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">AM_INIT_AUTOMAKE(PACKAGE, VERSION) </p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜瀹忔槸蹇呴』鐨勶紝瀹冩弿榪頒簡鎴戜滑灝嗚鐢熸垚鐨勮蔣浠跺寘鐨勫悕瀛楀強鍏剁増鏈彿錛歅ACKAGE鏄蔣浠跺寘鐨勫悕瀛楋紝VERSION鏄増鏈彿銆傚綋浣犱嬌鐢╩ake dist鍛戒護鏃訛紝瀹冧細緇欎綘鐢熸垚涓涓被浼糷elloworld-1.0.tar.gz鐨勮蔣浠跺彂琛屽寘錛屽叾涓氨鏈夊搴旂殑杞歡鍖呯殑鍚嶅瓧鍜岀増鏈彿銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">AC_PROG_CC</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜瀹忓皢媯鏌ョ郴緇熸墍鐢ㄧ殑C緙栬瘧鍣ㄣ?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">AC_OUTPUT(FILE)</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜瀹忔槸鎴戜滑瑕佽緭鍑虹殑Makefile鐨勫悕瀛椼?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鎴戜滑鍦ㄤ嬌鐢╝utomake鏃訛紝瀹為檯涓婅繕闇瑕佺敤鍒板叾浠栫殑涓浜涘畯錛屼絾鎴戜滑鍙互鐢╝clocal 鏉ュ府鎴戜滑鑷姩浜х敓銆傛墽琛宎clocal鍚庢垜浠細寰楀埌aclocal.m4鏂囦歡銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆浜х敓浜哻onfigure.in鍜宎clocal.m4 涓や釜瀹忔枃浠跺悗錛屾垜浠氨鍙互浣跨敤autoconf鏉ヤ駭鐢焎onfigure鏂囦歡浜嗐?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆5銆?Makefile.am</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆Makefile.am鏄敤鏉ョ敓鎴怣akefile.in鐨勶紝闇瑕佷綘鎵嬪伐涔﹀啓銆侻akefile.am涓畾涔変簡涓浜涘唴瀹癸細</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">AUTOMAKE_OPTIONS</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜鏄痑utomake鐨勯夐」銆傚湪鎵цautomake鏃訛紝瀹冧細媯鏌ョ洰褰曚笅鏄惁瀛樺湪鏍囧噯GNU杞歡鍖呬腑搴斿叿澶囩殑鍚勭鏂囦歡錛屼緥濡侫UTHORS銆丆hangeLog銆丯EWS絳夋枃浠躲傛垜浠皢鍏惰緗垚foreign鏃訛紝automake浼氭敼鐢ㄤ竴鑸蔣浠跺寘鐨勬爣鍑嗘潵媯鏌ャ?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">bin_PROGRAMS</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜鏄寚瀹氭垜浠墍瑕佷駭鐢熺殑鍙墽琛屾枃浠剁殑鏂囦歡鍚嶃傚鏋滀綘瑕佷駭鐢熷涓彲鎵ц鏂囦歡錛岄偅涔堝湪鍚勪釜鍚嶅瓧闂寸敤絀烘牸闅斿紑銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">helloworld_SOURCES</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆榪欎釜鏄寚瀹氫駭鐢?#8220;helloworld”鏃舵墍闇瑕佺殑婧愪唬鐮併傚鏋滃畠鐢ㄥ埌浜嗗涓簮鏂囦歡錛岄偅涔堣浣跨敤絀烘牸絎﹀彿灝嗗畠浠殧寮銆傛瘮濡傞渶瑕乭elloworld.h錛宧elloworld.c閭d箞璇峰啓鎴恏elloworld_SOURCES= helloworld.h helloworld.c銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆濡傛灉浣犲湪bin_PROGRAMS瀹氫箟浜嗗涓彲鎵ц鏂囦歡錛屽垯瀵瑰簲姣忎釜鍙墽琛屾枃浠墮兘瑕佸畾涔夌浉瀵圭殑filename_SOURCES銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆6銆?automake</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鎴戜滑浣跨敤automake --add-missing鏉ヤ駭鐢烳akefile.in銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆閫夐」--add-missing鐨勫畾涔夋槸“add missing standard files to package”錛屽畠浼氳automake鍔犲叆涓涓爣鍑嗙殑杞歡鍖呮墍蹇呴』鐨勪竴浜涙枃浠躲?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鎴戜滑鐢╝utomake浜х敓鍑烘潵鐨凪akefile.in鏂囦歡鏄鍚圙NU Makefile鎯緥鐨勶紝鎺ヤ笅鏉ユ垜浠彧瑕佹墽琛宑onfigure榪欎釜shell 鑴氭湰灝卞彲浠ヤ駭鐢熷悎閫傜殑 Makefile 鏂囦歡浜嗐?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆7銆?Makefile</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鍦ㄧ鍚圙NU Makefiel鎯緥鐨凪akefile涓紝鍖呭惈浜嗕竴浜涘熀鏈殑棰勫厛瀹氫箟鐨勬搷浣滐細</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">make</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鏍規嵁Makefile緙栬瘧婧愪唬鐮侊紝榪炴帴錛岀敓鎴愮洰鏍囨枃浠訛紝鍙墽琛屾枃浠躲?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">make clean</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆娓呴櫎涓婃鐨刴ake鍛戒護鎵浜х敓鐨刼bject鏂囦歡錛堝悗緙涓?#8220;.o”鐨勬枃浠訛級鍙婂彲鎵ц鏂囦歡銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">make install</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆灝嗙紪璇戞垚鍔熺殑鍙墽琛屾枃浠跺畨瑁呭埌緋葷粺鐩綍涓紝涓鑸負/usr/local/bin鐩綍銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">make dist</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆浜х敓鍙戝竷杞歡鍖呮枃浠訛紙鍗砫istribution package錛夈傝繖涓懡浠ゅ皢浼氬皢鍙墽琛屾枃浠跺強鐩稿叧鏂囦歡鎵撳寘鎴愪竴涓猼ar.gz鍘嬬緝鐨勬枃浠剁敤鏉ヤ綔涓哄彂甯冭蔣浠剁殑杞歡鍖呫?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆瀹冧細鍦ㄥ綋鍓嶇洰褰曚笅鐢熸垚涓涓悕瀛楃被浼?#8220;PACKAGE-VERSION.tar.gz”鐨勬枃浠躲侾ACKAGE鍜孷ERSION錛屾槸鎴戜滑鍦╟onfigure.in涓畾涔夌殑AM_INIT_AUTOMAKE(PACKAGE, VERSION)銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">make distcheck</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆鐢熸垚鍙戝竷杞歡鍖呭茍瀵瑰叾榪涜嫻嬭瘯媯鏌ワ紝浠ョ‘瀹氬彂甯冨寘鐨勬紜с傝繖涓搷浣滃皢鑷姩鎶婂帇緙╁寘鏂囦歡瑙e紑錛岀劧鍚庢墽琛宑onfigure鍛戒護錛屽茍涓旀墽琛宮ake錛屾潵紜緙栬瘧涓嶅嚭鐜伴敊璇紝鏈鍚庢彁紺轟綘杞歡鍖呭凡緇忓噯澶囧ソ錛屽彲浠ュ彂甯冧簡銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">===============================================<br>helloworld-1.0.tar.gz is ready for distribution<br>===============================================<br>make distclean</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆綾諱技make clean錛屼絾鍚屾椂涔熷皢configure鐢熸垚鐨勬枃浠跺叏閮ㄥ垹闄ゆ帀錛屽寘鎷琈akefile銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆浜斻佺粨鏉熻</p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆閫氳繃涓婇潰鐨勪粙緇嶏紝浣犲簲璇ュ彲浠ュ緢瀹規槗鍦扮敓鎴愪竴涓綘鑷繁鐨勭鍚圙NU鎯緥鐨凪akefile鏂囦歡鍙婂搴旂殑欏圭洰鏂囦歡銆?/p> <p style="FONT-SIZE: 12pt; FONT-FAMILY: courier new">銆銆濡傛灉浣犳兂鍐欏嚭鏇村鏉傜殑涓旂鍚堟儻渚嬬殑Makefile錛屼綘鍙互鍙傝冧竴浜涘紑鏀句唬鐮佺殑欏圭洰涓殑configure.in鍜孧akefile.am鏂囦歡錛屾瘮濡傦細宓屽叆寮忔暟鎹簱sqlite錛屽崟鍏冩祴璇昪ppunit銆?/p> <img src ="http://m.shnenglu.com/liu1061/aggbug/54543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/liu1061/" target="_blank">T.S Liu</a> 2008-06-25 11:46 <a href="http://m.shnenglu.com/liu1061/articles/54543.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://jx963.com" target="_blank">国语精品一区</a>| <a href="http://wce-expo.com" target="_blank">欧美亚洲一区二区三区</a>| <a href="http://baigoso.com" target="_blank">国产精品日韩二区</a>| <a href="http://anquye16.com" target="_blank">一区二区三区在线免费视频</a>| <a href="http://zucai168.com" target="_blank">99成人在线</a>| <a href="http://562595.com" target="_blank">看片网站欧美日韩</a>| <a href="http://zhongqingshiye.com" target="_blank">亚洲午夜精品国产</a>| <a href="http://kk553.com" target="_blank">欧美日韩精品系列</a>| <a href="http://798814.com" target="_blank">亚洲精品国精品久久99热</a>| <a href="http://663747.com" target="_blank">欧美一区2区视频在线观看</a>| <a href="http://4tobi.com" target="_blank">亚洲精品国久久99热</a>| <a href="http://060607.com" target="_blank">久久高清国产</a>| <a href="http://aa224.com" target="_blank">国产精品美女在线</a>| <a href="http://shllswkj.com" target="_blank">亚洲婷婷综合色高清在线</a>| <a href="http://www-87633.com" target="_blank">亚洲日本一区二区</a>| <a href="http://www19829.com" target="_blank">欧美三日本三级三级在线播放</a>| <a href="http://stt788.com" target="_blank">亚洲福利久久</a>| <a href="http://www-663345.com" target="_blank">欧美黄色大片网站</a>| <a href="http://876769.com" target="_blank">欧美日韩国产一区二区三区</a>| <a href="http://belerbb.com" target="_blank">亚洲精品一二三</a>| <a href="http://638179.com" target="_blank">99精品99</a>| <a href="http://ccnn33.com" target="_blank">国内在线观看一区二区三区 </a>| <a href="http://233116.com" target="_blank">久久字幕精品一区</a>| <a href="http://287677.com" target="_blank">欧美伊人久久</a>| <a href="http://obatshaka.com" target="_blank">亚洲国产欧美不卡在线观看</a>| <a href="http://y9z8.com" target="_blank">亚洲电影免费</a>| <a href="http://677679.com" target="_blank">国产精品免费一区二区三区观看</a>| <a href="http://7kz6.com" target="_blank">久久综合色婷婷</a>| <a href="http://a718fun.com" target="_blank">欧美韩国日本综合</a>| <a href="http://xunlei520.com" target="_blank">亚洲自拍高清</a>| <a href="http://quanfadq.com" target="_blank">久久久久久亚洲综合影院红桃</a>| <a href="http://ooonefteprompellets.com" target="_blank">亚洲狠狠丁香婷婷综合久久久</a>| <a href="http://jiyixitong.com" target="_blank">亚洲精品一二三</a>| <a href="http://www22336.com" target="_blank">欧美一区二区久久久</a>| <a href="http://www77577.com" target="_blank">久久经典综合</a>| <a href="http://ategpu.com" target="_blank">亚洲自拍偷拍麻豆</a>| <a href="http://devmashup.com" target="_blank">美女露胸一区二区三区</a>| <a href="http://g2000vip.com" target="_blank">亚洲视频999</a>| <a href="http://jkllkg.com" target="_blank">免费在线视频一区</a>| <a href="http://www-3844444.com" target="_blank">久久久久高清</a>| <a href="http://x1317.com" target="_blank">国产精品超碰97尤物18</a>| <a href="http://www9797abc.com" target="_blank">欧美成人一区二区在线</a>| <a href="http://xdlot.com" target="_blank">久久精品国产2020观看福利</a>| <a href="http://caoav8.com" target="_blank">国产一区91</a>| <a href="http://dfrllaser.com" target="_blank">亚洲乱码精品一二三四区日韩在线</a>| <a href="http://402626com.com" target="_blank">国产精品国产成人国产三级</a>| <a href="http://fuwu56.com" target="_blank">久久精品动漫</a>| <a href="http://www-222kkk.com" target="_blank">国产女主播在线一区二区</a>| <a href="http://2629929.com" target="_blank">这里是久久伊人</a>| <a href="http://7171152.com" target="_blank">亚洲素人一区二区</a>| <a href="http://elpezomaha.com" target="_blank">欧美大片一区</a>| <a href="http://xiaocao-av.com" target="_blank">欧美国产三区</a>| <a href="http://nagebbs.com" target="_blank">亚洲激情第一页</a>| <a href="http://428820.com" target="_blank">久久久久一本一区二区青青蜜月</a>| <a href="http://689657.com" target="_blank">亚洲小说区图片区</a>| <a href="http://ccnn33.com" target="_blank">欧美亚韩一区</a>| <a href="http://339254.com" target="_blank">亚洲欧美日韩精品综合在线观看</a>| <a href="http://szjyf668.com" target="_blank">欧美日韩高清在线播放</a>| <a href="http://9486322.com" target="_blank">亚洲欧洲一区二区三区在线观看</a>| <a href="http://ccc36-com.com" target="_blank">亚洲国产精品一区二区久 </a>| <a href="http://syruili.com" target="_blank">日韩视频在线观看免费</a>| <a href="http://fxsdcj.com" target="_blank">亚洲自拍偷拍一区</a>| <a href="http://www520590.com" target="_blank">久久福利视频导航</a>| <a href="http://188267.com" target="_blank">国语自产精品视频在线看</a>| <a href="http://xshgwy.com" target="_blank">美女主播精品视频一二三四</a>| <a href="http://430390.com" target="_blank">亚洲黄色天堂</a>| <a href="http://778877k.com" target="_blank">欧美一区二区三区四区在线观看</a>| <a href="http://kinghongs.com" target="_blank">国产精品青草综合久久久久99</a>| <a href="http://easypufu.com" target="_blank">亚洲国产精品美女</a>| <a href="http://799868.com" target="_blank">欧美大片网址</a>| <a href="http://haose23.com" target="_blank">亚洲视频一区在线观看</a>| <a href="http://zgztby.com" target="_blank">久久久久久穴</a>| <a href="http://iacapmm.com" target="_blank">亚洲毛片在线免费观看</a>| <a href="http://193youwu.com" target="_blank">国产精品hd</a>| <a href="http://373336.com" target="_blank">午夜在线视频一区二区区别</a>| <a href="http://05511253.com" target="_blank">久久在线观看视频</a>| <a href="http://www47343.com" target="_blank">国产日韩欧美成人</a>| <a href="http://7504329.com" target="_blank">午夜精彩视频在线观看不卡 </a>| <a href="http://3wbb.com" target="_blank">在线综合亚洲</a>| <a href="http://448968.com" target="_blank">欧美国产日本韩</a>| <a href="http://chongpiapia.com" target="_blank">亚洲直播在线一区</a>| <a href="http://2387463.com" target="_blank">日韩视频永久免费</a>| <a href="http://spidermanseo.com" target="_blank">国产精品区二区三区日本 </a>| <a href="http://lovehefei.com" target="_blank">亚洲福利视频一区二区</a>| <a href="http://aijiaoji.com" target="_blank">亚洲伊人色欲综合网</a>| <a href="http://4388x3.com" target="_blank">精品成人一区二区</a>| <a href="http://302262.com" target="_blank">国产精品免费区二区三区观看</a>| <a href="http://yw1998.com" target="_blank">久久久国产亚洲精品</a>| <a href="http://by21999.com" target="_blank">最近看过的日韩成人</a>| <a href="http://mes-dvd.com" target="_blank">久久在线免费观看</a>| <a href="http://maomi998.com" target="_blank">午夜久久tv</a>| <a href="http://obatshaka.com" target="_blank">亚洲欧美视频在线</a>| <a href="http://xjksrbh.com" target="_blank">一区二区三区三区在线</a>| <a href="http://mm910.com" target="_blank">亚洲精品美女91</a>| <a href="http://proenhub.com" target="_blank">亚洲黄网站黄</a>| <a href="http://by27333.com" target="_blank">亚洲精品一区在线观看香蕉</a>| <a href="http://shnenglu.com" target="_blank">欧美高清视频一区</a>| <a href="http://cnlbogs.com" target="_blank">亚洲欧美日韩一区二区三区在线</a>| <a href="http://xissy.com" target="_blank">亚洲欧洲一区二区在线播放</a>| <a href="http://wewe520.com" target="_blank">亚洲第一毛片</a>| <a href="http://wwwhhh396.com" target="_blank">91久久中文</a>| <a href="http://3597777.com" target="_blank">一本一道久久综合狠狠老精东影业</a>| <a href="http://71oo.com" target="_blank">久久青草欧美一区二区三区</a>| <a href="http://www-44442.com" target="_blank">欧美大片免费观看</a>| <a href="http://x946.com" target="_blank">欧美成人性网</a>| <a href="http://cl6m.com" target="_blank">久久久久久亚洲精品杨幂换脸</a>| <a href="http://6055365.com" target="_blank">欧美在线观看一二区</a>| <a href="http://5555547.com" target="_blank">欧美在线观看你懂的</a>| <a href="http://qdpetlove.com" target="_blank">亚洲国产精品一区二区久</a>| <a href="http://dkmcjc.com" target="_blank">亚洲欧美大片</a>| <a href="http://chinasck.com" target="_blank">欧美日韩ab</a>| <a href="http://405151.com" target="_blank">最近中文字幕日韩精品 </a>| <a href="http://www35177.com" target="_blank">一区二区冒白浆视频</a>| <a href="http://739822.com" target="_blank">欧美在线高清</a>| <a href="http://yzstbjt.com" target="_blank">一区二区三区国产在线</a>| <a href="http://cp88966.com" target="_blank">欧美顶级大胆免费视频</a>| <a href="http://1616mz.com" target="_blank">激情欧美日韩一区</a>| <a href="http://17kfe.com" target="_blank">久久不射2019中文字幕</a>| <a href="http://9993334.com" target="_blank">亚洲性人人天天夜夜摸</a>| <a href="http://yzsss.com" target="_blank">亚洲中字黄色</a>| <a href="http://kuaikan97.com" target="_blank">9国产精品视频</a>| <a href="http://609005.com" target="_blank">欧美日韩高清免费</a>| <a href="http://7770790.com" target="_blank">一区二区三区精密机械公司</a>| <a href="http://yw3329.com" target="_blank">亚洲欧洲日韩女同</a>| <a href="http://3451215.com" target="_blank">美女图片一区二区</a>| <a href="http://www-77537.com" target="_blank">亚洲国产精品久久久久秋霞蜜臀 </a>| <a href="http://xilxx.com" target="_blank">国产精品v片在线观看不卡</a>| <a href="http://wyy66.com" target="_blank">一区视频在线看</a>| <a href="http://100736.com" target="_blank">免费看亚洲片</a>| <a href="http://www218999.com" target="_blank">久久综合影音</a>| <a href="http://tefahsop.com" target="_blank">亚洲日本va午夜在线电影</a>| <a href="http://www-222kkk.com" target="_blank">欧美黄色一区二区</a>| <a href="http://filark.com" target="_blank">免费在线看一区</a>| <a href="http://www-119049.com" target="_blank">一本久久a久久精品亚洲</a>| <a href="http://517hc5.com" target="_blank">亚洲日本精品国产第一区</a>| <a href="http://188267.com" target="_blank">麻豆精品在线播放</a>| <a href="http://samucorvin.com" target="_blank">一区二区高清在线</a>| <a href="http://www-5013.com" target="_blank">久久国产综合精品</a>| <a href="http://666cmc.com" target="_blank">免费在线观看一区二区</a>| <a href="http://mimi78.com" target="_blank">欧美日韩一区二区高清</a>| <a href="http://ahhccz.com" target="_blank">亚洲综合色在线</a>| <a href="http://szjyf668.com" target="_blank">欧美在线网址</a>| <a href="http://783956.com" target="_blank">一区二区动漫</a>| <a href="http://cctbdy.com" target="_blank">久久久噜噜噜久久</a>| <a href="http://6666345.com" target="_blank">99国产麻豆精品</a>| <a href="http://22241com.com" target="_blank">新67194成人永久网站</a>| <a href="http://pron12.com" target="_blank">在线播放国产一区中文字幕剧情欧美 </a>| <a href="http://pgpg520.com" target="_blank">国产亚洲欧美中文</a>| <a href="http://www-544778.com" target="_blank">欧美激情第3页</a>| <a href="http://021jjjflaw.com" target="_blank">欧美视频一区</a>| <a href="http://zz9876.com" target="_blank">欧美成人a∨高清免费观看</a>| <a href="http://www49966.com" target="_blank">欧美精品久久99久久在免费线</a>| <a href="http://8x1080x.com" target="_blank">中文国产一区</a>| <a href="http://889644.com" target="_blank">欧美aⅴ一区二区三区视频</a>| <a href="http://8x1080x.com" target="_blank">香蕉av福利精品导航</a>| <a href="http://qiezisp2.com" target="_blank">免费影视亚洲</a>| <a href="http://xiuxiu124.com" target="_blank">久久久久久电影</a>| <a href="http://alio-ai.com" target="_blank">国产精品美女久久久</a>| <a href="http://345fz.com" target="_blank">亚洲国产高清一区二区三区</a>| <a href="http://223533.com" target="_blank">国产日韩精品一区二区三区在线 </a>| <a href="http://ylsnuha.com" target="_blank">亚洲国产美女</a>| <a href="http://www37999.com" target="_blank">狠狠色丁香婷婷综合影院</a>| <a href="http://414670.com" target="_blank">91久久精品国产91性色</a>| <a href="http://hzhzzz.com" target="_blank">欧美亚洲免费</a>| <a href="http://777777hb.com" target="_blank">亚洲欧美另类国产</a>| <a href="http://noeljgq.com" target="_blank">欧美日韩国产综合视频在线观看</a>| <a href="http://avse69.com" target="_blank">另类亚洲自拍</a>| <a href="http://www-44899.com" target="_blank">在线看片欧美</a>| <a href="http://tsjcmm.com" target="_blank">久久免费偷拍视频</a>| <a href="http://www353488.com" target="_blank">久久字幕精品一区</a>| <a href="http://papala4444.com" target="_blank">国产在线精品自拍</a>| <a href="http://anquye16.com" target="_blank">久久精品国产欧美激情</a>| <a href="http://yiluee.com" target="_blank">美女久久网站</a>| <a href="http://tom3958.com" target="_blank">亚洲国产欧美国产综合一区</a>| <a href="http://yeyelu888.com" target="_blank">久久久久久久久久久久久女国产乱</a>| <a href="http://caoliu2022.com" target="_blank">亚洲欧美另类国产</a>| <a href="http://wxsanyuan.com" target="_blank">国产精品实拍</a>| <a href="http://www-9694.com" target="_blank">久久视频在线免费观看</a>| <a href="http://7555hh.com" target="_blank">欧美大色视频</a>| <a href="http://880895.com" target="_blank">国产精品区免费视频</a>| <a href="http://www-888593.com" target="_blank">久久久天天操</a>| <a href="http://www-333304.com" target="_blank">亚洲国产日韩综合一区</a>| <a href="http://710195.com" target="_blank">欧美好骚综合网</a>| <a href="http://www49718.com" target="_blank">亚洲一级特黄</a>| <a href="http://www47011.com" target="_blank">美国十次成人</a>| <a href="http://y65o.com" target="_blank">亚洲午夜免费视频</a>| <a href="http://eee285.com" target="_blank">国产欧美亚洲精品</a>| <a href="http://www-919198.com" target="_blank">米奇777在线欧美播放</a>| <a href="http://dracotek.com" target="_blank">日韩视频不卡</a>| <a href="http://cnbluebox.com" target="_blank">久久一区二区精品</a>| <a href="http://hakuihoso.com" target="_blank">99在线精品视频在线观看</a>| <a href="http://4080sy.com" target="_blank">国产精自产拍久久久久久蜜</a>| <a href="http://yc0989.com" target="_blank">欧美一区二视频在线免费观看</a>| <a href="http://www5123ri.com" target="_blank">久久综合五月</a>| <a href="http://1332233.com" target="_blank">欧美专区亚洲专区</a>| <a href="http://lianjiemenye.com" target="_blank">亚洲欧洲一区二区在线播放</a>| <a href="http://221080.com" target="_blank">国产日韩欧美高清免费</a>| <a href="http://977mo.com" target="_blank">欧美日韩免费一区</a>| <a href="http://www-666638.com" target="_blank">蜜臀91精品一区二区三区</a>| <a href="http://www-55655.com" target="_blank">亚洲视频axxx</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>