锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鍦╓indows涓嬪畨瑁呰蔣浠舵椂錛屽彧闇鐢ㄩ紶鏍囧弻鍑昏蔣浠剁殑瀹夎紼嬪簭錛屾垨鑰呯敤Zip絳夎В鍘嬬緝杞歡瑙e帇緙╁嵆鍙畨瑁呫傚湪Linux涓嬪畨瑁呰蔣浠跺鍒濆鑰呮潵璇達(dá)紝闅懼害楂樹簬Windows涓嬭蔣浠跺畨瑁呫備笅闈㈡垜灝辮緇嗚瑙inux涓嬪浣曞畨瑁呰蔣浠躲?
鍏堟潵鐪嬬湅Linux杞歡鎵╁睍鍚嶃傝蔣浠跺悗緙涓?rpm鏈鍒濇槸Red Hat Linux鎻愪緵鐨勪竴縐嶅寘灝佽鏍煎紡錛岀幇鍦ㄨ澶歀inux鍙戣鐗堟湰閮戒嬌鐢紱鍚庣紑涓?deb鏄疍ebain Linux鎻愪緵鐨勪竴縐嶅寘灝佽鏍煎紡錛涘悗緙涓?tar.gz銆乼ar.Z銆乼ar.bz2鎴?tgz鏄嬌鐢║nix緋葷粺鎵撳寘宸ュ叿tar鎵撳寘鐨勶紱鍚庣紑涓?bin 鐨勪竴鑸槸涓浜涘晢涓氳蔣浠躲傞氳繃鎵╁睍鍚嶅彲浠ヤ簡瑙h蔣浠舵牸寮忥紝榪涜屼簡瑙h蔣浠跺畨瑁呫?
RPM鏍煎紡杞歡鍖呯殑瀹夎
1.綆浠?br />鍑犱箮鎵鏈夌殑Linux鍙戣鐗堟湰閮戒嬌鐢ㄦ煇縐嶅艦寮忕殑杞歡鍖呯鐞嗗畨瑁呫佹洿鏂板拰鍗歌澆杞歡銆備笌鐩存帴浠庢簮浠g爜瀹夎鐩告瘮錛岃蔣浠跺寘綆$悊鏄撲簬瀹夎鍜屽嵏杞斤紱鏄撲簬鏇存柊宸插畨瑁呯殑杞歡鍖咃紱鏄撲簬淇濇姢閰嶇疆鏂囦歡錛涙槗浜庤窡韙凡瀹夎鏂囦歡銆?
RPM鍏ㄧО鏄疪ed Hat Package Manager錛圧ed Hat鍖呯鐞嗗櫒錛夈俁PM鏈川涓婂氨鏄竴涓寘錛屽寘鍚彲浠ョ珛鍗沖湪鐗瑰畾鏈哄櫒浣撶郴緇撴瀯涓婂畨瑁呭拰榪愯鐨凩inux杞歡銆俁PM紺烘剰鍥捐鍥?銆?
澶у鏁癓inux RPM杞歡鍖呯殑鍛藉悕鏈変竴瀹氱殑瑙勫緥錛屽畠閬靛驚鍚嶇О-鐗堟湰-淇鐗?綾誨瀷錛峂Ysoftware-1.2 -1.i386.rpm 銆?
2.瀹夎RPM鍖呰蔣浠?
錛冦rpm -ivh MYsoftware-1.2 -1.i386.rpm
RPM鍛戒護(hù)涓昏鍙傛暟錛?
-p 鏄劇ず瀹夎榪涘害銆?br />-f 蹇界暐浠諱綍閿欒銆?br />-U 鍗囩駭瀹夎銆?br />-v 媯嫻嬪浠舵槸鍚︽紜畨瑁呫?/ccid>
榪欎簺鍙傛暟鍙互鍚屾椂閲囩敤銆傛洿澶氱殑鍐呭鍙互鍙傝僐PM鐨勫懡浠ゅ府鍔┿?
3.鍗歌澆杞歡
錛冦rpm -e 杞歡鍚?
闇瑕佽鏄庣殑鏄紝涓婇潰浠g爜涓嬌鐢ㄧ殑鏄蔣浠跺悕錛岃屼笉鏄蔣浠跺寘鍚嶃備緥濡傦紝瑕佸嵏杞絪oftware-1.2.-1.i386.rpm榪欎釜鍖呮椂錛屽簲鎵ц錛?br />錛價(jià)pm -e software
4.寮鴻鍗歌澆RPM鍖?br />鏈夋椂闄ゅ幓涓涓猂PM鏄笉琛岀殑錛屽挨鍏舵槸緋葷粺涓婃湁鍒殑紼嬪簭渚濊禆浜庡畠鐨勬椂鍊欍傚鏋滄墽琛屽懡浠や細(xì)鏄劇ず濡備笅閿欒淇℃伅錛?
error: removing these packages would break dependencies:
/usr/X11R6/bin/xsnow is needed by x-amusements-1.0-1
鍦ㄨ繖縐嶆儏鍐典笅錛屽彲浠ョ敤--force閫夐」閲嶆柊瀹夎xsnow錛?
xsnow
榪欓噷鎺ㄨ崘浣跨敤宸ュ叿杞歡Kleandisk錛岀敤瀹冨彲浠ュ畨鍏ㄥ交搴曟竻鐞嗘帀涓嶅啀浣跨敤鐨凴PM鍖呫傝緇嗘儏鍐佃鏌ョ湅2003騫淬婂紑鏀劇郴緇熶笘鐣屻嬬12鏈熴?
5.瀹夎.src.rpm綾誨瀷鐨勬枃浠?br />鐩墠RPM鏈変袱縐嶆ā寮忥紝涓縐嶆槸宸茬粡榪囩紪鐮佺殑錛坕386.rpm錛夛紝涓縐嶆槸鏈粡緙栫爜鐨勶紙src.rpm錛夈?br />rpm --rebuild Filename.src.rpm
榪欐椂緋葷粺浼?xì)寰忕珛涓涓枃浠禙ilenamr.rpm錛屽湪/usr/src/redflag/RPMS/瀛愮洰褰曚笅錛屼竴鑸槸i386錛屽叿浣撴儏鍐靛拰Linux鍙戣鐗堟湰鏈夊叧銆傜劧鍚庢墽琛屼笅闈唬鐮佸嵆鍙細(xì)
rpm -ivh /usr/src/regflag/RPMS/i386/Filename.rpm
浣跨敤deb鎵撳寘鐨勮蔣浠跺畨瑁?
deb 鏄疍ebian Linux鎻愪緵鐨勪竴涓寘綆$悊鍣紝瀹冧笌RPM鍗佸垎綾諱技銆備絾鐢變簬RPM鍑虹幇寰楁棭錛屽茍涓斿簲鐢ㄥ箍娉涳紝鎵浠ュ湪鍚勭鐗堟湰鐨凩inux涓兘甯歌鍒幫紝鑰孌ebian鐨勫寘綆$悊鍣╠pkg鍙嚭鐜板湪Debina Linux涓傚畠鐨勪紭鐐規(guī)槸涓嶇敤琚弗鏍肩殑渚濊禆鎬ф鏌ユ墍鍥版壈錛岀己鐐規(guī)槸鍙湪Debian Linux鍙戣鐗堜腑鎵嶈兘瑙佸埌榪欎釜鍖呯鐞嗗伐鍏楓?
1. 瀹夎
錛冦dpkg -i MYsoftware-1.2.-1.deb
2. 鍗歌澆
錛冦dpkg -e MYsoftware
浣跨敤婧愪唬鐮佽繘琛岃蔣浠跺畨瑁?/b>
鍜孯PM瀹夎鏂瑰紡鐩告瘮錛屼嬌鐢ㄦ簮浠g爜榪涜杞歡瀹夎浼?xì)澶嶆潅涓浜涳紝浣嗘槸鐢ㄦ簮浠g爜瀹夎杞歡鏄疞inux涓嬭繘琛岃蔣浠跺畨瑁呯殑閲嶈鎵嬫錛屼篃鏄繍琛孡inux鐨勬渶涓昏鐨勪紭鍔夸箣涓銆備嬌鐢ㄦ簮浠g爜瀹夎杞歡錛岃兘鎸夌収鐢ㄦ埛鐨勯渶瑕侀夋嫨瀹氬埗鐨勫畨瑁呮柟寮忚繘琛屽畨瑁咃紝鑰屼笉鏄粎浠呬緷闈犻偅浜涘湪瀹夎鍖呬腑鐨勯閰嶇疆鐨勫弬鏁伴夋嫨瀹夎銆傚彟澶栵紝浠嶇劧鏈変竴浜涜蔣浠剁▼搴忓彧鑳戒粠婧愪唬鐮佸榪涜瀹夎銆?
鐜板湪鏈夊緢澶氬湴鏂歸兘鎻愪緵婧愪唬鐮佸寘錛屽埌搴曞湪浠涔堝湴鏂硅幏寰楀彇鍐充簬杞歡鐨勭壒孌婇渶瑕併傚浜庨偅浜涗嬌鐢ㄦ瘮杈冩櫘閬嶇殑杞歡錛屽Sendmail錛屽彲浠ヤ粠鍟嗕笟緗戠珯澶勪笅杞芥簮浠g爜杞歡鍖咃紙濡俬ttp://www.sendmail.org 錛夈備竴鑸殑杞歡鍖咃紝鍙粠寮鍙戣呯殑Web绔欑偣涓嬭澆銆備笅闈粙緇嶄竴涓嬪畨瑁呮楠わ細(xì)
1.瑙e帇鏁版嵁鍖?br />婧愪唬鐮佽蔣浠墮氬父浠?tar.gz鍋氫負(fù)鎵╁睍鍚?涔熸湁tar.Z銆乼ar.bz2鎴?tgz涓烘墿灞曞悕鐨勩備笉鍚屾墿灞曞悕瑙e帇緙╁懡浠や篃涓嶇浉鍚岋紝瑙佽〃1銆?
2.緙栬瘧杞歡
鎴愬姛瑙e帇緙╂簮浠g爜鏂囦歡鍚庯紝榪涘叆瑙e寘鐨勭洰褰曘傚湪瀹夎鍓嶉槄璇籖eadme鏂囦歡鍜孖nstall鏂囦歡銆傚敖綆¤澶氭簮浠g爜鏂囦歡鍖呴兘浣跨敤鍩烘湰鐩稿悓鐨勫懡浠わ紝浣嗘槸鏈夋椂鍦ㄩ槄璇昏繖浜涙枃浠舵椂鑳藉彂鐜頒竴浜涢噸瑕佺殑鍖哄埆銆備緥濡傦紝鏈変簺杞歡鍖呭惈涓涓彲浠ュ畨瑁呯殑瀹夎鑴氭湰紼嬪簭錛?sh錛夈傚湪瀹夎鍓嶉槄璇昏繖浜涜鏄庢枃浠訛紝鏈夊姪浜庡畨瑁呮垚鍔熷拰鑺傜害鏃墮棿銆?
鍦ㄥ畨瑁呰蔣浠朵互鍓嶈鎴愪負(fù)root鐢ㄦ埛銆傚疄鐜拌繖涓鐐歸氬父鏈変袱縐嶆柟寮忥細(xì)鍦ㄥ彟涓鍙扮粓绔互root鐢ㄦ埛鐧誨綍錛屾垨鑰呰緭鍏モ渟u鈥濓紝姝ゆ椂緋葷粺浼?xì)鎻惤C鴻緭鍏oot鐢ㄦ埛鐨勫瘑鐮併傝緭鍏ュ瘑鐮佷互鍚庯紝灝卞皢涓鐩存嫢鏈塺oot鐢ㄦ埛鐨勬潈闄愩傚鏋滃凡緇忔槸root鐢ㄦ埛錛岄偅灝卞彲浠ヨ繘琛屼笅涓姝ャ?
閫氬父鐨勫畨瑁呮柟娉曟槸浠庡畨瑁呭寘鐨勭洰褰曟墽琛屼互涓嬪懡浠わ細(xì)
cd soft1
錛? /configure 錛冮厤緗純
make 錛冭皟鐢╩ake錛?br />make install 錛冨畨瑁呮簮浠g爜錛?/ccid>
鍒犻櫎瀹夎鏃朵駭鐢熺殑涓存椂鏂囦歡錛?br />錛僲ake clean
鍗歌澆杞歡錛?br />錛僲ake uninstall
鏈変簺杞歡鍖呯殑婧愪唬鐮佺紪璇戝畨瑁呭悗鍙互鐢╩ake uninstall鍛戒護(hù)鍗歌澆銆傚鏋滀笉鎻愪緵姝ゅ姛鑳斤紝鍒欒蔣浠剁殑鍗歌澆蹇呴』鎵嬪姩鍒犻櫎銆傜敱浜庤蔣浠跺彲鑳藉皢鏂囦歡鍒嗘暎鍦板畨瑁呭湪緋葷粺鐨勫涓洰褰曚腑錛屽線寰寰堥毦鎶婂畠鍒犻櫎騫插噣錛屽簲璇ュ湪緙栬瘧鍓嶈繘琛岄厤緗?
.bin鏂囦歡瀹夎
鎵╁睍鍚嶄負(fù).bin鏂囦歡鏄簩榪涘埗鐨勶紝瀹冧篃鏄簮紼嬪簭緇忕紪璇戝悗寰楀埌鐨勬満鍣ㄨ璦銆傛湁涓浜涜蔣浠跺彲浠ュ彂甯冧負(fù)浠?bin涓哄悗緙鐨勫畨瑁呭寘錛屼緥濡傦紝嫻佸獟浣撴挱鏀懼櫒 RealONE銆傚鏋滃畨瑁呰繃RealONE鐨刉indows鐗堢殑璇濓紝閭d箞瀹夎RealONE for Linux鐗堟湰(鏂囦歡鍚嶏細(xì)r1p1_linux22_libc6_i386_a1.bin)灝遍潪甯哥畝鍗曚簡錛?br />錛僣hmod +x r1p1_linux22_libc6_i386_a1.bin
./ r1p1_linux22_libc6_i386_a1.bin
鎺ヤ笅鏉ラ夋嫨瀹夎鏂瑰紡錛屾湁鏅氬畨瑁呭拰楂樼駭瀹夎涓ょ銆傚鏋滀笉鎯蟲敼鍔ㄥ畨瑁呯洰褰曪紝灝卞彲閫夋嫨鏅氬畨瑁咃紝鏁翠釜瀹夎榪囩▼鍑犱箮鍜屽湪Windwos涓嬩竴鏍楓?
.bin鏂囦歡鐨勫嵏杞斤紝浠ealONE for Linux涓轟緥錛屽鏋滈噰鐢ㄦ櫘閫氬畨瑁呮柟寮忕殑璇濓紝鍦ㄧ敤鎴蜂富鐩綍涓嬩細(xì)鏈塕eal鍜孯ealplayer9涓や釜鏂囦歡澶癸紝鎶婂畠浠垹闄ゅ嵆鍙?
Linux緇胯壊杞歡
Linux 涔熸湁涓浜涚豢鑹茶蔣浠訛紝涓嶈繃涓嶆槸寰堝銆侺inux緋葷粺鎻愪緵涓縐嶆満鍒訛細(xì)鑷姩鍝嶅簲杞歡榪愯榪涚▼鐨勮姹?涓哄畠璁懼畾濂藉彲浠ラ┈涓婅繍琛岀殑鐜銆傝繖縐嶆満鍒跺彲浠ユ槸涓縐嶆帴鍙o紝鎴栬呮槸涓棿浠躲傜▼搴忓憳緙栧啓鐨勭▼搴忓彲浠ョ洿鎺ユ嫹璐濆垎鍙戯紝涓嶇敤瀹夎錛屽彧瑕佺偣鍑葷▼搴忕殑鍥炬爣錛岃闂搷浣滅郴緇熸彁渚涚殑鎺ュ彛錛岃瀹氬ソ灝卞彲浠ュ伐浣溿傝嫢瑕佸垹闄よ蔣浠訛紝鐩存帴鍒犻櫎灝卞彲浠?涓嶇敤閾炬帴鏂囦歡銆傝繖鏄渶綆鍗曠殑杞歡瀹夎銆佸嵏杞芥柟寮忋?
涓婇潰浠嬬粛浜哃inux杞歡瀹夎鐨勬柟娉曪紝瀵逛簬Linux鍒濆鑰呮潵璇達(dá)紝RPM瀹夎鏄竴涓笉閿欑殑閫夋嫨銆傚鏋滄兂鐪熸鎺屾彙Linux緋葷粺錛屾簮浠g爜瀹夎浠嶇劧鏄疞inux涓嬭蔣浠跺畨瑁呯殑閲嶈鎵嬫
]]>
2.1 鍩烘湰 makefile 緇撴瀯
GNU Make 鐨勪富瑕佸伐浣滄槸璇昏繘涓涓枃鏈枃浠訛紝 makefile 銆傝繖涓枃 浠墮噷涓昏鏄湁鍏沖摢浜涙枃浠訛紙鈥榯arget鈥欑洰鐨勬枃浠訛級鏄粠鍝簺鍒殑 鏂囦歡錛堚榙ependencies鈥欎緷闈犳枃浠訛級涓駭鐢熺殑錛岀敤浠涔堝懡浠ゆ潵榪涜 榪欎釜浜х敓榪囩▼銆傛湁浜嗚繖浜涗俊鎭紝 make 浼?xì)妫鏌ョ紕熶笂鐨勬枃浠訛紝濡傛灉 鐩殑鏂囦歡鐨勬椂闂存埑錛堣鏂囦歡鐢熸垚鎴栬鏀瑰姩鏃剁殑鏃墮棿錛夋瘮鑷沖皯瀹冪殑涓 涓緷闈犳枃浠舵棫鐨勮瘽錛?make 灝辨墽琛岀浉搴旂殑鍛戒護(hù)錛屼互渚挎洿鏂扮洰鐨勬枃浠躲?錛堢洰鐨勬枃浠朵笉涓瀹氭槸鏈鍚庣殑鍙墽琛屾。錛屽畠鍙互鏄換浣曚竴涓枃浠躲傦級
makefile 涓鑸鍙仛鈥渕akefile鈥濇垨鈥淢akefile鈥濄傚綋鐒朵綘鍙互 鍦?make 鐨勫懡浠よ鎸囧畾鍒殑鏂囦歡鍚嶃傚鏋滀綘涓嶇壒鍒寚瀹氾紝瀹冧細(xì)瀵?鎵鋸渕akefile鈥濇垨鈥淢akefile鈥濓紝鍥犳浣跨敤榪欎袱涓悕瀛楁槸鏈綆鍗?鐨勩?
涓涓?makefile 涓昏鍚湁涓緋誨垪鐨勮鍒欙紝濡備笅錛?
: ...
(tab)
(tab)
.
.
.
渚嬪錛岃冭檻浠ヤ笅鐨?makefile 錛?
=== makefile 寮濮?===
myprog : foo.o bar.o
gcc foo.o bar.o -o myprog
foo.o : foo.c foo.h bar.h
gcc -c foo.c -o foo.o
bar.o : bar.c bar.h
gcc -c bar.c -o bar.o
=== makefile 緇撴潫 ===
榪欐槸涓涓潪甯稿熀鏈殑 makefile 鈥斺?make 浠庢渶涓婇潰寮濮嬶紝鎶婁笂 闈㈢涓涓洰鐨勶紝鈥榤yprog鈥欙紝鍋氫負(fù)瀹冪殑涓昏鐩爣錛堜竴涓畠闇瑕佷繚 璇佸叾鎬繪槸鏈鏂扮殑鏈緇堢洰鏍囷級銆傜粰鍑虹殑瑙勫垯璇存槑鍙鏂囦歡鈥榤yprog鈥?姣旀枃浠垛榝oo.o鈥欐垨鈥榖ar.o鈥欎腑鐨勪換浣曚竴涓棫錛屼笅涓琛岀殑鍛戒護(hù)灝?浼?xì)琚墽琛屻?
浣嗘槸錛屽湪媯鏌ユ枃浠?foo.o 鍜?bar.o 鐨勬椂闂存埑涔嬪墠錛屽畠浼?xì)寰涓嬫煡 鎵鵑偅浜涙妸 foo.o 鎴?bar.o 鍋氫負(fù)鐩爣鏂囦歡鐨勮鍒欍傚畠鎵懼埌鐨勫叧浜?foo.o 鐨勮鍒欙紝璇ユ枃浠剁殑渚濋潬鏂囦歡鏄?foo.c, foo.h 鍜?bar.h 銆?瀹冧粠涓嬮潰鍐嶆壘涓嶅埌鐢熸垚榪欎簺渚濋潬鏂囦歡鐨勮鍒欙紝瀹冨氨寮濮嬫鏌ョ紕?涓婅繖浜涗緷闈犳枃浠剁殑鏃墮棿鎴熾傚鏋滆繖浜涙枃浠朵腑浠諱綍涓涓殑鏃墮棿鎴蟲瘮 foo.o 鐨勬柊錛屽懡浠?'gcc -o foo.o foo.c' 灝嗕細(xì)鎵ц錛屼粠鑰屾洿鏂?鏂囦歡 foo.o 銆?
鎺ヤ笅鏉ュ鏂囦歡 bar.o 鍋氱被浼肩殑媯鏌ワ紝渚濋潬鏂囦歡鍦ㄨ繖閲屾槸鏂囦歡 bar.c 鍜?bar.h 銆?
鐜板湪錛?make 鍥炲埌鈥榤yprog鈥欑殑瑙勫垯銆傚鏋滃垰鎵嶄袱涓鍒欎腑鐨勪換 浣曚竴涓鎵ц錛宮yprog 灝遍渶瑕侀噸寤猴紙鍥犱負(fù)鍏朵腑涓涓?.o 妗e氨浼?xì)姣?鈥榤yprog鈥欐柊錛夛紝鍥犳榪炴帴鍛戒護(hù)灝嗚鎵ц銆?
甯屾湜鍒版錛屼綘鍙互鐪嬪嚭浣跨敤 make 宸ュ叿鏉ュ緩绔嬬▼搴忕殑濂藉鈥斺斿墠 涓绔犱腑鎵鏈夌箒鐞愮殑媯鏌ユ楠ら兘鐢?make 鏇夸綘鍋氫簡錛氭鏌ユ椂闂存埑銆?浣犵殑婧愮爜鏂囦歡閲屼竴涓畝鍗曟敼鍙橀兘浼?xì)閫犳垚閭d釜鏂囦歡琚噸鏂扮紪璇戯紙鍥?涓?.o 鏂囦歡渚濋潬 .c 鏂囦歡錛夛紝榪涜屽彲鎵ц鏂囦歡琚噸鏂拌繛鎺ワ紙鍥犱負(fù) .o 鏂囦歡琚敼鍙樹簡錛夈傚叾瀹炵湡姝g殑寰楃泭鏄湪褰撲綘鏀瑰彉涓涓?header 妗g殑鏃跺欌斺斾綘涓嶅啀闇瑕佽浣忛偅涓簮鐮佹枃浠朵緷闈犲畠錛屽洜涓烘墍鏈夌殑 璧勬枡閮藉湪 makefile 閲屻?make 浼?xì)寰堣嚼L澗鐨勬浛浣犻噸鏂扮紪璇戞墍鏈夐偅 浜涘洜渚濋潬榪欎釜 header 鏂囦歡鑰屾敼鍙樹簡鐨勬簮鐮佹枃浠訛紝濡傛湁闇瑕侊紝鍐?榪涜閲嶆柊榪炴帴銆?
褰撶劧錛屼綘瑕佺‘瀹氫綘鍦?makefile 涓墍鍐欑殑瑙勫垯鏄紜棤璇殑錛屽彧 鍒楀嚭閭d簺鍦ㄦ簮鐮佹枃浠朵腑琚?#include 鐨?header 妗b︹?
2.2 緙栧啓 make 瑙勫垯 (Rules)
鏈鏄庢樉鐨勶紙涔熸槸鏈綆鍗曠殑錛夌紪鍐欒鍒欑殑鏂規(guī)硶鏄竴涓竴涓殑鏌?鐪嬫簮鐮佹枃浠訛紝鎶婂畠浠殑鐩爣鏂囦歡鍋氫負(fù)鐩殑錛岃岋跡婧愮爜鏂囦歡鍜岃瀹?#include 鐨?header 妗e仛涓轟緷闈犳枃浠躲備絾鏄綘涔熻鎶婂叾瀹冭榪欎簺 header 妗?#include 鐨?header 妗d篃鍒椾負(fù)渚濋潬鏂囦歡錛岃繕鏈夐偅浜涜 鍖呮嫭鐨勬枃浠舵墍鍖呮嫭鐨勬枃浠垛︹︾劧鍚庝綘浼?xì)鍙戠幇瑕佸瓒婃潵瓒婂鐨勬枃錃g 榪涜綆$悊錛岀劧鍚庝綘鐨勫ご鍙戝紑濮嬭劚钀斤紝浣犵殑鑴炬皵寮濮嬪彉鍧忥紝浣犵殑鑴?鑹插彉鎴愯彍鑹詫紝浣犺蛋鍦ㄨ礬涓婂紑濮嬭窡鐢電嚎鏉嗗瓙紕版挒錛岀粓浜庝綘鎹f瘉浣犵殑 鐢?shù)鑴戞槃·哄櫒锛屽仠姝⒕~栫▼銆傚埌浣庢湁娌℃湁浜涘鏄撶偣鍎跨殑鏂規(guī)硶鍛紵
褰撶劧鏈夛紒鍚戠紪璇戝櫒瑕侊紒鍦ㄧ紪璇戞瘡涓涓簮鐮佹枃浠剁殑鏃跺欙紝瀹冨疄鍦ㄥ簲 璇ョ煡閬撳簲璇ュ寘鎷粈涔堟牱鐨?header 妗c備嬌鐢?gcc 鐨勬椂鍊欙紝鐢?-M 寮鍏籌紝瀹冧細(xì)涓烘瘡涓涓綘緇欏畠鐨勶跡鏂囦歡杈撳嚭涓涓鍒欙紝鎶婄洰鏍囨枃浠?鍋氫負(fù)鐩殑錛岃岃繖涓跡鏂囦歡鍜屾墍鏈夊簲璇ヨ #include 鐨?header 鏂?浠跺皢鍋氫負(fù)渚濋潬鏂囦歡銆傛敞鎰忚繖涓鍒欎細(xì)鍔犲叆鎵鏈?header 鏂囦歡錛屽寘 鎷瑙掓嫭鍙?`<', `>')鍜屽弻寮曞彿(`"')鎵鍖呭洿鐨勬枃浠躲傚叾瀹炴垜浠彲浠?鐩稿綋鑲畾緋葷粺 header 妗o紙姣斿 stdio.h, stdlib.h 絳夌瓑錛変笉浼?琚垜浠洿鏀癸紝濡傛灉浣犵敤 -MM 鏉ヤ唬鏇?-M 浼犻掔粰 gcc錛岄偅浜涚敤瑙掓嫭 鍙峰寘鍥寸殑 header 妗e皢涓嶄細(xì)琚寘鎷傦紙榪欎細(xì)鑺傜渷涓浜涚紪璇戞椂闂達(dá)級
鐢?gcc 杈撳嚭鐨勮鍒欎笉浼?xì)鍚湁鍛戒护閮ㄥ垎锛涗綘鍙互鑷繁鍐欏叆浣犵殑鍛戒?鎴栬呬粈涔堜篃涓嶅啓錛岃岃 make 浣跨敤瀹冪殑闅愬惈鐨勮鍒欙紙鍙傝冧笅闈㈢殑 2.4 鑺傦級銆?
2.3 Makefile 鍙橀噺
涓婇潰鎻愬埌 makefiles 閲屼富瑕佸寘鍚竴浜涜鍒欍傚畠浠寘鍚殑鍏跺畠鐨勪笢 瑗挎槸鍙橀噺瀹氫箟銆?
makefile 閲岀殑鍙橀噺灝卞儚涓涓幆澧冨彉閲?environment variable)銆?浜嬪疄涓婏紝鐜鍙橀噺鍦?make 榪囩▼涓瑙i噴鎴?make 鐨勫彉閲忋傝繖浜?鍙橀噺鏄ぇ灝忓啓鏁忔劅鐨勶紝涓鑸嬌鐢ㄥぇ鍐欏瓧姣嶃傚畠浠彲浠ヤ粠鍑犱箮浠諱綍 鍦版柟琚紩鐢紝涔熷彲浠ヨ鐢ㄦ潵鍋氬緢澶氫簨鎯咃紝姣斿錛?
i) 璐瓨涓涓枃浠跺悕鍒楄〃銆傚湪涓婇潰鐨勪緥瀛愰噷錛岀敓鎴愬彲鎵ц鏂囦歡鐨?瑙勫垯鍖呭惈涓浜涚洰鏍囨枃浠跺悕鍋氫負(fù)渚濋潬銆傚湪榪欎釜瑙勫垯鐨勫懡浠よ 閲屽悓鏍風(fēng)殑閭d簺鏂囦歡琚緭閫佺粰 gcc 鍋氫負(fù)鍛戒護(hù)鍙傛暟銆傚鏋滃湪榪?閲屼嬌鐢ㄤ竴涓彉鏁版潵璐瓨鎵鏈夌殑鐩爣鏂囦歡鍚嶏紝鍔犲叆鏂扮殑鐩爣 鏂囦歡浼?xì)鍙樼殑绠鍗曡屼笖杈冧笉鏄撳嚭閿欍?
ii) 璐瓨鍙墽琛屾枃浠跺悕銆傚鏋滀綘鐨勯」鐩鐢ㄥ湪涓涓潪 gcc 鐨勭郴 緇熼噷錛屾垨鑰呭鏋滀綘鎯充嬌鐢ㄤ竴涓笉鍚岀殑緙栬瘧鍣紝浣犲繀欏誨皢鎵 鏈変嬌鐢ㄧ紪璇戝櫒鐨勫湴鏂規(guī)敼鎴愮敤鏂扮殑緙栬瘧鍣ㄥ悕銆備絾鏄鏋滀嬌鐢ㄤ竴 涓彉閲忔潵浠f浛緙栬瘧鍣ㄥ悕錛岄偅涔堜綘鍙渶瑕佹敼鍙樹竴涓湴鏂癸紝鍏?瀹冩墍鏈夊湴鏂圭殑鍛戒護(hù)鍚嶅氨閮芥敼鍙樹簡銆?
iii) 璐瓨緙栬瘧鍣ㄦ棗鏍囥傚亣璁句綘鎯崇粰浣犳墍鏈夌殑緙栬瘧鍛戒護(hù)浼犻掍竴緇?鐩稿悓鐨勯夐」錛堜緥濡?-Wall -O -g錛夛紱濡傛灉浣犳妸榪欑粍閫夐」瀛?鍏ヤ竴涓彉閲忥紝閭d箞浣犲彲浠ユ妸榪欎釜鍙橀噺鏀懼湪鎵鏈夊懠鍙紪璇戝櫒 鐨勫湴鏂廣傝屽綋浣犺鏀瑰彉閫夐」鐨勬椂鍊欙紝浣犲彧闇鍦ㄤ竴涓湴鏂規(guī)敼 鍙樿繖涓彉閲忕殑鍐呭銆?
瑕佽瀹氫竴涓彉閲忥紝浣犲彧瑕佸湪涓琛岀殑寮濮嬪啓涓嬭繖涓彉閲忕殑鍚嶅瓧錛屽悗 闈㈣窡涓涓?= 鍙鳳紝鍚庨潰璺熶綘瑕佽瀹氱殑榪欎釜鍙橀噺鐨勫箋備互鍚庝綘瑕佸紩鐢?榪欎釜鍙橀噺錛屽啓涓涓?$ 絎﹀彿錛屽悗闈㈡槸鍥村湪鎷彿閲岀殑鍙橀噺鍚嶃傛瘮濡傚湪 涓嬮潰錛屾垜浠妸鍓嶉潰鐨?makefile 鍒╃敤鍙橀噺閲嶅啓涓閬嶏細(xì)
=== makefile 寮濮?===
OBJS = foo.o bar.o
CC = gcc
CFLAGS = -Wall -O -g
myprog : $(OBJS)
$(CC) $(OBJS) -o myprog
foo.o : foo.c foo.h bar.h
$(CC) $(CFLAGS) -c foo.c -o foo.o
bar.o : bar.c bar.h
$(CC) $(CFLAGS) -c bar.c -o bar.o
=== makefile 緇撴潫 ===
榪樻湁涓浜涜瀹氬ソ鐨勫唴閮ㄥ彉閲忥紝瀹冧滑鏍規(guī)嵁姣忎竴涓鍒欏唴瀹瑰畾涔夈備笁涓?姣旇緝鏈夌敤鐨勫彉閲忔槸 $@, $<鍜?$^ 錛堣繖浜涘彉閲忎笉闇瑕佹嫭鍙鋒嫭浣忥級銆?$@ 鎵╁睍鎴愬綋鍓嶈鍒欑殑鐩殑鏂囦歡鍚嶏紝 $< 鎵╁睍鎴愪緷闈犲垪琛ㄤ腑鐨勭 涓涓緷闈犳枃浠訛紝鑰?$^ 鎵╁睍鎴愭暣涓緷闈犵殑鍒楄〃錛堥櫎鎺変簡閲岄潰鎵鏈夐噸 澶嶇殑鏂囦歡鍚嶏級銆傚埄鐢ㄨ繖浜涘彉閲忥紝鎴戜滑鍙互鎶婁笂闈㈢殑 makefile 鍐欐垚錛?
=== makefile 寮濮?===
OBJS = foo.o bar.o
CC = gcc
CFLAGS = -Wall -O -g
myprog : $(OBJS)
$(CC) $^ -o $@
foo.o : foo.c foo.h bar.h
$(CC) $(CFLAGS) -c $<-o $@
bar.o : bar.c bar.h
$(CC) $(CFLAGS) -c $<-o $@
=== makefile 緇撴潫 ===
浣犲彲浠ョ敤鍙橀噺鍋氳澶氬叾瀹冪殑浜嬫儏錛岀壒鍒槸褰撲綘鎶婂畠浠拰鍑芥暟娣峰悎 浣跨敤鐨勬椂鍊欍傚鏋滈渶瑕佹洿榪涗竴姝ョ殑浜嗚В錛岃鍙傝?GNU Make 鎵嬪唽銆?('man make', 'man makefile')
2.4 闅愬惈瑙勫垯 (Implicit Rules)
璇鋒敞鎰忥紝鍦ㄤ笂闈㈢殑渚嬪瓙閲岋紝鍑犱釜浜х敓 .o 鏂囦歡鐨勫懡浠ら兘鏄竴鏍風(fēng)殑銆?閮芥槸浠?.c 鏂囦歡鍜岀浉鍏蟲枃浠墮噷浜х敓 .o 鏂囦歡錛岃繖鏄竴涓爣鍑嗙殑姝?楠ゃ傚叾瀹?make 宸茬粡鐭ラ亾鎬庝箞鍋氣斺斿畠鏈変竴浜涘彨鍋氶殣鍚鍒欑殑鍐?緗殑瑙勫垯錛岃繖浜涜鍒欏憡璇夊畠褰撲綘娌℃湁緇欏嚭鏌愪簺鍛戒護(hù)鐨勬椂鍊欙紝搴旇 鎬庝箞鍔炪?
濡傛灉浣犳妸鐢熸垚 foo.o 鍜?bar.o 鐨勫懡浠や粠瀹冧滑鐨勮鍒欎腑鍒犻櫎錛?make 灝嗕細(xì)鏌ユ壘瀹冪殑闅愬惈瑙勫垯錛岀劧鍚庝細(xì)鎵懼埌涓涓傚綋鐨勫懡浠ゃ傚畠鐨勫懡浠や細(xì) 浣跨敤涓浜涘彉閲忥紝鍥犳浣犲彲浠ユ寜鐓т綘鐨勬兂娉曟潵璁懼畾瀹冿細(xì)瀹冧嬌鐢ㄥ彉閲?CC 鍋氫負(fù)緙栬瘧鍣紙璞℃垜浠湪鍓嶉潰鐨勪緥瀛愶級錛屽茍涓斾紶閫掑彉閲?CFLAGS 錛堢粰 C 緙栬瘧鍣紝C++ 緙栬瘧鍣ㄧ敤 CXXFLAGS 錛夛紝CPPFLAGS 錛?C 棰?澶勭悊鍣ㄦ棗鏍囷級錛?TARGET_ARCH 錛堢幇鍦ㄤ笉鐢ㄨ冭檻榪欎釜錛夛紝鐒跺悗瀹冨姞 鍏ユ棗鏍?'-c' 錛屽悗闈㈣窡鍙橀噺 $<錛堢涓涓緷闈犲悕錛夛紝鐒跺悗鏄棗 鏍?'-o' 璺熷彉閲?$@ 錛堢洰鐨勬枃浠跺悕錛夈備竴涓跡緙栬瘧鐨勫叿浣撳懡浠ゅ皢 浼?xì)鏄Q?
$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $<-o $@
褰撶劧浣犲彲浠ユ寜鐓т綘鑷繁鐨勯渶瑕佹潵瀹氫箟榪欎簺鍙橀噺銆傝繖灝辨槸涓轟粈涔堢敤 gcc 鐨?-M 鎴?-MM 寮鍏寵緭鍑虹殑鐮佸彲浠ョ洿鎺ョ敤鍦ㄤ竴涓?makefile 閲屻?
2.5 鍋囪薄鐩殑 (Phony Targets)
鍋囪浣犵殑涓涓」鐩渶鍚庨渶瑕佷駭鐢熶袱涓彲鎵ц鏂囦歡銆備綘鐨勪富瑕佺洰鏍?鏄駭鐢熶袱涓彲鎵ц鏂囦歡錛屼絾榪欎袱涓枃浠舵槸鐩鎬簰鐙珛鐨勨斺斿鏋滀竴 涓枃浠墮渶瑕侀噸寤猴紝騫朵笉褰卞搷鍙︿竴涓備綘鍙互浣跨敤鈥滃亣璞$洰鐨勨濇潵 杈懼埌榪欑鏁堟灉銆備竴涓亣璞$洰鐨勮窡涓涓甯哥殑鐩殑鍑犱箮鏄竴鏍風(fēng)殑錛?鍙槸榪欎釜鐩殑鏂囦歡鏄笉瀛樺湪鐨勩傚洜姝わ紝 make 鎬繪槸浼?xì)鍋囪畱之冮渶瑕?琚敓鎴愶紝褰撴妸瀹冪殑渚濊禆鏂囦歡鏇存柊鍚庯紝灝變細(xì)鎵ц瀹冪殑瑙勫垯閲岀殑鍛戒護(hù) 琛屻?
濡傛灉鍦ㄦ垜浠殑 makefile 寮濮嬪杈撳叆錛?
all : exec1 exec2
鍏朵腑 exec1 鍜?exec2 鏄垜浠仛涓虹洰鐨勭殑涓や釜鍙墽琛屾枃浠躲?make 鎶婅繖涓?'all' 鍋氫負(fù)瀹冪殑涓昏鐩殑錛屾瘡嬈℃墽琛屾椂閮戒細(xì)灝濊瘯鎶?'all' 鏇存柊銆備絾鏃㈢劧榪欒瑙勫垯閲屾病鏈夊摢涓懡浠ゆ潵浣滅敤鍦ㄤ竴涓彨 'all' 鐨?瀹為檯鏂囦歡錛堜簨瀹炰笂 all 騫朵笉浼?xì)鍦倎纰熶笂瀹為檯漶旂敓锛夊Q屾墍浠ヨ繖涓 鍒欏茍涓嶇湡鐨勬敼鍙?'all' 鐨勭姸鎬併傚彲鏃㈢劧榪欎釜鏂囦歡騫朵笉瀛樺湪錛屾墍浠?make 浼?xì)灏濊瘯鏇存?all 瑙勫垯錛屽洜姝ゅ氨媯鏌ュ畠鐨勪緷闈?exec1, exec2 鏄惁闇瑕佹洿鏂幫紝濡傛灉闇瑕侊紝灝辨妸瀹冧滑鏇存柊錛屼粠鑰岃揪鍒版垜浠殑鐩殑銆?
鍋囪薄鐩殑涔熷彲浠ョ敤鏉ユ弿榪頒竴緇勯潪棰勮鐨勫姩浣溿備緥濡傦紝浣犳兂鎶婃墍鏈夌敱 make 浜х敓鐨勬枃浠跺垹闄わ紝浣犲彲浠ュ湪 makefile 閲岃绔嬭繖鏍蜂竴涓鍒欙細(xì)
veryclean :
rm *.o
rm myprog
鍓嶆彁鏄病鏈夊叾瀹冪殑瑙勫垯渚濋潬榪欎釜 'veryclean' 鐩殑錛屽畠?yōu)畣姘笜q?涓嶄細(xì)琚墽琛屻備絾鏄紝濡傛灉浣犳槑紜殑浣跨敤鍛戒護(hù) 'make veryclean' 錛?make 浼?xì)鎶姌q欎釜鐩殑鍋氫負(fù)瀹冪殑涓昏鐩爣錛屾墽琛岄偅浜?rm 鍛戒護(hù)銆?
濡傛灉浣犵殑紓佺涓婂瓨鍦ㄤ竴涓彨 veryclean 鏂囦歡錛屼細(xì)鍙戠敓浠涔堜簨錛熻繖 鏃跺洜涓哄湪榪欎釜瑙勫垯閲屾病鏈変換浣曚緷闈犳枃浠訛紝鎵浠ヨ繖涓洰鐨勬枃浠朵竴瀹氭槸 鏈鏂扮殑浜嗭紙鎵鏈夌殑渚濋潬鏂囦歡閮藉凡緇忔槸鏈鏂扮殑浜嗭級錛屾墍浠ユ棦浣跨敤鎴鋒槑 紜懡浠?make 閲嶆柊浜х敓瀹冿紝涔熶笉浼?xì)鏈変恢M綍浜嬫儏鍙戠敓銆傝В鍐蟲柟娉曟槸鏍?鏄庢墍鏈夌殑鍋囪薄鐩殑錛堢敤 .PHONY錛夛紝榪欏氨鍛婅瘔 make 涓嶇敤媯鏌ュ畠浠?鏄惁瀛樺湪浜庣紕熶笂錛屼篃涓嶇敤鏌ユ壘浠諱綍闅愬惈瑙勫垯錛岀洿鎺ュ亣璁炬寚瀹氱殑鐩?鐨勯渶瑕佽鏇存柊銆傚湪 makefile 閲屽姞鍏ヤ笅闈㈣繖琛屽寘鍚笂闈㈣鍒欑殑瑙勫垯錛?
.PHONY : veryclean
灝卞彲浠ヤ簡銆傛敞鎰忥紝榪欐槸涓涓壒孌婄殑 make 瑙勫垯錛宮ake 鐭ラ亾 .PHONY 鏄竴涓壒孌婄洰鐨勶紝褰撶劧浣犲彲浠ュ湪瀹冪殑渚濋潬閲屽姞鍏ヤ綘鎯崇敤鐨勪換浣曞亣璞?鐩殑錛岃?make 鐭ラ亾瀹冧滑閮芥槸鍋囪薄鐩殑銆?
2.6 鍑芥暟 (Functions)
makefile 閲岀殑鍑芥暟璺熷畠鐨勫彉閲忓緢鐩鎬技鈥斺斾嬌鐢ㄧ殑鏃跺欙紝浣犵敤涓涓?$ 絎﹀彿璺熷紑鎷彿錛屽嚱鏁板悕錛岀┖鏍煎悗璺熶竴鍒楃敱閫楀彿鍒嗛殧鐨勫弬鏁幫紝鏈鍚?鐢ㄥ叧鎷彿緇撴潫銆備緥濡傦紝鍦?GNU Make 閲屾湁涓涓彨 'wildcard' 鐨勫嚱 鏁幫紝瀹冩湁涓涓弬鏁幫紝鍔熻兘鏄睍寮鎴愪竴鍒楁墍鏈夌鍚堢敱鍏跺弬鏁版弿榪扮殑鏂?浠跺悕錛屾枃浠墮棿浠ョ┖鏍奸棿闅斻備綘鍙互鍍忎笅闈㈡墍紺轟嬌鐢ㄨ繖涓懡浠わ細(xì)
SOURCES = $(wildcard *.c)
榪欒浼?xì)漶旂敓涓涓墍鏈変互 '.c' 緇撳熬鐨勬枃浠剁殑鍒楄〃錛岀劧鍚庡瓨鍏ュ彉閲?SOURCES 閲屻傚綋鐒朵綘涓嶉渶瑕佷竴瀹氳鎶婄粨鏋滃瓨鍏ヤ竴涓彉閲忋?
鍙︿竴涓湁鐢ㄧ殑鍑芥暟鏄?patsubst 錛?patten substitude, 鍖歸厤鏇?鎹㈢殑緙╁啓錛夊嚱鏁般傚畠闇瑕侊紦涓弬鏁扳斺旂涓涓槸涓涓渶瑕佸尮閰嶇殑寮忔牱錛岀浜屼釜琛ㄧず鐢ㄤ粈涔堟潵鏇挎崲瀹冿紝絎笁涓槸涓涓渶瑕佽澶勭悊鐨?鐢辯┖鏍煎垎闅旂殑瀛楀垪銆備緥濡傦紝澶勭悊閭d釜緇忚繃涓婇潰瀹氫箟鍚庣殑鍙橀噺錛?
OBJS = $(patsubst %.c,%.o,$(SOURCES))
榪欒灝嗗鐞嗘墍鏈夊湪 SOURCES 瀛楀垪涓殑瀛楋紙涓鍒楁枃浠跺悕錛夛紝濡傛灉瀹冪殑 緇撳熬鏄?'.c' 錛屽氨鐢?'.o' 鎶?'.c' 鍙栦唬銆傛敞鎰忚繖閲岀殑 % 絎﹀彿灝嗗尮 閰嶄竴涓垨澶氫釜瀛楃錛岃屽畠姣忔鎵鍖歸厤鐨勫瓧涓插彨鍋氫竴涓樻焺鈥?stem) 銆?鍦ㄧ浜屼釜鍙傛暟閲岋紝 % 琚В璇繪垚鐢ㄧ涓鍙傛暟鎵鍖歸厤鐨勯偅涓焺銆?
2.7 涓涓瘮杈冩湁鏁堢殑 makefile
鍒╃敤鎴戜滑鐜板湪鎵瀛︾殑錛屾垜浠彲浠ュ緩绔嬩竴涓浉褰撴湁鏁堢殑 makefile 銆?榪欎釜 makefile 鍙互瀹屾垚澶ч儴鍒嗘垜浠渶瑕佺殑渚濋潬媯鏌ワ紝涓嶇敤鍋氬お澶?鐨勬敼鍙樺氨鍙洿鎺ョ敤鍦ㄥぇ澶氭暟鐨勯」鐩噷銆?
棣栧厛鎴戜滑闇瑕佷竴涓熀鏈殑 makefile 鏉ュ緩鎴戜滑鐨勭▼搴忋傛垜浠彲浠ヨ 瀹冩悳绱㈠綋鍓嶇洰褰曪紝鎵懼埌婧愮爜鏂囦歡錛屽茍涓斿亣璁懼畠浠兘鏄睘浜庢垜浠殑欏?鐩殑錛屾斁榪涗竴涓彨 SOURCES 鐨勫彉閲忋傝繖閲屽鏋滀篃鍖呭惈鎵鏈夌殑 *.cc 鏂囦歡錛屼篃璁鎬細(xì)鏇翠繚闄╋紝鍥犱負(fù)婧愮爜鏂囦歡鍙兘鏄?C++ 鐮佺殑銆?
SOURCES = $(wildcard *.c *.cc)
鍒╃敤 patsubst 錛屾垜浠彲浠ョ敱婧愮爜鏂囦歡鍚嶄駭鐢熺洰鏍囨枃浠跺悕錛屾垜浠渶 瑕佺紪璇戝嚭榪欎簺鐩爣鏂囦歡銆傚鏋滄垜浠殑婧愮爜鏂囦歡鏃㈡湁 .c 鏂囦歡錛屼篃鏈?.cc 鏂囦歡錛屾垜浠渶瑕佷嬌鐢ㄧ浉宓岀殑 patsubst 鍑芥暟鍛煎彨錛?
OBJS = $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCES)))
鏈閲岄潰涓灞?patsubst 鐨勫懠鍙細(xì)瀵?.cc 鏂囦歡榪涜鍚庣紑鏇夸唬錛屼駭鐢熺殑緇?鏋滆澶栧眰鐨?patsubst 鍛煎彨澶勭悊錛岃繘琛屽 .c 鏂囦歡鍚庣紑鐨勬浛浠c?
鐜板湪鎴戜滑鍙互璁劇珛涓涓鍒欐潵寤哄彲鎵ц鏂囦歡錛?
myprog : $(OBJS)
gcc -o myprog $(OBJS)
榪涗竴姝ョ殑瑙勫垯涓嶄竴瀹氶渶瑕侊紝 gcc 宸茬粡鐭ラ亾鎬庝箞鍘葷敓鎴愮洰鏍囨枃浠?(object files) 銆備笅闈㈡垜浠彲浠ヨ瀹氫駭鐢熶緷闈犱俊鎭殑瑙勫垯錛?
depends : $(SOURCES)
gcc -M $(SOURCES) > depends
鍦ㄨ繖閲屽鏋滀竴涓彨 'depends' 鐨勬枃浠朵笉瀛樺湪錛屾垨浠諱綍涓涓簮鐮佹枃浠?姣斾竴涓凡瀛樺湪鐨?depends 鏂囦歡鏂幫紝閭d箞涓涓?depends 鏂囦歡浼?xì)琚?鎴愩俤epends 鏂囦歡灝嗕細(xì)鍚湁鐢?gcc 浜х敓鐨勫叧浜庢簮鐮佹枃浠剁殑瑙勫垯錛堟敞 鎰?-M 寮鍏籌級銆傜幇鍦ㄦ垜浠璁?make 鎶婅繖浜涜鍒欏綋鍋?makefile 妗?鐨勪竴閮ㄥ垎銆傝繖閲屼嬌鐢ㄧ殑鎶宸у緢鍍?C 璇█涓殑 #include 緋葷粺鈥斺旀垜 浠姹?make 鎶婅繖涓枃浠?include 鍒?makefile 閲岋紝濡備笅錛?
include depends
GNU Make 鐪嬪埌榪欎釜錛屾鏌?'depends' 鐩殑鏄惁鏇存柊浜嗭紝濡傛灉娌℃湁錛?瀹冪敤鎴戜滑緇欏畠鐨勫懡浠ら噸鏂頒駭鐢?depends 妗c傜劧鍚庡畠浼?xì)鎶姌q欑粍錛堟柊錛?瑙勫垯鍖呭惈榪涙潵錛岀戶緇鐞嗘渶緇堢洰鏍?'myprog' 銆傚綋鐪嬪埌鏈夊叧 myprog 鐨勮鍒欙紝瀹冧細(xì)媯鏌ユ墍鏈夌殑鐩爣鏂囦歡鏄惁鏇存柊鈥斺斿埄鐢?depends 鏂囦歡 閲岀殑瑙勫垯錛屽綋鐒惰繖浜涜鍒欑幇鍦ㄥ凡緇忔槸鏇存柊榪囩殑浜嗐?
榪欎釜緋葷粺鍏跺疄鏁堢巼寰堜綆錛屽洜涓烘瘡褰撲竴涓簮鐮佹枃浠惰鏀瑰姩錛屾墍鏈夌殑婧愮爜 鏂囦歡閮借琚澶勭悊浠ヤ駭鐢熶竴涓柊鐨?'depends' 鏂囦歡銆傝屼笖瀹冧篃涓嶆槸 100% 鐨勫畨鍏紝榪欐槸鍥犱負(fù)褰撲竴涓?header 妗h鏀瑰姩錛屼緷闈犱俊鎭茍涓嶄細(xì) 琚洿鏂般備絾灝卞熀鏈伐浣滄潵璇達(dá)紝瀹冧篃綆楃浉褰撴湁鐢ㄧ殑浜嗐?
2.8 涓涓洿濂界殑 makefile
榪欐槸涓涓垜涓烘垜澶у鏁伴」鐩璁$殑 makefile 銆傚畠搴旇鍙互涓嶉渶瑕佷慨 鏀圭殑鐢ㄥ湪澶ч儴鍒嗛」鐩噷銆傛垜涓昏鎶婂畠鐢ㄥ湪 djgpp 涓婏紝閭f槸涓涓?DOS 鐗堢殑 gcc 緙栬瘧鍣ㄣ傚洜姝や綘鍙互鐪嬪埌鎵ц鐨勫懡浠ゅ悕銆?'alleg' 紼嬪簭鍖呫?鍜?RM -F 鍙橀噺閮藉弽鏄犱簡榪欎竴鐐廣?
=== makefile 寮濮?===
######################################
#
# Generic makefile
#
# by George Foot
# email: george.foot@merton.ox.ac.uk
#
# Copyright (c) 1997 George Foot
# All rights reserved.
# 淇濈暀鎵鏈夌増鏉?
#
# No warranty, no liability;
# you use this at your own risk.
# 娌′繚闄╋紝涓嶈礋璐?
# 浣犺鐢ㄨ繖涓紝浣犺嚜宸辨媴椋庨櫓
#
# You are free to modify and
# distribute this without giving
# credit to the original author.
# 浣犲彲浠ラ殢渚挎洿鏀瑰拰鏁e彂榪欎釜鏂囦歡
# 鑰屼笉闇瑕佺粰鍘熶綔鑰呬粈涔堣崳瑾夈?
# 錛堜綘濂芥剰鎬濓紵錛?
#
######################################
### Customising
# 鐢ㄦ埛璁懼畾
#
# Adjust the following if necessary; EXECUTABLE is the target
# executable's filename, and LIBS is a list of libraries to link in
# (e.g. alleg, stdcx, iostr, etc). You can override these on make's
# command line of course, if you prefer to do it that way.
#
# 濡傛灉闇瑕侊紝璋冩暣涓嬮潰鐨勪笢瑗褲?EXECUTABLE 鏄洰鏍囩殑鍙墽琛屾枃浠跺悕錛?LIBS
# 鏄竴涓渶瑕佽繛鎺ョ殑紼嬪簭鍖呭垪琛紙渚嬪 alleg, stdcx, iostr 絳夌瓑錛夈傚綋鐒朵綘
# 鍙互鍦?make 鐨勫懡浠よ瑕嗙洊瀹冧滑錛屼綘鎰挎剰灝辨病闂銆?
#
EXECUTABLE := mushroom.exe
LIBS := alleg
# Now alter any implicit rules' variables if you like, e.g.:
#
# 鐜板湪鏉ユ敼鍙樹換浣曚綘鎯蟲敼鍔ㄧ殑闅愬惈瑙勫垯涓殑鍙橀噺錛屼緥濡?
CFLAGS := -g -Wall -O3 -m486
CXXFLAGS := $(CFLAGS)
# The next bit checks to see whether rm is in your djgpp bin
# directory; if not it uses del instead, but this can cause (harmless)
# `File not found' error messages. If you are not using DOS at all,
# set the variable to something which will unquestioningly remove
# files.
#
# 涓嬮潰鍏堟鏌ヤ綘鐨?djgpp 鍛戒護(hù)鐩綍涓嬫湁娌℃湁 rm 鍛戒護(hù)錛屽鏋滄病鏈夛紝鎴戜滑浣跨敤
# del 鍛戒護(hù)鏉ヤ唬鏇匡紝浣嗘湁鍙兘緇欐垜浠?'File not found' 榪欎釜閿欒淇℃伅錛岃繖娌?
# 浠涔堝ぇ紕嶃傚鏋滀綘涓嶆槸鐢?DOS 錛屾妸瀹冭瀹氭垚涓涓垹鏂囦歡鑰屼笉搴熻瘽鐨勫懡浠ゃ?
# 錛堝叾瀹炶繖涓姝ュ湪 UNIX 綾葷殑緋葷粺涓婃槸澶氫綑鐨勶紝鍙槸鏂逛究 DOS 鐢ㄦ埛銆?UNIX
# 鐢ㄦ埛鍙互鍒犻櫎榪欙紩琛屽懡浠ゃ傦級
ifneq ($(wildcard $(DJDIR)/bin/rm.exe),)
RM-F := rm -f
else
RM-F := del
endif
# You shouldn't need to change anything below this point.
#
# 浠庤繖閲屽紑濮嬶紝浣犲簲璇ヤ笉闇瑕佹敼鍔ㄤ換浣曚笢瑗褲傦紙鎴戞槸涓嶅お鐩鎬俊錛屽お錛饑浜嗭紒錛?
SOURCE := $(wildcard *.c) $(wildcard *.cc)
OBJS := $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCE)))
DEPS := $(patsubst %.o,%.d,$(OBJS))
MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))
MISSING_DEPS_SOURCES := $(wildcard $(patsubst %.d,%.c,$(MISSING_DEPS)) \
$(patsubst %.d,%.cc,$(MISSING_DEPS)))
CPPFLAGS += -MD
.PHONY : everything deps objs clean veryclean rebuild
everything : $(EXECUTABLE)
deps : $(DEPS)
objs : $(OBJS)
clean :
@$(RM-F) *.o
@$(RM-F) *.d
veryclean: clean
@$(RM-F) $(EXECUTABLE)
rebuild: veryclean everything
ifneq ($(MISSING_DEPS),)
$(MISSING_DEPS) :
@$(RM-F) $(patsubst %.d,%.o,$@)
endif
-include $(DEPS)
$(EXECUTABLE) : $(OBJS)
gcc -o $(EXECUTABLE) $(OBJS) $(addprefix -l,$(LIBS))
=== makefile 緇撴潫 ===
鏈夊嚑涓湴鏂瑰煎緱瑙i噴涓涓嬬殑銆傞鍏堬紝鎴戝湪瀹氫箟澶ч儴鍒嗗彉閲忕殑鏃跺欎嬌 鐢ㄧ殑鏄?:= 鑰屼笉鏄?= 絎﹀彿銆傚畠鐨勪綔鐢ㄦ槸绔嬪嵆鎶婂畾涔変腑鍙傝冨埌鐨勫嚱 鏁板拰鍙橀噺閮藉睍寮浜嗐傚鏋滀嬌鐢?= 鐨勮瘽錛屽嚱鏁板拰鍙橀噺鍙傝冧細(xì)鐣欏湪閭?鍎匡紝灝辨槸璇存敼鍙樹竴涓彉閲忕殑鍊間細(xì)瀵艱嚧鍏跺畠鍙橀噺鐨勫間篃琚敼鍙樸備緥 濡傦細(xì)
A = foo
B = $(A)
# 鐜板湪 B 鏄?$(A) 錛岃?$(A) 鏄?'foo' 銆?
A = bar
# 鐜板湪 B 浠嶇劧鏄?$(A) 錛屼絾瀹冪殑鍊煎凡闅忕潃鍙樻垚 'bar' 浜嗐?
B := $(A)
# 鐜板湪 B 鐨勫兼槸 'bar' 銆?
A = foo
# B 鐨勫間粛鐒舵槸 'bar' 銆?
make 浼?xì)蹇界暐鍦?# 絎﹀彿鍚庨潰鐩村埌閭d竴琛岀粨鏉熺殑鎵鏈夋枃瀛椼?
ifneg...else...endif 緋葷粺鏄?makefile 閲岃鏌愪竴閮ㄥ垎鐮佹湁鏉′歡鐨?澶辨晥錛忔湁鏁堢殑宸ュ叿銆?ifeq 浣跨敤涓や釜鍙傛暟錛屽鏋滃畠浠浉鍚岋紝瀹冩妸鐩?鍒?else 錛堟垨鑰?endif 錛屽鏋滄病鏈?else 鐨勮瘽錛夌殑涓孌電爜鍔犺繘 makefile 閲岋紱濡傛灉涓嶅悓錛屾妸 else 鍒?endif 闂寸殑涓孌電爜鍔犲叆 makefile 錛堝鏋滄湁 else 錛夈?ifneq 鐨勭敤娉曞垰濂界浉鍙嶃?
'filter-out' 鍑芥暟浣跨敤涓や釜鐢ㄧ┖鏍煎垎寮鐨勫垪琛紝瀹冩妸絎簩鍒楄〃涓墍 鏈夌殑瀛樺湪浜庣涓鍒楄〃涓殑欏圭洰鍒犻櫎銆傛垜鐢ㄥ畠鏉ュ鐞?DEPS 鍒楄〃錛屾妸鎵 鏈夊凡緇忓瓨鍦ㄧ殑欏圭洰閮藉垹闄わ紝鑰屽彧淇濈暀緙哄皯鐨勯偅浜涖?
鎴戝墠闈㈣榪囷紝 CPPFLAGS 瀛樻湁鐢ㄤ簬闅愬惈瑙勫垯涓紶緇欓澶勭悊鍣ㄧ殑涓浜?鏃楁爣銆傝?-MD 寮鍏崇被浼?-M 寮鍏籌紝浣嗘槸浠庢簮鐮佹枃浠?.c 鎴?.cc 涓?褰㈡垚鐨勬枃浠跺悕鏄嬌鐢ㄥ悗緙 .d 鐨勶紙榪欏氨瑙i噴浜嗘垜褰㈡垚 DEPS 鍙橀噺鐨?姝ラ錛夈侱EPS 閲屾彁鍒扮殑鏂囦歡鍚庢潵鐢?'-include' 鍔犺繘浜?makefile 閲岋紝瀹冮殣钘忎簡鎵鏈夊洜鏂囦歡涓嶅瓨鍦ㄨ屼駭鐢熺殑閿欒淇℃伅銆?
濡傛灉浠諱綍渚濋潬鏂囦歡涓嶅瓨鍦紝 makefile 浼?xì)鎶婄浉搴旂?.o 鏂囦歡浠庣紕?涓婂垹闄わ紝浠庤屼嬌寰?make 閲嶅緩瀹冦傚洜涓?CPPFLAGS 鎸囧畾浜?-MD 錛?瀹冪殑 .d 鏂囦歡涔熻閲嶆柊浜х敓銆?
鏈鍚庯紝 'addprefix' 鍑芥暟鎶婄浜屼釜鍙傛暟鍒楄〃鐨勬瘡涓欏瑰墠緙涓婄涓 涓弬鏁板箋?
榪欎釜 makefile 鐨勯偅浜涚洰鐨勬槸錛堣繖浜涚洰鐨勫彲浠ヤ紶緇?make 鐨勫懡浠よ 鏉ョ洿鎺ラ夌敤錛夛細(xì)
everything:錛堥璁撅級 鏇存柊涓昏鐨勫彲鎵ц紼嬪簭錛屽茍涓斾負(fù)姣忎竴涓?婧愮爜鏂囦歡鐢熸垚鎴栨洿鏂頒竴涓?'.d' 鏂囦歡鍜屼竴涓?'.o' 鏂囦歡銆?
deps: 鍙槸涓烘瘡涓涓簮鐮佺▼搴忎駭鐢熸垨鏇存柊涓涓?'.d' 鏂囦歡銆?
objs: 涓烘瘡涓涓簮鐮佺▼搴忕敓鎴愭垨鏇存柊 '.d' 鏂囦歡鍜岀洰鏍囨枃浠躲?
clean: 鍒犻櫎鎵鏈変腑浠嬶紡渚濋潬鏂囦歡錛?*.d 鍜?*.o 錛夈?
veryclean: 鍋?`clean' 鍜屽垹闄ゅ彲鎵ц鏂囦歡銆?
rebuild: 鍏堝仛 `veryclean' 鐒跺悗 `everything' 錛涙棦瀹屽叏閲嶅緩銆?
闄や簡棰勮鐨?everything 浠ュ錛岃繖閲屽ご鍙湁 clean 錛?veryclean 錛?鍜?rebuild 瀵圭敤鎴鋒槸鏈夋剰涔夌殑銆?
鎴戣繕娌℃湁鍙戠幇褰撶粰鍑轟竴涓簮鐮佹枃浠剁殑鐩綍錛岃繖涓?makefile 浼?xì)澶辫触鐨?鎯呭喌錛岄櫎闈炰緷闈犳枃浠惰寮勪貢銆傚鏋滆繖縐嶅紕涔辯殑鎯呭喌鍙戠敓浜嗭紝鍙杈撳叆 `make clean' 錛屾墍鏈夌殑鐩爣鏂囦歡鍜屼緷闈犳枃浠朵細(xì)琚垹闄わ紝闂灝卞簲璇?琚В鍐充簡銆傚綋鐒訛紝鏈濂戒笉瑕佹妸瀹冧滑寮勪貢銆傚鏋滀綘鍙戠幇鍦ㄦ煇縐嶆儏鍐典笅榪?涓?makefile 鏂囦歡涓嶈兘瀹屾垚瀹冪殑宸ヤ綔錛岃鍛婅瘔鎴戯紝鎴戜細(xì)鎶婂畠鏁村ソ鐨勩?
3 鎬葷粨
~~~~~~~~~~~~~~~
鎴戝笇鏈涜繖綃囨枃绔犺凍澶熻緇嗙殑瑙i噴浜嗗鏂囦歡欏圭洰鏄庝箞榪愪綔鐨勶紝涔熻鏄庝簡 鎬庢牱瀹夊叏鑰屽悎鐞嗙殑浣跨敤瀹冦傚埌姝わ紝浣犲簲璇ュ彲浠ヨ交鏉劇殑鍒╃敤 GNU Make 宸?鍏鋒潵綆$悊灝忓瀷鐨勯」鐩紝濡傛灉浣犲畬鍏ㄧ悊瑙d簡鍚庨潰鍑犱釜閮ㄥ垎鐨勮瘽錛岃繖浜涘浜?浣犳潵璇村簲璇ユ病浠涔堝洶闅俱?
GNU Make 鏄竴浠跺己澶х殑宸ュ叿錛岃櫧鐒跺畠涓昏鏄敤鏉ュ緩绔嬬▼搴忥紝瀹冭繕鏈夊緢澶?鍒殑鐢ㄥ銆傚鏋滄兂瑕佺煡閬撴洿澶氭湁鍏寵繖涓伐鍏風(fēng)殑鐭ヨ瘑錛屽畠鐨勫彞娉曪紝鍑芥暟錛?鍜岃澶氬埆鐨勭壒鐐癸紝浣犲簲璇ュ弬鐪嬪畠鐨勫弬鑰冩枃浠?(info pages, 鍒殑 GNU 宸ュ叿涔熶竴鏍鳳紝鐪嬪畠浠殑 info pages. )銆?
]]>
銆銆瀹冧嬌浣犺兘鐩戣浣犵▼搴忎腑鍙橀噺鐨勫?
銆銆
銆銆瀹冧嬌浣犺兘璁劇疆鏂偣浠ヤ嬌紼嬪簭鍦ㄦ寚瀹氱殑浠g爜琛屼笂鍋滄鎵ц.
銆銆
銆銆瀹冧嬌浣犺兘涓琛岃鐨勬墽琛屼綘鐨勪唬鐮?
銆銆
銆銆鍦ㄥ懡浠よ涓婇敭鍏?gdb 騫舵寜鍥炶濺閿氨鍙互榪愯 gdb 浜? 濡傛灉涓鍒囨甯哥殑璇? gdb 灝嗚鍚姩騫朵笖浣犲皢鍦ㄥ睆騫曚笂鐪嬪埌綾諱技鐨勫唴瀹?
銆銆
銆銆GDB is free software and you are welcome to distribute copies of it
銆銆under certain conditions; type "show copying" to see the conditions.
銆銆There is absolutely no warranty for GDB; type "show warranty" for details.
銆銆GDB 4.14 (i486-slakware-linux), Copyright 1995 Free Software Foundation, Inc.
銆銆(gdb)
銆銆
銆銆褰撲綘鍚姩 gdb 鍚? 浣犺兘鍦ㄥ懡浠よ涓婃寚瀹氬緢澶氱殑閫夐」. 浣犱篃鍙互浠ヤ笅闈㈢殑鏂瑰紡鏉ヨ繍琛?gdb :
銆銆gdb
銆銆
銆銆褰撲綘鐢ㄨ繖縐嶆柟寮忚繍琛?gdb , 浣犺兘鐩存帴鎸囧畾鎯寵璋冭瘯鐨勭▼搴? 榪欏皢鍛婅瘔gdb 瑁呭叆鍚嶄負(fù) fname 鐨勫彲鎵ц鏂囦歡. 浣犱篃鍙互鐢?gdb 鍘繪鏌ヤ竴涓洜紼嬪簭寮傚父緇堟鑰屼駭鐢熺殑 core 鏂囦歡, 鎴栬呬笌涓涓鍦ㄨ繍琛岀殑紼嬪簭鐩歌繛. 浣犲彲浠ュ弬鑰?gdb 鎸囧崡欏墊垨鍦ㄥ懡浠よ涓婇敭鍏?gdb -h 寰楀埌涓涓湁鍏寵繖浜涢夐」鐨勮鏄庣殑綆鍗曞垪琛?
銆銆
銆銆涓鴻皟璇曠紪璇戜唬鐮?Compiling Code for Debugging)
銆銆
銆銆涓轟簡浣?gdb 姝e父宸ヤ綔, 浣犲繀欏諱嬌浣犵殑紼嬪簭鍦ㄧ紪璇戞椂鍖呭惈璋冭瘯淇℃伅. 璋冭瘯淇℃伅鍖呭惈浣犵▼搴忛噷鐨勬瘡涓彉閲忕殑綾誨瀷鍜屽湪鍙墽琛屾枃浠墮噷鐨勫湴鍧鏄犲皠浠ュ強(qiáng)婧愪唬鐮佺殑琛屽彿. gdb 鍒╃敤榪欎簺淇℃伅浣挎簮浠g爜鍜屾満鍣ㄧ爜鐩稿叧鑱? 鍦ㄧ紪璇戞椂鐢?-g 閫夐」鎵撳紑璋冭瘯閫夐」.
銆銆
銆銆gdb 鍩烘湰鍛戒護(hù)
銆銆
銆銆gdb 鏀寔寰堝鐨勫懡浠や嬌浣犺兘瀹炵幇涓嶅悓鐨勫姛鑳? 榪欎簺鍛戒護(hù)浠庣畝鍗曠殑鏂囦歡瑁呭叆鍒板厑璁鎬綘媯鏌ユ墍璋冪敤鐨勫爢鏍堝唴瀹圭殑澶嶆潅鍛戒護(hù), 琛?鍒楀嚭浜嗕綘鍦ㄧ敤 gdb 璋冭瘯鏃朵細(xì)鐢ㄥ埌鐨勪竴浜涘懡浠?
銆銆
銆銆琛?. 鍩烘湰 gdb 鍛戒護(hù).
銆銆
銆銆鍛?浠?鎻?榪般
銆銆file 瑁呭叆鎯寵璋冭瘯鐨勫彲鎵ц鏂囦歡銆
銆銆kill 緇堟姝e湪璋冭瘯鐨勭▼搴?
銆銆list 鍒楀嚭浜х敓鎵ц鏂囦歡鐨勬簮浠g爜鐨勪竴閮ㄥ垎
銆銆next 鎵ц涓琛屾簮浠g爜浣嗕笉榪涘叆鍑芥暟鍐呴儴
銆銆step 鎵ц涓琛屾簮浠g爜鑰屼笖榪涘叆鍑芥暟鍐呴儴
銆銆run銆鎵ц褰撳墠琚皟璇曠殑紼嬪簭
銆銆quit 緇堟 gdb銆
銆銆watch 浣夸綘鑳界洃瑙嗕竴涓彉閲忕殑鍊艱屼笉綆″畠浣曟椂琚敼鍙?
銆銆break銆鍦ㄤ唬鐮侀噷璁劇疆鏂偣, 榪欏皢浣跨▼搴忔墽琛屽埌榪欓噷鏃惰鎸傝搗
銆銆make 浣夸綘鑳戒笉閫鍑?gdb 灝卞彲浠ラ噸鏂頒駭鐢熷彲鎵ц鏂囦歡
銆銆shell 浣夸綘鑳戒笉紱誨紑 gdb 灝辨墽琛?UNIX shell 鍛戒護(hù)
銆銆
銆銆gdb 鏀寔寰堝涓?UNIX shell 紼嬪簭涓鏍風(fēng)殑鍛戒護(hù)緙栬緫鐗瑰緛. 浣犺兘璞″湪 bash 鎴?tcsh閲岄偅鏍鋒寜 Tab 閿 gdb 甯綘琛ラ綈涓涓儫涓鐨勫懡浠? 濡傛灉涓嶆儫涓鐨勮瘽 gdb 浼?xì)鍒楀嚭鎵鏈夊尮閰嶇殑鍛戒護(hù). 浣犱篃鑳界敤鍏夋爣閿笂涓嬬炕鍔ㄥ巻鍙插懡浠?
銆gdb 搴旂敤涓句緥
銆銆
銆銆鏈妭鐢ㄤ竴涓疄渚嬫暀浣犱竴姝ユ鐨勭敤 gdb 璋冭瘯紼嬪簭. 琚皟璇曠殑紼嬪簭鐩稿綋鐨勭畝鍗? 浣嗗畠灞曠ず浜?gdb 鐨勫吀鍨嬪簲鐢?
銆銆
銆銆涓嬮潰鍒楀嚭浜嗗皢琚皟璇曠殑紼嬪簭. 榪欎釜紼嬪簭琚О涓?greeting , 瀹冩樉紺轟竴涓畝鍗曠殑闂? 鍐嶇敤鍙嶅簭灝嗗畠鍒楀嚭.
銆銆
銆銆#include銆<stdio.h>
銆銆main ()
銆銆{
銆銆銆char my_string[] = "hello there";
銆銆銆my_print (my_string);
銆銆銆my_print2 (my_string);
銆銆}
銆銆void my_print (char *string)
銆銆{
銆銆銆printf ("The string is %s\n", string);
銆銆}
銆銆void my_print2 (char *string)
銆銆{
銆銆銆char *string2;
銆銆銆int size, i;
銆銆銆size = strlen (string);
銆銆銆string2 = (char *) malloc (size + 1);
銆銆銆for (i = 0; i < size; i++)
銆銆銆銆string2[size - i] = string[i];
銆銆銆string2[size+1] = `\0';
銆銆銆printf ("The string printed backward is %s\n", string2);
銆銆}
銆銆
銆銆
銆銆
銆銆鐢ㄤ笅闈㈢殑鍛戒護(hù)緙栬瘧瀹?
銆銆gcc -o test test.c
銆銆
銆銆榪欎釜紼嬪簭鎵ц鏃舵樉紺哄涓嬬粨鏋?
銆銆The string is hello there
銆銆The string printed backward is
銆銆
銆銆杈撳嚭鐨勭涓琛屾槸姝g‘鐨? 浣嗙浜岃鎵撳嵃鍑虹殑涓滆タ騫朵笉鏄垜浠墍鏈熸湜鐨? 鎴戜滑鎵璁炬兂鐨勮緭鍑哄簲璇ユ槸:
銆銆The string printed backward is ereht olleh
銆銆
銆銆鐢變簬鏌愪簺鍘熷洜, my_print2 鍑芥暟娌℃湁姝e父宸ヤ綔. 璁╂垜浠敤 gdb 鐪嬬湅闂絀剁珶鍑哄湪鍝効, 鍏堥敭鍏ュ涓嬪懡浠?
銆銆gdb greeting
銆銆
銆銆娉ㄦ剰: 璁板緱鍦ㄧ紪璇?greeting 紼嬪簭鏃舵妸璋冭瘯閫夐」鎵撳紑.
銆銆
銆銆濡傛灉浣犲湪杈撳叆鍛戒護(hù)鏃跺繕浜嗘妸瑕佽皟璇曠殑紼嬪簭浣滀負(fù)鍙傛暟浼犵粰 gdb , 浣犲彲浠ュ湪 gdb 鎻愮ず絎︿笅鐢?file 鍛戒護(hù)鏉ヨ澆鍏ュ畠:
銆銆(gdb) file greeting
銆銆
銆銆榪欎釜鍛戒護(hù)灝嗚澆鍏?greeting 鍙墽琛屾枃浠跺氨璞′綘鍦?gdb 鍛戒護(hù)琛岄噷瑁呭叆瀹冧竴鏍?
銆銆
銆銆榪欐椂浣犺兘鐢?gdb 鐨?run 鍛戒護(hù)鏉ヨ繍琛?greeting 浜? 褰撳畠鍦?gdb 閲岃榪愯鍚庣粨鏋滃ぇ綰︿細(xì)璞¤繖鏍?
銆銆
銆銆(gdb) run
銆銆Starting program: /root/greeting
銆銆The string is hello there
銆銆The string printed backward is
銆銆Program exited with code 041
銆銆
銆銆
銆銆
銆銆榪欎釜杈撳嚭鍜屽湪 gdb 澶栭潰榪愯鐨勭粨鏋滀竴鏍? 闂鏄? 涓轟粈涔堝弽搴忔墦鍗版病鏈夊伐浣? 涓轟簡鎵懼嚭鐥囩粨鎵鍦? 鎴戜滑鍙互鍦?my_print2 鍑芥暟鐨?for 璇彞鍚庤涓涓柇鐐? 鍏蜂綋鐨勫仛娉曟槸鍦?gdb 鎻愮ず絎︿笅閿叆 list 鍛戒護(hù)涓夋, 鍒楀嚭婧愪唬鐮?
銆銆(gdb) list
銆銆(gdb) list
銆銆(gdb) list
銆銆
銆銆鎶宸? 鍦?gdb 鎻愮ず絎︿笅鎸夊洖杞﹀仴灝嗛噸澶嶄笂涓涓懡浠?
銆銆
銆銆絎竴嬈¢敭鍏?list 鍛戒護(hù)鐨勮緭鍑哄涓?
銆銆
銆銆1銆銆銆 #include銆<stdio.h>
銆銆2
銆銆3銆銆銆 main ()
銆銆4銆銆銆 {
銆銆5銆銆銆銆 char my_string[] = "hello there";
銆銆6
銆銆7銆銆銆銆 my_print (my_string);
銆銆8銆銆銆銆 my_print2 (my_string);
銆銆9銆銆銆 }
銆銆10
銆銆
銆銆
銆銆
銆銆濡傛灉鎸変笅鍥炶濺, gdb 灝嗗啀鎵ц涓嬈?list 鍛戒護(hù), 緇欏嚭涓嬪垪杈撳嚭:
銆銆
銆銆11銆銆銆my_print (char *string)
銆銆12銆銆銆{
銆銆13銆銆銆銆printf ("The string is %s\n", string);
銆銆14銆銆銆}
銆銆15
銆銆16銆銆銆my_print2 (char *string)
銆銆17銆銆銆{
銆銆18銆銆銆銆char *string2;
銆銆19銆銆銆銆int size, i;
銆銆20
銆銆
銆銆
銆銆
銆銆鍐嶆寜涓嬈″洖杞﹀皢鍒楀嚭 greeting 紼嬪簭鐨勫墿浣欓儴鍒?
銆銆
銆銆21銆銆銆銆size = strlen (string);
銆銆22銆銆銆銆string2 = (char *) malloc (size + 1);
銆銆23銆銆銆銆for (i = 0; i < size; i++)
銆銆24銆銆銆銆銆string2[size - i] = string[i];
銆銆25銆銆銆銆string2[size+1] = `\0';
銆銆26銆銆銆銆printf ("The string printed backward is %s\n", string2);
銆銆27銆銆銆}
銆銆
銆銆
銆銆
銆銆鏍規(guī)嵁鍒楀嚭鐨勬簮紼嬪簭, 浣犺兘鐪嬪埌瑕佽鏂偣鐨勫湴鏂瑰湪絎?4琛? 鍦?gdb 鍛戒護(hù)琛屾彁紺虹涓嬮敭鍏ュ涓嬪懡浠よ緗柇鐐?
銆銆(gdb) break 24
銆銆
銆銆gdb 灝嗕綔鍑哄涓嬬殑鍝嶅簲:
銆銆Breakpoint 1 at 0x139: file greeting.c, line 24
銆銆(gdb)
銆銆
銆銆鐜板湪鍐嶉敭鍏?run 鍛戒護(hù), 灝嗕駭鐢熷涓嬬殑杈撳嚭:
銆銆
銆銆Starting program: /root/greeting
銆銆The string is hello there
銆銆Breakpoint 1, my_print2 (string = 0xbfffdc4 "hello there") at greeting.c :24
銆銆24銆string2[size-i]=string[i]
銆銆
銆銆
銆銆
銆銆浣犺兘閫氳繃璁劇疆涓涓瀵?string2[size - i] 鍙橀噺鐨勫肩殑瑙傚療鐐規(guī)潵鐪嬪嚭閿欒鏄庢牱浜х敓鐨? 鍋氭硶鏄敭鍏?
銆銆(gdb) watch string2[size - i]
銆銆
銆銆gdb 灝嗕綔鍑哄涓嬪洖搴?
銆銆Watchpoint 2: string2[size - i]
銆銆
銆銆鐜板湪鍙互鐢?next 鍛戒護(hù)鏉ヤ竴姝ユ鐨勬墽琛?for 寰幆浜?
銆銆(gdb) next
銆銆
銆銆緇忚繃絎竴嬈″驚鐜悗, gdb 鍛婅瘔鎴戜滑 string2[size - i] 鐨勫兼槸 `h`. gdb 鐢ㄥ涓嬬殑鏄劇ず鏉ュ憡璇変綘榪欎釜淇℃伅:
銆銆
銆銆Watchpoint 2, string2[size - i]
銆銆Old value = 0 `\000'
銆銆New value = 104 `h'
銆銆my_print2(string = 0xbfffdc4 "hello there") at greeting.c:23
銆銆23 for (i=0; i<size; i++)
銆銆
銆銆
銆銆
銆銆榪欎釜鍊兼鏄湡鏈涚殑. 鍚庢潵鐨勬暟嬈″驚鐜殑緇撴灉閮芥槸姝g‘鐨? 褰?i=10 鏃? 琛ㄨ揪寮?string2[size - i] 鐨勫肩瓑浜?`e`, size - i 鐨勫肩瓑浜?1, 鏈鍚庝竴涓瓧絎﹀凡緇忔嫹鍒版柊涓查噷浜?
銆銆
銆銆濡傛灉浣犲啀鎶婂驚鐜墽琛屼笅鍘? 浣犱細(xì)鐪嬪埌宸茬粡娌℃湁鍊煎垎閰嶇粰 string2[0] 浜? 鑰屽畠鏄柊涓茬殑絎竴涓瓧絎? 鍥犱負(fù) malloc 鍑芥暟鍦ㄥ垎閰嶅唴瀛樻椂鎶婂畠浠垵濮嬪寲涓虹┖(null)瀛楃. 鎵浠?string2 鐨勭涓涓瓧絎︽槸絀哄瓧絎? 榪欒В閲婁簡涓轟粈涔堝湪鎵撳嵃 string2 鏃舵病鏈変換浣曡緭鍑轟簡.
銆銆
銆銆鐜板湪鎵懼嚭浜嗛棶棰樺嚭鍦ㄥ摢閲? 淇榪欎釜閿欒鏄緢瀹規(guī)槗鐨? 浣犲緱鎶婁唬鐮侀噷鍐欏叆 string2 鐨勭涓涓瓧絎︾殑鐨勫亸縐婚噺鏀逛負(fù) size - 1 鑰屼笉鏄?size. 榪欐槸鍥犱負(fù) string2 鐨勫ぇ灝忎負(fù) 12, 浣嗚搗濮嬪亸縐婚噺鏄?0, 涓插唴鐨勫瓧絎︿粠鍋忕Щ閲?0 鍒?鍋忕Щ閲?10, 鍋忕Щ閲?11 涓虹┖瀛楃淇濈暀.
銆銆
銆銆涓轟簡浣夸唬鐮佹甯稿伐浣滄湁寰堝縐嶄慨鏀瑰姙娉? 涓縐嶆槸鍙﹁涓涓瘮涓茬殑瀹為檯澶у皬灝?1 鐨勫彉閲? 榪欐槸榪欑瑙e喅鍔炴硶鐨勪唬鐮?
銆銆
銆銆#include銆<stdio.h>
銆銆main ()
銆銆{
銆銆銆char my_string[] = "hello there";
銆銆銆my_print (my_string);
銆銆銆my_print2 (my_string);
銆銆}
銆銆my_print (char *string)
銆銆{
銆銆銆printf ("The string is %s\n", string);
銆銆}
銆銆my_print2 (char *string)
銆銆{
銆銆銆char *string2;
銆銆銆int size, size2, i;
銆銆銆size = strlen (string);
銆銆銆size2 = size -1;
銆銆銆string2 = (char *) malloc (size + 1);
銆銆銆for (i = 0; i < size; i++)
銆銆銆銆string2[size2 - i] = string[i];
銆銆銆string2[size] = `\0';
銆銆銆printf ("The string printed backward is %s\n", string2);
銆銆}
]]>
銆銆C 鍦ㄨ繃鍘葷殑浜屽崄騫翠腑鏈変簡寰堝ぇ鐨勫彂灞? 鍦?0騫翠唬鏈湡緹庡浗鍥藉鏍囧噯鍗忎細(xì)(American NationalStandards Institute)鍙戝竷浜嗕竴涓縐頒負(fù) ANSI C 鐨?C 璇█鏍囧噯.榪欐洿鍔犱繚璇佷簡灝嗘潵鍦ㄤ笉鍚屽鉤鍙頒笂鐨?C 鐨勪竴鑷存? 鍦?0騫翠唬榪樺嚭鐜頒簡涓縐?C 鐨勯潰鍚戝璞$殑鎵╁睍縐頒負(fù) C++.
銆銆
銆銆Linux 涓婂彲鐢ㄧ殑 C 緙栬瘧鍣ㄦ槸 GNU C 緙栬瘧鍣? 瀹冨緩绔嬪湪鑷敱杞歡鍩洪噾浼?xì)鐨劸~栫▼璁稿彲璇佺殑鍩虹涓? 鍥犳鍙互鑷敱鍙戝竷. 浣犺兘鍦?Linux 鐨勫彂琛屽厜鐩樹笂鎵懼埌瀹?
銆銆
銆銆闅?Slackware Linux 鍙戣鐨?GNU C 緙栬瘧鍣?GCC)鏄竴涓叏鍔熻兘鐨?ANSI C 鍏煎緙栬瘧鍣? 濡傛灉浣犵啛鎮(zhèn)夊叾浠栨搷浣滅郴緇熸垨紜歡騫沖彴涓婄殑涓縐?C 緙栬瘧鍣? 浣犲皢鑳藉緢蹇湴鎺屾彙 GCC. 榪欏拰java鍦ㄥ懡浠よ涓?BR>銆銆
銆銆緙栬瘧涔熷緢綾諱技鎴戜滑灝嗗湪涓嬮潰浠嬬粛濡備綍浣跨敤 GCC 鍜屼竴浜?GCC 緙栬瘧鍣ㄦ渶甯哥敤鐨勯夐」.
銆銆
銆銆鏍煎紡 gcc [option] [sourcefilename]
銆銆
銆銆gcc鐨勯夐」鍗佸垎綣佸,澶х害鏈変笂鐧句腑,涓嶈繃騫蟲椂甯哥敤鐨勪笉鏄潪甯稿,鎴戜滑灝嗚浠嬬粛涓浜涘父鐢ㄧ殑閫夐」:
銆銆
銆銆鏈綆鍗曠殑鏄?gcc hello.c
銆銆
銆銆榛樿鐨勬儏鍐典笅灝嗙敓鎴恆.out鐨勫彲鎵ц鎬ф枃浠?浣犲彧闇瑕佸湪緇堢涓婅緭鍏?/a.out灝卞彲浠ョ湅鍒版墽琛岀殑緇撴灉.
銆銆
銆銆濡傛灉浣犳兂鎸囧畾鐢熸垚鐩爣鏂囦歡鐨勫悕瀛楅偅涔堜綘鍙互鍔犱笂 -o閫夐」,鍛戒護(hù)濡備笅:
銆銆
銆銆gcc -o hello hello.c
銆銆
銆銆gcc涔熷厑璁鎬綘鍙紪璇戞簮紼嬪簭,榪欐牱鍙互鍙鏌ョ紪璇戞椂鍒葷殑閿欒,鏈夊埄涔熻皟璇曠▼搴?鐢?c閫夐」鍙互杈懼埌榪欎釜鐩殑
銆銆
銆銆鍛戒護(hù)濡備笅:
銆銆
銆銆gcc -c hello hello.c
銆銆
銆銆緇撴灉鐢熸垚浜嗕竴涓腑闂翠唬鐮乭ello.o鏂囦歡
銆銆
銆銆 緙栬瘧閫夐」鍛婅瘔 GCC 鍦ㄤ負(fù) C 浠g爜浜х敓浜嗘眹緙栬璦鏂囦歡鍚庡仠姝㈢紪璇? GCC 浜х敓鐨勬眹緙栬璦鏂囦歡鐨勭己鐪佹墿灞曞悕鏄?.s . -E 閫夐」鎸囩ず緙栬瘧鍣ㄤ粎瀵硅緭鍏ユ枃浠惰繘琛岄澶勭悊. 褰撹繖涓夐」琚嬌鐢ㄦ椂, 棰勫鐞嗗櫒鐨勮緭鍑鴻閫佸埌鏍囧噯杈撳嚭鑰屼笉鏄偍瀛樺湪鏂囦歡閲?
銆銆
銆銆涔嬪悗浣犲彲浠ュ涓婅堪涓棿浠g爜榪涜閾炬帴榪愯,浣跨敤鍛戒護(hù):
銆銆
銆銆gcc -o hello.out hello.c
銆銆
銆銆浼?鍖?閫?欏?BR>銆銆
銆銆褰撲綘鐢?GCC 緙栬瘧 C 浠g爜鏃? 瀹冧細(xì)璇曠潃鐢ㄦ渶灝戠殑鏃墮棿瀹屾垚緙栬瘧騫朵笖浣跨紪璇戝悗鐨勪唬鐮佹槗浜庤皟璇? 鏄撲簬璋冭瘯鎰忓懗鐫緙栬瘧鍚庣殑浠g爜涓庢簮浠g爜鏈夊悓鏍風(fēng)殑鎵ц嬈″簭, 緙栬瘧鍚庣殑浠g爜娌℃湁緇忚繃浼樺寲.鏈夊緢澶氶夐」鍙敤浜庡憡璇?GCC 鍦ㄨ楄垂鏇村緙栬瘧鏃墮棿鍜岀壓鐗叉槗璋冭瘯鎬х殑鍩虹涓婁駭鐢熸洿灝忔洿蹇殑鍙墽琛屾枃浠? 榪欎簺閫夐」涓渶鍏稿瀷鐨勬槸-O 鍜?-O2 閫夐」.
銆銆
銆銆-O 閫夐」鍛婅瘔 GCC 瀵規(guī)簮浠g爜榪涜鍩烘湰浼樺寲. 榪欎簺浼樺寲鍦ㄥぇ澶氭暟鎯呭喌涓嬮兘浼?xì)鋴山E嬪簭鎵ц鐨勬洿蹇? -O2 閫夐」鍛婅瘔 GCC 浜х敓灝藉彲鑳藉皬鍜屽敖鍙兘蹇殑浠g爜. -O2 閫夐」灝嗕嬌緙栬瘧鐨勯熷害姣斾嬌鐢?-O鏃舵參. 浣嗛氬父浜х敓鐨勪唬鐮佹墽琛岄熷害浼?xì)鏇村?
銆銆
銆銆GCC 鏀寔鏁扮璋冭瘯鍜屽墫鏋愰夐」. 鍦ㄨ繖浜涢夐」閲屼綘浼?xì)鏈甯哥敤鍒扮殑鏄?-g 鍜?-pg 閫夐」.
銆銆
銆銆 閫夐」鍛婅瘔 GCC 浜х敓鑳借 GNU 璋冭瘯鍣ㄤ嬌鐢ㄧ殑璋冭瘯淇℃伅浠ヤ究璋冭瘯浣犵殑紼嬪簭. GCC 鎻愪緵浜嗕竴涓緢澶氬叾浠?C 緙栬瘧鍣ㄩ噷娌℃湁鐨勭壒鎬? 鍦?GCC 閲屼綘鑳戒嬌 -g 鍜?-O (浜х敓浼樺寲浠g爜)鑱旂敤. 榪欎竴鐐歸潪甯告湁鐢ㄥ洜涓轟綘鑳藉湪涓庢渶緇堜駭鍝佸敖鍙兘鐩歌繎鐨勬儏鍐典笅璋冭瘯浣犵殑浠g爜. 鍦ㄤ綘鍚屾椂浣跨敤榪欎袱涓夐」鏃朵綘蹇呴』娓呮浣犳墍鍐欑殑鏌愪簺浠g爜宸茬粡鍦ㄤ紭鍖栨椂琚?GCC 浣滀簡鏀瑰姩. 鍏充簬璋冭瘯 C 紼嬪簭鐨勬洿澶氫俊鎭鐪嬩笅涓鑺?鐢?gdb 璋冭瘯 C 紼嬪簭" .
銆銆
銆銆濡備笅鍛戒護(hù) gcc -c -g hello.c
銆銆
銆銆pg 閫夐」鍛婅瘔 GCC 鍦ㄤ綘鐨勭▼搴忛噷鍔犲叆棰濆鐨勪唬鐮? 鎵ц鏃? 浜х敓 gprof 鐢ㄧ殑鍓栨瀽淇℃伅浠ユ樉紺轟綘鐨勭▼搴忕殑鑰楁椂鎯呭喌.
銆銆
銆銆鍏充簬ggc鐨勮緇嗕俊鎭彲鐢╩an gcc鏉ユ煡鐪?img src ="http://m.shnenglu.com/jjbird/aggbug/3372.html" width = "1" height = "1" />
]]>