锘??xml version="1.0" encoding="utf-8" standalone="yes"?>免费一级欧美片在线观看,国产精品国产一区二区,国产精品激情av在线播放http://www.shnenglu.com/yehongly/archive/2008/09/18/62200.html鑼?/dc:creator>鑼?/author>Thu, 18 Sep 2008 09:44:00 GMThttp://www.shnenglu.com/yehongly/archive/2008/09/18/62200.htmlhttp://www.shnenglu.com/yehongly/comments/62200.htmlhttp://www.shnenglu.com/yehongly/archive/2008/09/18/62200.html#Feedback0http://www.shnenglu.com/yehongly/comments/commentRss/62200.htmlhttp://www.shnenglu.com/yehongly/services/trackbacks/62200.html浣跨敤鍙橀噺
鈥斺斺斺?/strong>

鍦∕akefile涓殑瀹氫箟鐨勫彉閲忥紝灝卞儚鏄疌/C++璇█涓殑瀹忎竴鏍鳳紝浠栦唬琛ㄤ簡涓涓枃鏈瓧涓詫紝 鍦∕akefile涓墽琛岀殑鏃跺欏叾浼氳嚜鍔ㄥ師妯″師鏍峰湴灞曞紑鍦ㄦ墍浣跨敤鐨勫湴鏂廣傚叾涓嶤/C++鎵涓嶅悓鐨勬槸錛屼綘鍙互鍦∕akefile涓敼鍙樺叾鍊箋傚湪 Makefile涓紝鍙橀噺鍙互浣跨敤鍦?#8220;鐩爣”錛?#8220;渚濊禆鐩爣”錛?#8220;鍛戒護”鎴栨槸Makefile鐨勫叾瀹冮儴鍒嗕腑銆?/font>

鍙橀噺鐨勫懡鍚嶅瓧鍙互鍖呭惈瀛楃銆佹暟瀛楋紝涓嬪垝綰匡紙鍙互鏄暟瀛楀紑澶達級錛屼絾涓嶅簲璇ュ惈鏈?#8220;:”銆?#8220;#”銆? “=”鎴栨槸絀哄瓧絎︼紙絀烘牸銆佸洖杞︾瓑錛夈傚彉閲忔槸澶у皬鍐欐晱鎰熺殑錛?#8220;foo”銆?#8220;Foo”鍜?#8220;FOO”鏄笁涓笉鍚岀殑鍙橀噺鍚嶃備紶緇熺殑Makefile鐨勫彉閲忓悕鏄叏澶? 鍐欑殑鍛藉悕鏂瑰紡錛屼絾鎴戞帹鑽愪嬌鐢ㄥぇ灝忓啓鎼厤鐨勫彉閲忓悕錛屽錛歁akeFlags銆傝繖鏍峰彲浠ラ伩鍏嶅拰緋葷粺鐨勫彉閲忓啿紿侊紝鑰屽彂鐢熸剰澶栫殑浜嬫儏銆?/font>

鏈変竴浜涘彉閲忔槸寰堝鎬瓧涓詫紝濡?#8220;$<”銆?#8220;$@”絳夛紝榪欎簺鏄嚜鍔ㄥ寲鍙橀噺錛屾垜浼氬湪鍚庨潰浠嬬粛銆?/font>

涓銆佸彉閲忕殑鍩虹

鍙橀噺鍦ㄥ0鏄庢椂闇瑕佺粰浜堝垵鍊鹼紝鑰屽湪浣跨敤鏃訛紝闇瑕佺粰鍦ㄥ彉閲忓悕鍓嶅姞涓?#8220;$”絎﹀彿錛屼絾鏈濂界敤灝忔嫭鍙?#8220;錛堬級”鎴栨槸澶ф嫭鍙?#8220;{}”鎶婂彉閲忕粰鍖呮嫭璧鋒潵銆傚鏋滀綘瑕佷嬌鐢ㄧ湡瀹炵殑“$”瀛楃錛岄偅涔堜綘闇瑕佺敤“$$”鏉ヨ〃紺恒?/font>

鍙橀噺鍙互浣跨敤鍦ㄨ澶氬湴鏂癸紝濡傝鍒欎腑鐨?#8220;鐩爣”銆?#8220;渚濊禆”銆?#8220;鍛戒護”浠ュ強鏂扮殑鍙橀噺涓傚厛鐪嬩竴涓緥瀛愶細

    objects = program.o foo.o utils.o
    program : $(objects)
            cc -o program $(objects)

    $(objects) : defs.h

鍙橀噺浼氬湪浣跨敤瀹冪殑鍦版柟綺劇‘鍦板睍寮錛屽氨鍍廋/C++涓殑瀹忎竴鏍鳳紝渚嬪錛?/font>

    foo = c
    prog.o : prog.$(foo)
            $(foo)$(foo) -$(foo) prog.$(foo)

灞曞紑鍚庡緱鍒幫細

    prog.o : prog.c
            cc -c prog.c

褰撶劧錛屽崈涓囦笉瑕佸湪浣犵殑Makefile涓繖鏍峰共錛岃繖閲屽彧鏄婦涓緥瀛愭潵琛ㄦ槑Makefile涓殑鍙橀噺鍦ㄤ嬌鐢ㄥ灞曞紑鐨勭湡瀹炴牱瀛愩傚彲瑙佸叾灝辨槸涓涓?#8220;鏇夸唬”鐨勫師鐞嗐?/font>

鍙﹀錛岀粰鍙橀噺鍔犱笂鎷彿瀹屽叏鏄負浜嗘洿鍔犲畨鍏ㄥ湴浣跨敤榪欎釜鍙橀噺錛屽湪涓婇潰鐨勪緥瀛愪腑錛屽鏋滀綘涓嶆兂緇欏彉閲忓姞涓婃嫭鍙鳳紝閭d篃鍙互錛屼絾鎴戣繕鏄己鐑堝緩璁綘緇欏彉閲忓姞涓婃嫭鍙楓?/font>


浜屻佸彉閲忎腑鐨勫彉閲?/strong>

鍦ㄥ畾涔夊彉閲忕殑鍊兼椂錛屾垜浠彲浠ヤ嬌鐢ㄥ叾瀹冨彉閲忔潵鏋勯犲彉閲忕殑鍊鹼紝鍦∕akefile涓湁涓ょ鏂瑰紡鏉ュ湪鐢ㄥ彉閲忓畾涔夊彉閲忕殑鍊箋?/font>

鍏堢湅絎竴縐嶆柟寮忥紝涔熷氨鏄畝鍗曠殑浣跨敤“=”鍙鳳紝鍦?#8220;=”宸︿晶鏄彉閲忥紝鍙充晶鏄彉閲忕殑鍊鹼紝鍙充晶鍙橀噺鐨勫煎彲浠ュ畾涔夊湪鏂囦歡鐨勪換浣曚竴澶勶紝涔熷氨鏄錛屽彸渚т腑鐨勫彉閲忎笉涓瀹氶潪瑕佹槸宸插畾涔夊ソ鐨勫鹼紝鍏朵篃鍙互浣跨敤鍚庨潰瀹氫箟鐨勫箋傚錛?/font>

    foo = $(bar)
    bar = $(ugh)
    ugh = Huh?

    all:
            echo $(foo)

鎴戜滑鎵ц“make all”灝嗕細鎵撳嚭鍙橀噺$(foo)鐨勫兼槸“Huh?”錛?$(foo)鐨勫兼槸$(bar)錛?(bar)鐨勫兼槸$(ugh)錛?(ugh)鐨勫兼槸“Huh?”錛夊彲瑙侊紝鍙橀噺鏄彲浠ヤ嬌鐢ㄥ悗闈㈢殑鍙橀噺鏉ュ畾涔夌殑銆?/font>

榪欎釜鍔熻兘鏈夊ソ鐨勫湴鏂癸紝涔熸湁涓嶅ソ鐨勫湴鏂癸紝濂界殑鍦版柟鏄紝鎴戜滑鍙互鎶婂彉閲忕殑鐪熷疄鍊兼帹鍒板悗闈㈡潵瀹氫箟錛屽錛?/font>

    CFLAGS = $(include_dirs) -O
    include_dirs = -Ifoo -Ibar

褰?#8220;CFLAGS”鍦ㄥ懡浠や腑琚睍寮鏃訛紝浼氭槸“-Ifoo -Ibar -O”銆備絾榪欑褰㈠紡涔熸湁涓嶅ソ鐨勫湴鏂癸紝閭e氨鏄掑綊瀹氫箟錛屽錛?/font>

    CFLAGS = $(CFLAGS) -O

    鎴栵細

    A = $(B)
    B = $(A)

榪欎細璁﹎ake闄峰叆鏃犻檺鐨勫彉閲忓睍寮榪囩▼涓幓錛屽綋鐒訛紝鎴戜滑鐨刴ake鏄湁鑳藉姏媯嫻嬭繖鏍風殑瀹氫箟錛屽茍 浼氭姤閿欍傝繕鏈夊氨鏄鏋滃湪鍙橀噺涓嬌鐢ㄥ嚱鏁幫紝閭d箞錛岃繖縐嶆柟寮忎細璁╂垜浠殑make榪愯鏃墮潪甯告參錛屾洿緋熺硶鐨勬槸錛屼粬浼氫嬌鐢ㄥ緱涓や釜make鐨勫嚱鏁?#8220;wildcard” 鍜?#8220;shell”鍙戠敓涓嶅彲棰勭煡鐨勯敊璇傚洜涓轟綘涓嶄細鐭ラ亾榪欎袱涓嚱鏁頒細琚皟鐢ㄥ灝戞銆?/font>

涓轟簡閬垮厤涓婇潰鐨勮繖縐嶆柟娉曪紝鎴戜滑鍙互浣跨敤make涓殑鍙︿竴縐嶇敤鍙橀噺鏉ュ畾涔夊彉閲忕殑鏂規硶銆傝繖縐嶆柟娉曚嬌鐢ㄧ殑鏄?#8220;:=”鎿嶄綔絎︼紝濡傦細

    x := foo
    y := $(x) bar
    x := later

鍏剁瓑浠蜂簬錛?/font>

    y := foo bar
    x := later

鍊煎緱涓鎻愮殑鏄紝榪欑鏂規硶錛屽墠闈㈢殑鍙橀噺涓嶈兘浣跨敤鍚庨潰鐨勫彉閲忥紝鍙兘浣跨敤鍓嶉潰宸插畾涔夊ソ浜嗙殑鍙橀噺銆傚鏋滄槸榪欐牱錛?/font>

    y := $(x) bar
    x := foo

閭d箞錛寉鐨勫兼槸“bar”錛岃屼笉鏄?#8220;foo bar”銆?/font>

涓婇潰閮芥槸涓浜涙瘮杈冪畝鍗曠殑鍙橀噺浣跨敤浜嗭紝璁╂垜浠潵鐪嬩竴涓鏉傜殑渚嬪瓙錛屽叾涓寘鎷簡make鐨勫嚱鏁般佹潯浠惰〃杈懼紡鍜屼竴涓郴緇熷彉閲?#8220;MAKELEVEL”鐨勪嬌鐢細

    ifeq (0,${MAKELEVEL})
    cur-dir   := $(shell pwd)
    whoami    := $(shell whoami)
    host-type := $(shell arch)
    MAKE := ${MAKE} host-type=${host-type} whoami=${whoami}
    endif

鍏充簬鏉′歡琛ㄨ揪寮忓拰鍑芥暟錛屾垜浠湪鍚庨潰鍐嶈錛屽浜庣郴緇熷彉閲?#8220;MAKELEVEL”錛屽叾鎰忔濇槸錛屽鏋滄垜浠殑make鏈変竴涓祵濂楁墽琛岀殑鍔ㄤ綔錛堝弬瑙佸墠闈㈢殑“宓屽浣跨敤make”錛夛紝閭d箞錛岃繖涓彉閲忎細璁板綍浜嗘垜浠殑褰撳墠Makefile鐨勮皟鐢ㄥ眰鏁般?/font>

涓嬮潰鍐嶄粙緇嶄袱涓畾涔夊彉閲忔椂鎴戜滑闇瑕佺煡閬撶殑錛岃鍏堢湅涓涓緥瀛愶紝濡傛灉鎴戜滑瑕佸畾涔変竴涓彉閲忥紝鍏跺兼槸涓涓┖鏍鹼紝閭d箞鎴戜滑鍙互榪欐牱鏉ワ細

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

nullstring鏄竴涓狤mpty鍙橀噺錛屽叾涓粈涔堜篃娌℃湁錛岃屾垜浠殑space鐨勫兼槸涓涓┖ 鏍箋傚洜涓哄湪鎿嶄綔絎︾殑鍙寵竟鏄緢闅炬弿榪頒竴涓┖鏍肩殑錛岃繖閲岄噰鐢ㄧ殑鎶鏈緢綆$敤錛屽厛鐢ㄤ竴涓狤mpty鍙橀噺鏉ユ爣鏄庡彉閲忕殑鍊煎紑濮嬩簡錛岃屽悗闈㈤噰鐢?#8220;#”娉ㄩ噴絎︽潵琛ㄧず鍙橀噺瀹? 涔夌殑緇堟錛岃繖鏍鳳紝鎴戜滑鍙互瀹氫箟鍑哄叾鍊兼槸涓涓┖鏍肩殑鍙橀噺銆傝娉ㄦ剰榪欓噷鍏充簬“#”鐨勪嬌鐢紝娉ㄩ噴絎?#8220;#”鐨勮繖縐嶇壒鎬у煎緱鎴戜滑娉ㄦ剰錛屽鏋滄垜浠繖鏍峰畾涔変竴涓彉閲忥細

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

dir榪欎釜鍙橀噺鐨勫兼槸“/foo/bar”錛屽悗闈㈣繕璺熶簡4涓┖鏍鹼紝濡傛灉鎴戜滑榪欐牱浣跨敤榪欐牱鍙橀噺鏉ユ寚瀹氬埆鐨勭洰褰曗斺?#8220;$(dir)/file”閭d箞灝卞畬铔嬩簡銆?/font>

榪樻湁涓涓瘮杈冩湁鐢ㄧ殑鎿嶄綔絎︽槸“?=”錛屽厛鐪嬬ず渚嬶細

    FOO ?= bar

鍏跺惈涔夋槸錛屽鏋淔OO娌℃湁琚畾涔夎繃錛岄偅涔堝彉閲廎OO鐨勫煎氨鏄?#8220;bar”錛屽鏋淔OO鍏堝墠琚畾涔夎繃錛岄偅涔堣繖鏉¤灝嗕粈涔堜篃涓嶅仛錛屽叾絳変環浜庯細

    ifeq ($(origin FOO), undefined)
      FOO = bar
    endif


涓夈佸彉閲忛珮綰х敤娉?/strong>

榪欓噷浠嬬粛涓ょ鍙橀噺鐨勯珮綰т嬌鐢ㄦ柟娉曪紝絎竴縐嶆槸鍙橀噺鍊肩殑鏇挎崲銆?/font>

鎴戜滑鍙互鏇挎崲鍙橀噺涓殑鍏辨湁鐨勯儴鍒嗭紝鍏舵牸寮忔槸“$(var:a=b)”鎴栨槸“${var:a=b}”錛屽叾鎰忔濇槸錛屾妸鍙橀噺“var”涓墍鏈変互“a”瀛椾覆“緇撳熬”鐨?#8220;a”鏇挎崲鎴?#8220;b”瀛椾覆銆傝繖閲岀殑“緇撳熬”鎰忔濇槸“絀烘牸”鎴栨槸“緇撴潫絎?#8221;銆?/font>

榪樻槸鐪嬩竴涓ず渚嬪惂錛?/font>

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

榪欎釜紺轟緥涓紝鎴戜滑鍏堝畾涔変簡涓涓?#8220;$(foo)”鍙橀噺錛岃岀浜岃鐨勬剰鎬濇槸鎶?#8220;$(foo)”涓墍鏈変互“.o”瀛椾覆“緇撳熬”鍏ㄩ儴鏇挎崲鎴?#8220;.c”錛屾墍浠ユ垜浠殑“$(bar)”鐨勫煎氨鏄?#8220;a.c b.c c.c”銆?/font>

鍙﹀涓縐嶅彉閲忔浛鎹㈢殑鎶鏈槸浠?#8220;闈欐佹ā寮?#8221;錛堝弬瑙佸墠闈㈢珷鑺傦級瀹氫箟鐨勶紝濡傦細

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

榪欎緷璧栦簬琚浛鎹㈠瓧涓蹭腑鐨勬湁鐩稿悓鐨勬ā寮忥紝妯″紡涓繀欏誨寘鍚竴涓?#8220;%”瀛楃錛岃繖涓緥瀛愬悓鏍瘋$(bar)鍙橀噺鐨勫間負“a.c b.c c.c”銆?

絎簩縐嶉珮綰х敤娉曟槸鈥斺?#8220;鎶婂彉閲忕殑鍊煎啀褰撴垚鍙橀噺”銆傚厛鐪嬩竴涓緥瀛愶細

    x = y
    y = z
    a := $($(x))

鍦ㄨ繖涓緥瀛愪腑錛?(x)鐨勫兼槸“y”錛屾墍浠?($(x))灝辨槸$(y)錛屼簬鏄?(a)鐨勫煎氨鏄?#8220;z”銆傦紙娉ㄦ剰錛屾槸“x=y”錛岃屼笉鏄?#8220;x=$(y)”錛?/font>

鎴戜滑榪樺彲浠ヤ嬌鐢ㄦ洿澶氱殑灞傛錛?/font>

    x = y
    y = z
    z = u
    a := $($($(x)))

榪欓噷鐨?(a)鐨勫兼槸“u”錛岀浉鍏崇殑鎺ㄥ鐣欑粰璇昏呰嚜宸卞幓鍋氬惂銆?/font>

璁╂垜浠啀澶嶆潅涓鐐癸紝浣跨敤涓?#8220;鍦ㄥ彉閲忓畾涔変腑浣跨敤鍙橀噺”鐨勭涓涓柟寮忥紝鏉ョ湅涓涓緥瀛愶細

    x = $(y)
    y = z
    z = Hello
    a := $($(x))

榪欓噷鐨?($(x))琚浛鎹㈡垚浜?($(y))錛屽洜涓?(y)鍊兼槸“z”錛屾墍浠ワ紝鏈緇堢粨鏋滄槸錛歛:=$(z)錛屼篃灝辨槸“Hello”銆?/font>

鍐嶅鏉備竴鐐癸紝鎴戜滑鍐嶅姞涓婂嚱鏁幫細

    x = variable1
    variable2 := Hello
    y = $(subst 1,2,$(x))
    z = y
    a := $($($(z)))

榪欎釜渚嬪瓙涓紝“$($($(z)))”鎵╁睍涓?#8220;$($(y))”錛岃屽叾鍐嶆琚墿灞曚負 “$($(subst 1,2,$(x)))”銆?(x)鐨勫兼槸“variable1”錛宻ubst鍑芥暟鎶?#8220;variable1”涓殑鎵鏈?#8220;1”瀛椾覆鏇挎崲鎴?#8220;2”瀛椾覆錛屼簬 鏄紝“variable1”鍙樻垚“variable2”錛屽啀鍙栧叾鍊鹼紝鎵浠ワ紝鏈緇堬紝$(a)鐨勫煎氨鏄?(variable2)鐨勫尖斺? “Hello”銆傦紙鍠旓紝濂戒笉瀹規槗錛?/font>

鍦ㄨ繖縐嶆柟寮忎腑錛屾垨瑕佸彲浠ヤ嬌鐢ㄥ涓彉閲忔潵緇勬垚涓涓彉閲忕殑鍚嶅瓧錛岀劧鍚庡啀鍙栧叾鍊鹼細

    first_second = Hello
    a = first
    b = second
    all = $($a_$b)

榪欓噷鐨?#8220;$a_$b”緇勬垚浜?#8220;first_second”錛屼簬鏄紝$(all)鐨勫煎氨鏄?#8220;Hello”銆?/font>

鍐嶆潵鐪嬬湅緇撳悎絎竴縐嶆妧鏈殑渚嬪瓙錛?/font>

    a_objects := a.o b.o c.o
    1_objects := 1.o 2.o 3.o

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

榪欎釜渚嬪瓙涓紝濡傛灉$(a1)鐨勫兼槸“a”鐨勮瘽錛岄偅涔堬紝$(sources)鐨勫煎氨鏄?#8220;a.c b.c c.c”錛涘鏋?(a1)鐨勫兼槸“1”錛岄偅涔?(sources)鐨勫兼槸“1.c 2.c 3.c”銆?/font>

鍐嶆潵鐪嬩竴涓繖縐嶆妧鏈拰“鍑芥暟”涓?#8220;鏉′歡璇彞”涓鍚屼嬌鐢ㄧ殑渚嬪瓙錛?/font>

    ifdef do_sort
    func := sort
    else
    func := strip
    endif

    bar := a d b g q c

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

榪欎釜紺轟緥涓紝濡傛灉瀹氫箟浜?#8220;do_sort”錛岄偅涔堬細foo := $(sort a d b g q c)錛屼簬鏄?(foo)鐨勫煎氨鏄?#8220;a b c d g q”錛岃屽鏋滄病鏈夊畾涔?#8220;do_sort”錛岄偅涔堬細foo := $(sort a d b g q c)錛岃皟鐢ㄧ殑灝辨槸strip鍑芥暟銆?/font>

褰撶劧錛?#8220;鎶婂彉閲忕殑鍊煎啀褰撴垚鍙橀噺”榪欑鎶鏈紝鍚屾牱鍙互鐢ㄥ湪鎿嶄綔絎︾殑宸﹁竟錛?/font>

    dir = foo
    $(dir)_sources := $(wildcard $(dir)/*.c)
    define $(dir)_print
    lpr $($(dir)_sources)
    endef

榪欎釜渚嬪瓙涓畾涔変簡涓変釜鍙橀噺錛?#8220;dir”錛?#8220;foo_sources”鍜?#8220;foo_print”銆?/font>


鍥涖佽拷鍔犲彉閲忓?/strong>

鎴戜滑鍙互浣跨敤“+=”鎿嶄綔絎︾粰鍙橀噺榪藉姞鍊鹼紝濡傦細

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

浜庢槸錛屾垜浠殑$(objects)鍊煎彉鎴愶細“main.o foo.o bar.o utils.o another.o”錛坅nother.o琚拷鍔犺繘鍘諱簡錛?/font>

浣跨敤“+=”鎿嶄綔絎︼紝鍙互妯℃嫙涓轟笅闈㈢殑榪欑渚嬪瓙錛?/font>

    objects = main.o foo.o bar.o utils.o
    objects := $(objects) another.o

鎵涓嶅悓鐨勬槸錛岀敤“+=”鏇翠負綆媧併?/font>

濡傛灉鍙橀噺涔嬪墠娌℃湁瀹氫箟榪囷紝閭d箞錛?#8220;+=”浼氳嚜鍔ㄥ彉鎴?#8220;=”錛屽鏋滃墠闈㈡湁鍙橀噺瀹氫箟錛岄偅涔?#8220;+=”浼氱戶鎵夸簬鍓嶆鎿嶄綔鐨勮祴鍊肩銆傚鏋滃墠涓嬈$殑鏄?#8220;:=”錛岄偅涔?#8220;+=”浼氫互“:=”浣滀負鍏惰祴鍊肩錛屽錛?/font>

    variable := value
    variable += more

絳変環浜庯細

    variable := value
    variable := $(variable) more

浣嗗鏋滄槸榪欑鎯呭喌錛?

    variable = value
    variable += more

鐢變簬鍓嶆鐨勮祴鍊肩鏄?#8220;=”錛屾墍浠?#8220;+=”涔熶細浠?#8220;=”鏉ュ仛涓鴻祴鍊鹼紝閭d箞宀備笉浼氬彂鐢熷彉閲忕殑閫掕ˉ褰掑畾涔夛紝榪欐槸寰堜笉濂界殑錛屾墍浠ake浼氳嚜鍔ㄤ負鎴戜滑瑙e喅榪欎釜闂錛屾垜浠笉蹇呮媴蹇冭繖涓棶棰樸?/font>


浜斻乷verride 鎸囩ず絎?/strong>

濡傛灉鏈夊彉閲忔槸閫氬父make鐨勫懡浠よ鍙傛暟璁劇疆鐨勶紝閭d箞Makefile涓榪欎釜鍙橀噺鐨勮祴鍊間細琚拷鐣ャ傚鏋滀綘鎯沖湪Makefile涓緗繖綾誨弬鏁扮殑鍊鹼紝閭d箞錛屼綘鍙互浣跨敤“override”鎸囩ず絎︺傚叾璇硶鏄細

    override <variable> = <value>

    override <variable> := <value>

褰撶劧錛屼綘榪樺彲浠ヨ拷鍔狅細

    override <variable> += <more text>

瀵逛簬澶氳鐨勫彉閲忓畾涔夛紝鎴戜滑鐢╠efine鎸囩ず絎︼紝鍦╠efine鎸囩ず絎﹀墠錛屼篃鍚屾牱鍙互浣跨敤ovveride鎸囩ず絎︼紝濡傦細

    override define foo
    bar
    endef

鍏佸琛屽彉閲?/strong>
 
榪樻湁涓縐嶈緗彉閲忓肩殑鏂規硶鏄嬌鐢╠efine鍏抽敭瀛椼備嬌鐢╠efine鍏抽敭瀛楄緗彉閲忕殑鍊煎彲浠ユ湁鎹㈣錛岃繖鏈夊埄浜庡畾涔変竴緋誨垪鐨勫懡浠わ紙鍓嶉潰鎴戜滑璁茶繃“鍛戒護鍖?#8221;鐨勬妧鏈氨鏄埄鐢ㄨ繖涓叧閿瓧錛夈?/font>

define鎸囩ず絎﹀悗闈㈣窡鐨勬槸鍙橀噺鐨勫悕瀛楋紝鑰岄噸璧蜂竴琛屽畾涔夊彉閲忕殑鍊鹼紝瀹氫箟鏄互endef鍏抽敭瀛? 緇撴潫銆傚叾宸ヤ綔鏂瑰紡鍜?#8220;=”鎿嶄綔絎︿竴鏍楓傚彉閲忕殑鍊煎彲浠ュ寘鍚嚱鏁般佸懡浠ゃ佹枃瀛楋紝鎴栨槸鍏跺畠鍙橀噺銆傚洜涓哄懡浠ら渶瑕佷互[Tab]閿紑澶達紝鎵浠ュ鏋滀綘鐢╠efine瀹氫箟 鐨勫懡浠ゅ彉閲忎腑娌℃湁浠Tab]閿紑澶達紝閭d箞make灝變笉浼氭妸鍏惰涓烘槸鍛戒護銆?/font>

涓嬮潰鐨勮繖涓ず渚嬪睍紺轟簡define鐨勭敤娉曪細

    define two-lines
    echo foo
    echo $(bar)
    endef


涓冦佺幆澧冨彉閲?/strong>

make榪愯鏃剁殑緋葷粺鐜鍙橀噺鍙互鍦╩ake寮濮嬭繍琛屾椂琚澆鍏ュ埌Makefile鏂囦歡涓紝浣嗘槸 濡傛灉Makefile涓凡瀹氫箟浜嗚繖涓彉閲忥紝鎴栨槸榪欎釜鍙橀噺鐢眒ake鍛戒護琛屽甫鍏ワ紝閭d箞緋葷粺鐨勭幆澧冨彉閲忕殑鍊煎皢琚鐩栥傦紙濡傛灉make鎸囧畾浜?#8220;-e”鍙傛暟錛岄偅 涔堬紝緋葷粺鐜鍙橀噺灝嗚鐩朚akefile涓畾涔夌殑鍙橀噺錛?/font>

鍥犳錛屽鏋滄垜浠湪鐜鍙橀噺涓緗簡“CFLAGS”鐜鍙橀噺錛岄偅涔堟垜浠氨鍙互鍦ㄦ墍鏈夌殑 Makefile涓嬌鐢ㄨ繖涓彉閲忎簡銆傝繖瀵逛簬鎴戜滑浣跨敤緇熶竴鐨勭紪璇戝弬鏁版湁姣旇緝澶х殑濂藉銆傚鏋淢akefile涓畾涔変簡CFLAGS錛岄偅涔堝垯浼氫嬌鐢? Makefile涓殑榪欎釜鍙橀噺錛屽鏋滄病鏈夊畾涔夊垯浣跨敤緋葷粺鐜鍙橀噺鐨勫鹼紝涓涓叡鎬у拰涓х殑緇熶竴錛屽緢鍍?#8220;鍏ㄥ眬鍙橀噺”鍜?#8220;灞閮ㄥ彉閲?#8221;鐨勭壒鎬с?/font>

褰搈ake宓屽璋冪敤鏃訛紙鍙傝鍓嶉潰鐨?#8220;宓屽璋冪敤”绔犺妭錛夛紝涓婂眰Makefile涓畾涔夌殑鍙橀噺浼氫互 緋葷粺鐜鍙橀噺鐨勬柟寮忎紶閫掑埌涓嬪眰鐨凪akefile涓傚綋鐒訛紝榛樿鎯呭喌涓嬶紝鍙湁閫氳繃鍛戒護琛岃緗殑鍙橀噺浼氳浼犻掋傝屽畾涔夊湪鏂囦歡涓殑鍙橀噺錛屽鏋滆鍚戜笅灞? Makefile浼犻掞紝鍒欓渶瑕佷嬌鐢╡xprot鍏抽敭瀛楁潵澹版槑銆傦紙鍙傝鍓嶉潰绔犺妭錛?/font>

褰撶劧錛屾垜騫朵笉鎺ㄨ崘鎶婅澶氱殑鍙橀噺閮藉畾涔夊湪緋葷粺鐜涓紝榪欐牱錛屽湪鎴戜滑鎵ц涓嶇敤鐨凪akefile鏃訛紝鎷ユ湁鐨勬槸鍚屼竴濂楃郴緇熷彉閲忥紝榪欏彲鑳戒細甯︽潵鏇村鐨勯夯鐑︺?/font>


鍏佺洰鏍囧彉閲?/strong>

鍓嶉潰鎴戜滑鎵璁茬殑鍦∕akefile涓畾涔夌殑鍙橀噺閮芥槸“鍏ㄥ眬鍙橀噺”錛屽湪鏁翠釜鏂囦歡錛屾垜浠兘鍙互璁塊棶榪欎簺鍙橀噺銆傚綋鐒訛紝“鑷姩鍖栧彉閲?#8221;闄ゅ錛屽“$<”絳夎繖縐嶇被閲忕殑鑷姩鍖栧彉閲忓氨灞炰簬“瑙勫垯鍨嬪彉閲?#8221;錛岃繖縐嶅彉閲忕殑鍊間緷璧栦簬瑙勫垯鐨勭洰鏍囧拰渚濊禆鐩爣鐨勫畾涔夈?/font>

褰撶劧錛屾垜鏍峰悓鏍峰彲浠ヤ負鏌愪釜鐩爣璁劇疆灞閮ㄥ彉閲忥紝榪欑鍙橀噺琚О涓?#8220;Target-specific Variable”錛屽畠鍙互鍜?#8220;鍏ㄥ眬鍙橀噺”鍚屽悕錛屽洜涓哄畠鐨勪綔鐢ㄨ寖鍥村彧鍦ㄨ繖鏉¤鍒欎互鍙婅繛甯﹁鍒欎腑錛屾墍浠ュ叾鍊間篃鍙湪浣滅敤鑼冨洿鍐呮湁鏁堛傝屼笉浼氬獎鍝嶈鍒欓摼浠ュ鐨勫叏灞鍙橀噺鐨勫箋?/font>

鍏惰娉曟槸錛?/font>

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

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

<variable-assignment>鍙互鏄墠闈㈣榪囩殑鍚勭璧嬪艱〃杈懼紡錛屽“=”銆?#8220;:=”銆?#8220;+=”鎴栨槸“錛?”銆傜浜屼釜璇硶鏄拡瀵逛簬make鍛戒護琛屽甫鍏ョ殑鍙橀噺錛屾垨鏄郴緇熺幆澧冨彉閲忋?/font>

榪欎釜鐗規ч潪甯哥殑鏈夌敤錛屽綋鎴戜滑璁劇疆浜嗚繖鏍蜂竴涓彉閲忥紝榪欎釜鍙橀噺浼氫綔鐢ㄥ埌鐢辮繖涓洰鏍囨墍寮曞彂鐨勬墍鏈夌殑瑙勫垯涓幓銆傚錛?/font>

    prog : CFLAGS = -g
    prog : prog.o foo.o bar.o
            $(CC) $(CFLAGS) prog.o foo.o bar.o

    prog.o : prog.c
            $(CC) $(CFLAGS) prog.c

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

    bar.o : bar.c
            $(CC) $(CFLAGS) bar.c
 
鍦ㄨ繖涓ず渚嬩腑錛屼笉綆″叏灞鐨?(CFLAGS)鐨勫兼槸浠涔堬紝鍦╬rog鐩爣錛屼互鍙婂叾鎵寮曞彂鐨勬墍鏈夎鍒欎腑錛坧rog.o foo.o bar.o鐨勮鍒欙級錛?(CFLAGS)鐨勫奸兘鏄?#8220;-g”


涔濄佹ā寮忓彉閲?/strong>

鍦℅NU鐨刴ake涓紝榪樻敮鎸佹ā寮忓彉閲忥紙Pattern-specific Variable錛夛紝閫氳繃涓婇潰鐨勭洰鏍囧彉閲忎腑錛屾垜浠煡閬擄紝鍙橀噺鍙互瀹氫箟鍦ㄦ煇涓洰鏍囦笂銆傛ā寮忓彉閲忕殑濂藉灝辨槸錛屾垜浠彲浠ョ粰瀹氫竴縐?#8220;妯″紡”錛屽彲浠ユ妸鍙橀噺瀹氫箟鍦ㄧ鍚堣繖縐嶆ā寮忕殑鎵鏈夌洰鏍囦笂銆?/font>

鎴戜滑鐭ラ亾錛宮ake鐨?#8220;妯″紡”涓鑸槸鑷沖皯鍚湁涓涓?#8220;%”鐨勶紝鎵浠ワ紝鎴戜滑鍙互浠ュ涓嬫柟寮忕粰鎵鏈変互[.o]緇撳熬鐨勭洰鏍囧畾涔夌洰鏍囧彉閲忥細

    %.o : CFLAGS = -O

鍚屾牱錛屾ā寮忓彉閲忕殑璇硶鍜?#8220;鐩爣鍙橀噺”涓鏍鳳細

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

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

override鍚屾牱鏄拡瀵逛簬緋葷粺鐜浼犲叆鐨勫彉閲忥紝鎴栨槸make鍛戒護琛屾寚瀹氱殑鍙橀噺銆?br> 


浣跨敤鏉′歡鍒ゆ柇
鈥斺斺斺斺斺?/strong>

浣跨敤鏉′歡鍒ゆ柇錛屽彲浠ヨmake鏍規嵁榪愯鏃剁殑涓嶅悓鎯呭喌閫夋嫨涓嶅悓鐨勬墽琛屽垎鏀傛潯浠惰〃杈懼紡鍙互鏄瘮杈冨彉閲忕殑鍊鹼紝鎴栨槸姣旇緝鍙橀噺鍜屽父閲忕殑鍊箋?/font>

涓銆佺ず渚?/strong>

涓嬮潰鐨勪緥瀛愶紝鍒ゆ柇$(CC)鍙橀噺鏄惁“gcc”錛屽鏋滄槸鐨勮瘽錛屽垯浣跨敤GNU鍑芥暟緙栬瘧鐩爣銆?/font>

    libs_for_gcc = -lgnu
    normal_libs =

    foo: $(objects)
    ifeq ($(CC),gcc)
            $(CC) -o foo $(objects) $(libs_for_gcc)
    else
            $(CC) -o foo $(objects) $(normal_libs)
    endif

鍙錛屽湪涓婇潰紺轟緥鐨勮繖涓鍒欎腑錛岀洰鏍?#8220;foo”鍙互鏍規嵁鍙橀噺“$(CC)”鍊兼潵閫夊彇涓嶅悓鐨勫嚱鏁板簱鏉ョ紪璇戠▼搴忋?/font>

鎴戜滑鍙互浠庝笂闈㈢殑紺轟緥涓湅鍒頒笁涓叧閿瓧錛歩feq銆乪lse鍜宔ndif銆俰feq鐨勬剰鎬濊〃紺? 鏉′歡璇彞鐨勫紑濮嬶紝騫舵寚瀹氫竴涓潯浠惰〃杈懼紡錛岃〃杈懼紡鍖呭惈涓や釜鍙傛暟錛屼互閫楀彿鍒嗛殧錛岃〃杈懼紡浠ュ渾鎷彿鎷搗銆俥lse琛ㄧず鏉′歡琛ㄨ揪寮忎負鍋囩殑鎯呭喌銆俥ndif琛ㄧず涓涓潯 浠惰鍙ョ殑緇撴潫錛屼換浣曚竴涓潯浠惰〃杈懼紡閮藉簲璇ヤ互endif緇撴潫銆?/font>

褰撴垜浠殑鍙橀噺$(CC)鍊兼槸“gcc”鏃訛紝鐩爣foo鐨勮鍒欐槸錛?/font>

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

鑰屽綋鎴戜滑鐨勫彉閲?(CC)鍊間笉鏄?#8220;gcc”鏃訛紙姣斿“cc”錛夛紝鐩爣foo鐨勮鍒欐槸錛?/font>

    foo: $(objects)
            $(CC) -o foo $(objects) $(normal_libs)

褰撶劧錛屾垜浠繕鍙互鎶婁笂闈㈢殑閭d釜渚嬪瓙鍐欏緱鏇寸畝媧佷竴浜涳細

    libs_for_gcc = -lgnu
    normal_libs =

    ifeq ($(CC),gcc)
      libs=$(libs_for_gcc)
    else
      libs=$(normal_libs)
    endif

    foo: $(objects)
            $(CC) -o foo $(objects) $(libs)


浜屻佽娉?/strong>

鏉′歡琛ㄨ揪寮忕殑璇硶涓猴細

    <conditional-directive>
    <text-if-true>
    endif

浠ュ強錛?/font>

    <conditional-directive>
    <text-if-true>
    else
    <text-if-false>
    endif

鍏朵腑<conditional-directive>琛ㄧず鏉′歡鍏抽敭瀛楋紝濡?#8220;ifeq”銆傝繖涓叧閿瓧鏈夊洓涓?/font>

絎竴涓槸鎴戜滑鍓嶉潰鎵瑙佽繃鐨?#8220;ifeq”

    ifeq (<arg1>, <arg2>)
    ifeq '<arg1>' '<arg2>'
    ifeq "<arg1>" "<arg2>"
    ifeq "<arg1>" '<arg2>'
    ifeq '<arg1>' "<arg2>"

姣旇緝鍙傛暟“arg1”鍜?#8220;arg2”鐨勫兼槸鍚︾浉鍚屻傚綋鐒訛紝鍙傛暟涓垜浠繕鍙互浣跨敤make鐨勫嚱鏁般傚錛?/font>

    ifeq ($(strip $(foo)),)
    <text-if-empty>
    endif

榪欎釜紺轟緥涓嬌鐢ㄤ簡“strip”鍑芥暟錛屽鏋滆繖涓嚱鏁扮殑榪斿洖鍊兼槸絀猴紙Empty錛夛紝閭d箞<text-if-empty>灝辯敓鏁堛?/font>

絎簩涓潯浠跺叧閿瓧鏄?#8220;ifneq”銆傝娉曟槸錛?/font>

    ifneq (<arg1>, <arg2>)
    ifneq '<arg1>' '<arg2>'
    ifneq "<arg1>" "<arg2>"
    ifneq "<arg1>" '<arg2>'
    ifneq '<arg1>' "<arg2>"

鍏舵瘮杈冨弬鏁?#8220;arg1”鍜?#8220;arg2”鐨勫兼槸鍚︾浉鍚岋紝濡傛灉涓嶅悓錛屽垯涓虹湡銆傚拰“ifeq”綾諱技銆?/font>

絎笁涓潯浠跺叧閿瓧鏄?#8220;ifdef”銆傝娉曟槸錛?/font>

    ifdef <variable-name>

濡傛灉鍙橀噺<variable-name>鐨勫奸潪絀猴紝閭e埌琛ㄨ揪寮忎負鐪熴傚惁鍒欙紝琛ㄨ揪寮? 涓哄亣銆傚綋鐒訛紝<variable-name>鍚屾牱鍙互鏄竴涓嚱鏁扮殑榪斿洖鍊箋傛敞鎰忥紝ifdef鍙槸嫻嬭瘯涓涓彉閲忔槸鍚︽湁鍊鹼紝鍏跺茍涓嶄細鎶婂彉閲忔墿灞曞埌 褰撳墠浣嶇疆銆傝繕鏄潵鐪嬩袱涓緥瀛愶細

    紺轟緥涓錛?br>    bar =
    foo = $(bar)
    ifdef foo
    frobozz = yes
    else
    frobozz = no
    endif

    紺轟緥浜岋細
    foo =
    ifdef foo
    frobozz = yes
    else
    frobozz = no
    endif

絎竴涓緥瀛愪腑錛?#8220;$(frobozz)”鍊兼槸“yes”錛岀浜屼釜鍒欐槸“no”銆?/font>

絎洓涓潯浠跺叧閿瓧鏄?#8220;ifndef”銆傚叾璇硶鏄細

    ifndef <variable-name>

榪欎釜鎴戝氨涓嶅璇翠簡錛屽拰“ifdef”鏄浉鍙嶇殑鎰忔濄?/font>

鍦?lt;conditional-directive>榪欎竴琛屼笂錛屽浣欑殑絀烘牸鏄鍏佽鐨勶紝浣嗘槸涓嶈兘浠Tab]閿仛涓哄紑濮嬶紙涓嶇劧灝辮璁や負鏄懡浠わ級銆傝屾敞閲婄“#”鍚屾牱涔熸槸瀹夊叏鐨勩?#8220;else”鍜?#8220;endif”涔熶竴鏍鳳紝鍙涓嶆槸浠Tab]閿紑濮嬪氨琛屼簡銆?/font>

鐗瑰埆娉ㄦ剰鐨勬槸錛宮ake鏄湪璇誨彇Makefile鏃跺氨璁$畻鏉′歡琛ㄨ揪寮忕殑鍊鹼紝騫舵牴鎹潯浠惰〃杈懼紡鐨勫兼潵閫夋嫨璇彞錛屾墍浠ワ紝浣犳渶濂戒笉瑕佹妸鑷姩鍖栧彉閲忥紙濡?#8220;$@”絳夛級鏀懼叆鏉′歡琛ㄨ揪寮忎腑錛屽洜涓鴻嚜鍔ㄥ寲鍙橀噺鏄湪榪愯鏃舵墠鏈夌殑銆?/font>

鑰屼笖錛屼負浜嗛伩鍏嶆販涔憋紝make涓嶅厑璁告妸鏁翠釜鏉′歡璇彞鍒嗘垚涓ら儴鍒嗘斁鍦ㄤ笉鍚岀殑鏂囦歡涓?/font>

浣跨敤鍑芥暟
鈥斺斺斺?/strong>

鍦∕akefile涓彲浠ヤ嬌鐢ㄥ嚱鏁版潵澶勭悊鍙橀噺錛屼粠鑰岃鎴戜滑鐨勫懡浠ゆ垨鏄鍒欐洿涓虹殑鐏墊椿鍜屽叿鏈夋櫤鑳姐俶ake鎵鏀寔鐨勫嚱鏁頒篃涓嶇畻寰堝錛屼笉榪囧凡緇忚凍澶熸垜浠殑鎿嶄綔浜嗐傚嚱鏁拌皟鐢ㄥ悗錛屽嚱鏁扮殑榪斿洖鍊煎彲浠ュ綋鍋氬彉閲忔潵浣跨敤銆?/font>


涓銆佸嚱鏁扮殑璋冪敤璇硶

鍑芥暟璋冪敤錛屽緢鍍忓彉閲忕殑浣跨敤錛屼篃鏄互“$”鏉ユ爣璇嗙殑錛屽叾璇硶濡備笅錛?/font>

    $(<function> <arguments>)

鎴栨槸

    ${<function> <arguments>}

榪欓噷錛?lt;function>灝辨槸鍑芥暟鍚嶏紝make鏀寔鐨勫嚱鏁頒笉 澶氥?lt;arguments>鏄嚱鏁扮殑鍙傛暟錛屽弬鏁伴棿浠ラ楀彿“,”鍒嗛殧錛岃屽嚱鏁板悕鍜屽弬鏁頒箣闂翠互“絀烘牸”鍒嗛殧銆傚嚱鏁拌皟鐢ㄤ互“$”寮澶達紝浠ュ渾鎷彿鎴栬姳 鎷彿鎶婂嚱鏁板悕鍜屽弬鏁版嫭璧楓傛劅瑙夊緢鍍忎竴涓彉閲忥紝鏄笉鏄紵鍑芥暟涓殑鍙傛暟鍙互浣跨敤鍙橀噺錛屼負浜嗛鏍肩殑緇熶竴錛屽嚱鏁板拰鍙橀噺鐨勬嫭鍙鋒渶濂戒竴鏍鳳紝濡備嬌鐢?#8220;$(subst a,b,$(x))”榪欐牱鐨勫艦寮忥紝鑰屼笉鏄?#8220;$(subst a,b,${x})”鐨勫艦寮忋傚洜涓虹粺涓浼氭洿娓呮錛屼篃浼氬噺灝戜竴浜涗笉蹇呰鐨勯夯鐑︺?/font>

榪樻槸鏉ョ湅涓涓ず渚嬶細

    comma:= ,
    empty:=
    space:= $(empty) $(empty)
    foo:= a b c
    bar:= $(subst $(space),$(comma),$(foo))

鍦ㄨ繖涓ず渚嬩腑錛?(comma)鐨勫兼槸涓涓楀彿銆?(space)浣跨敤浜?(empty)瀹氫箟 浜嗕竴涓┖鏍鹼紝$(foo)鐨勫兼槸“a b c”錛?(bar)鐨勫畾涔夌敤錛岃皟鐢ㄤ簡鍑芥暟“subst”錛岃繖鏄竴涓浛鎹㈠嚱鏁幫紝榪欎釜鍑芥暟鏈変笁涓弬鏁幫紝絎竴涓弬鏁版槸琚浛鎹㈠瓧涓詫紝絎簩涓弬鏁版槸鏇挎崲瀛椾覆錛岀涓変釜 鍙傛暟鏄浛鎹㈡搷浣滀綔鐢ㄧ殑瀛椾覆銆傝繖涓嚱鏁頒篃灝辨槸鎶?(foo)涓殑絀烘牸鏇挎崲鎴愰楀彿錛屾墍浠?(bar)鐨勫兼槸“a,b,c”銆?/font>


浜屻佸瓧絎︿覆澶勭悊鍑芥暟

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

    鍚嶇О錛氬瓧絎︿覆鏇挎崲鍑芥暟鈥斺攕ubst銆?br>    鍔熻兘錛氭妸瀛椾覆<text>涓殑<from>瀛楃涓叉浛鎹㈡垚<to>銆?br>    榪斿洖錛氬嚱鏁拌繑鍥炶鏇挎崲榪囧悗鐨勫瓧絎︿覆銆?/font>

    紺轟緥錛?br>       
        $(subst ee,EE,feet on the street)錛?br>       
        鎶?#8220;feet on the street”涓殑“ee”鏇挎崲鎴?#8220;EE”錛岃繑鍥炵粨鏋滄槸“fEEt on the strEEt”銆?/font>


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

    鍚嶇О錛氭ā寮忓瓧絎︿覆鏇挎崲鍑芥暟鈥斺攑atsubst銆?br>    鍔熻兘錛氭煡鎵?lt;text>涓殑鍗曡瘝錛堝崟璇嶄互“絀烘牸”銆?#8220;Tab”鎴?#8220;鍥炶濺”“鎹㈣”鍒嗛殧錛夋槸鍚︾鍚堟ā寮?lt;pattern>錛屽鏋滃尮 閰嶇殑璇濓紝鍒欎互<replacement>鏇挎崲銆傝繖閲岋紝<pattern>鍙互鍖呮嫭閫氶厤絎?#8220;%”錛岃〃紺轟換鎰忛暱搴︾殑瀛椾覆銆傚 鏋?lt;replacement>涓篃鍖呭惈“%”錛岄偅涔堬紝<replacement>涓殑榪欎釜“%”灝? 鏄?lt;pattern>涓殑閭d釜“%”鎵浠h〃鐨勫瓧涓層傦紙鍙互鐢?#8220;\”鏉ヨ漿涔夛紝浠?#8220;\%”鏉ヨ〃紺虹湡瀹炲惈涔夌殑“%”瀛楃錛?br>    榪斿洖錛氬嚱鏁拌繑鍥炶鏇挎崲榪囧悗鐨勫瓧絎︿覆銆?/font>

    紺轟緥錛?/font>

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

        鎶婂瓧涓?#8220;x.c.c bar.c”絎﹀悎妯″紡[%.c]鐨勫崟璇嶆浛鎹㈡垚[%.o]錛岃繑鍥炵粨鏋滄槸“x.c.o bar.o”

    澶囨敞錛?/font>

        榪欏拰鎴戜滑鍓嶉潰“鍙橀噺绔犺妭”璇磋繃鐨勭浉鍏崇煡璇嗘湁鐐圭浉浼箋傚錛?br>
        “$(var:<pattern>=<replacement>)”
         鐩稿綋浜?br>        “$(patsubst <pattern>,<replacement>,$(var))”錛?br>
         鑰?#8220;$(var: <suffix>=<replacement>)”
         鍒欑浉褰撲簬
         “$(patsubst %<suffix>,%<replacement>,$(var))”銆?br>
         渚嬪鏈夛細objects = foo.o bar.o baz.o錛?br>         閭d箞錛?#8220;$(objects:.o=.c)”鍜?#8220;$(patsubst %.o,%.c,$(objects))”鏄竴鏍風殑銆?/font>

$(strip <string>)

    鍚嶇О錛氬幓絀烘牸鍑芥暟鈥斺攕trip銆?br>    鍔熻兘錛氬幓鎺?lt;string>瀛椾覆涓紑澶村拰緇撳熬鐨勭┖瀛楃銆?br>    榪斿洖錛氳繑鍥炶鍘繪帀絀烘牸鐨勫瓧絎︿覆鍊箋?br>    紺轟緥錛?br>       
        $(strip a b c )

        鎶婂瓧涓?#8220;a b c ”鍘誨埌寮澶村拰緇撳熬鐨勭┖鏍鹼紝緇撴灉鏄?#8220;a b c”銆?/font>

$(findstring <find>,<in>)

    鍚嶇О錛氭煡鎵懼瓧絎︿覆鍑芥暟鈥斺攆indstring銆?br>    鍔熻兘錛氬湪瀛椾覆<in>涓煡鎵?lt;find>瀛椾覆銆?br>    榪斿洖錛氬鏋滄壘鍒幫紝閭d箞榪斿洖<find>錛屽惁鍒欒繑鍥炵┖瀛楃涓層?br>    紺轟緥錛?/font>

        $(findstring a,a b c)
        $(findstring a,b c)

        絎竴涓嚱鏁拌繑鍥?#8220;a”瀛楃涓詫紝絎簩涓繑鍥?#8220;”瀛楃涓詫紙絀哄瓧絎︿覆錛?/font>

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

    鍚嶇О錛氳繃婊ゅ嚱鏁扳斺攆ilter銆?br>    鍔熻兘錛氫互<pattern>妯″紡榪囨護<text>瀛楃涓蹭腑鐨勫崟璇嶏紝淇濈暀絎﹀悎妯″紡<pattern>鐨勫崟璇嶃傚彲浠ユ湁澶氫釜妯″紡銆?br>    榪斿洖錛氳繑鍥炵鍚堟ā寮?lt;pattern>鐨勫瓧涓層?br>    紺轟緥錛?/font>

        sources := foo.c bar.c baz.s ugh.h
        foo: $(sources)
                cc $(filter %.c %.s,$(sources)) -o foo

        $(filter %.c %.s,$(sources))榪斿洖鐨勫兼槸“foo.c bar.c baz.s”銆?/font>

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

    鍚嶇О錛氬弽榪囨護鍑芥暟鈥斺攆ilter-out銆?br>    鍔熻兘錛氫互<pattern>妯″紡榪囨護<text>瀛楃涓蹭腑鐨勫崟璇嶏紝鍘婚櫎絎﹀悎妯″紡<pattern>鐨勫崟璇嶃傚彲浠ユ湁澶氫釜妯″紡銆?br>    榪斿洖錛氳繑鍥炰笉絎﹀悎妯″紡<pattern>鐨勫瓧涓層?br>    紺轟緥錛?/font>

        objects=main1.o foo.o main2.o bar.o
        mains=main1.o main2.o
       
        $(filter-out $(mains),$(objects)) 榪斿洖鍊兼槸“foo.o bar.o”銆?br>       
$(sort <list>)

    鍚嶇О錛氭帓搴忓嚱鏁扳斺攕ort銆?br>    鍔熻兘錛氱粰瀛楃涓?lt;list>涓殑鍗曡瘝鎺掑簭錛堝崌搴忥級銆?br>    榪斿洖錛氳繑鍥炴帓搴忓悗鐨勫瓧絎︿覆銆?br>    紺轟緥錛?(sort foo bar lose)榪斿洖“bar foo lose” 銆?br>    澶囨敞錛歴ort鍑芥暟浼氬幓鎺?lt;list>涓浉鍚岀殑鍗曡瘝銆?/font>

$(word <n>,<text>)

    鍚嶇О錛氬彇鍗曡瘝鍑芥暟鈥斺攚ord銆?br>    鍔熻兘錛氬彇瀛楃涓?lt;text>涓<n>涓崟璇嶃傦紙浠庝竴寮濮嬶級
    榪斿洖錛氳繑鍥炲瓧絎︿覆<text>涓<n>涓崟璇嶃傚鏋?lt;n>姣?lt;text>涓殑鍗曡瘝鏁拌澶э紝閭d箞榪斿洖絀哄瓧絎︿覆銆?br>    紺轟緥錛?(word 2, foo bar baz)榪斿洖鍊兼槸“bar”銆?/font>

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

    鍚嶇О錛氬彇鍗曡瘝涓插嚱鏁扳斺攚ordlist銆?br>    鍔熻兘錛氫粠瀛楃涓?lt;text>涓彇浠?lt;s>寮濮嬪埌<e>鐨勫崟璇嶄覆銆?lt;s>鍜?lt;e>鏄竴涓暟瀛椼?br>    榪斿洖錛氳繑鍥炲瓧絎︿覆<text>涓粠<s>鍒?lt;e>鐨勫崟璇嶅瓧涓層傚鏋?lt;s>姣?lt;text>涓? 鐨勫崟璇嶆暟瑕佸ぇ錛岄偅涔堣繑鍥炵┖瀛楃涓層傚鏋?lt;e>澶т簬<text>鐨勫崟璇嶆暟錛岄偅涔堣繑鍥炰粠<s>寮濮嬶紝 鍒?lt;text>緇撴潫鐨勫崟璇嶄覆銆?br>    紺轟緥錛?$(wordlist 2, 3, foo bar baz)榪斿洖鍊兼槸“bar baz”銆?/font>

$(words <text>)

    鍚嶇О錛氬崟璇嶄釜鏁扮粺璁″嚱鏁扳斺攚ords銆?br>    鍔熻兘錛氱粺璁?lt;text>涓瓧絎︿覆涓殑鍗曡瘝涓暟銆?br>    榪斿洖錛氳繑鍥?lt;text>涓殑鍗曡瘝鏁般?br>    紺轟緥錛?(words, foo bar baz)榪斿洖鍊兼槸“3”銆?br>    澶囨敞錛氬鏋滄垜浠鍙?lt;text>涓渶鍚庣殑涓涓崟璇嶏紝鎴戜滑鍙互榪欐牱錛?(word $(words <text>),<text>)銆?/font>

$(firstword <text>)

    鍚嶇О錛氶鍗曡瘝鍑芥暟鈥斺攆irstword銆?br>    鍔熻兘錛氬彇瀛楃涓?lt;text>涓殑絎竴涓崟璇嶃?br>    榪斿洖錛氳繑鍥炲瓧絎︿覆<text>鐨勭涓涓崟璇嶃?br>    紺轟緥錛?(firstword foo bar)榪斿洖鍊兼槸“foo”銆?br>    澶囨敞錛氳繖涓嚱鏁板彲浠ョ敤word鍑芥暟鏉ュ疄鐜幫細$(word 1,<text>)銆?/font>

浠ヤ笂錛屾槸鎵鏈夌殑瀛楃涓叉搷浣滃嚱鏁幫紝濡傛灉鎼厤娣峰悎浣跨敤錛屽彲浠ュ畬鎴愭瘮杈冨鏉傜殑鍔熻兘銆傝繖閲岋紝涓句竴涓幇瀹炰腑搴旂敤鐨勪緥瀛愩傛垜浠煡閬擄紝make浣跨敤“VPATH”鍙橀噺鏉ユ寚瀹?#8220;渚濊禆鏂囦歡”鐨勬悳绱㈣礬寰勩備簬鏄紝鎴戜滑鍙互鍒╃敤榪欎釜鎼滅儲璺緞鏉ユ寚瀹氱紪璇戝櫒瀵瑰ご鏂囦歡鐨勬悳绱㈣礬寰勫弬鏁癈FLAGS錛屽錛?/font>

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

    濡傛灉鎴戜滑鐨?#8220;$(VPATH)”鍊兼槸“src:../headers”錛岄偅涔?#8220;$(patsubst %,-I%,$(subst :, ,$(VPATH)))”灝嗚繑鍥?#8220;-Isrc -I../headers”錛岃繖姝f槸cc鎴杇cc鎼滅儲澶存枃浠惰礬寰勭殑鍙傛暟銆?/font>


涓夈佹枃浠跺悕鎿嶄綔鍑芥暟

涓嬮潰鎴戜滑瑕佷粙緇嶇殑鍑芥暟涓昏鏄鐞嗘枃浠跺悕鐨勩傛瘡涓嚱鏁扮殑鍙傛暟瀛楃涓查兘浼氳褰撳仛涓涓垨鏄竴緋誨垪鐨勬枃浠跺悕鏉ュ寰呫?/font>

$(dir <names...>)

    鍚嶇О錛氬彇鐩綍鍑芥暟鈥斺攄ir銆?br>    鍔熻兘錛氫粠鏂囦歡鍚嶅簭鍒?lt;names>涓彇鍑虹洰褰曢儴鍒嗐傜洰褰曢儴鍒嗘槸鎸囨渶鍚庝竴涓弽鏂滄潬錛?#8220;/”錛変箣鍓嶇殑閮ㄥ垎銆傚鏋滄病鏈夊弽鏂滄潬錛岄偅涔堣繑鍥?#8220;./”銆?br>    榪斿洖錛氳繑鍥炴枃浠跺悕搴忓垪<names>鐨勭洰褰曢儴鍒嗐?br>    紺轟緥錛?$(dir src/foo.c hacks)榪斿洖鍊兼槸“src/ ./”銆?/font>

$(notdir <names...>)

    鍚嶇О錛氬彇鏂囦歡鍑芥暟鈥斺攏otdir銆?br>    鍔熻兘錛氫粠鏂囦歡鍚嶅簭鍒?lt;names>涓彇鍑洪潪鐩綍閮ㄥ垎銆傞潪鐩綍閮ㄥ垎鏄寚鏈鍚庝竴涓弽鏂滄潬錛?#8220;/”錛変箣鍚庣殑閮ㄥ垎銆?br>    榪斿洖錛氳繑鍥炴枃浠跺悕搴忓垪<names>鐨勯潪鐩綍閮ㄥ垎銆?br>    紺轟緥錛?$(notdir src/foo.c hacks)榪斿洖鍊兼槸“foo.c hacks”銆?br> 
$(suffix <names...>)
   
    鍚嶇О錛氬彇鍚庣紑鍑芥暟鈥斺攕uffix銆?br>    鍔熻兘錛氫粠鏂囦歡鍚嶅簭鍒?lt;names>涓彇鍑哄悇涓枃浠跺悕鐨勫悗緙銆?br>    榪斿洖錛氳繑鍥炴枃浠跺悕搴忓垪<names>鐨勫悗緙搴忓垪錛屽鏋滄枃浠舵病鏈夊悗緙錛屽垯榪斿洖絀哄瓧涓層?br>    紺轟緥錛?(suffix src/foo.c src-1.0/bar.c hacks)榪斿洖鍊兼槸“.c .c”銆?/font>

$(basename <names...>)

    鍚嶇О錛氬彇鍓嶇紑鍑芥暟鈥斺攂asename銆?br>    鍔熻兘錛氫粠鏂囦歡鍚嶅簭鍒?lt;names>涓彇鍑哄悇涓枃浠跺悕鐨勫墠緙閮ㄥ垎銆?br>    榪斿洖錛氳繑鍥炴枃浠跺悕搴忓垪<names>鐨勫墠緙搴忓垪錛屽鏋滄枃浠舵病鏈夊墠緙錛屽垯榪斿洖絀哄瓧涓層?br>    紺轟緥錛?(basename src/foo.c src-1.0/bar.c hacks)榪斿洖鍊兼槸“src/foo src-1.0/bar hacks”銆?/font>

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

    鍚嶇О錛氬姞鍚庣紑鍑芥暟鈥斺攁ddsuffix銆?br>    鍔熻兘錛氭妸鍚庣紑<suffix>鍔犲埌<names>涓殑姣忎釜鍗曡瘝鍚庨潰銆?br>    榪斿洖錛氳繑鍥炲姞榪囧悗緙鐨勬枃浠跺悕搴忓垪銆?br>    紺轟緥錛?(addsuffix .c,foo bar)榪斿洖鍊兼槸“foo.c bar.c”銆?/font>

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

    鍚嶇О錛氬姞鍓嶇紑鍑芥暟鈥斺攁ddprefix銆?br>    鍔熻兘錛氭妸鍓嶇紑<prefix>鍔犲埌<names>涓殑姣忎釜鍗曡瘝鍚庨潰銆?br>    榪斿洖錛氳繑鍥炲姞榪囧墠緙鐨勬枃浠跺悕搴忓垪銆?br>    紺轟緥錛?(addprefix src/,foo bar)榪斿洖鍊兼槸“src/foo src/bar”銆?/font>

$(join <list1>,<list2>)

    鍚嶇О錛氳繛鎺ュ嚱鏁扳斺攋oin銆?br>    鍔熻兘錛氭妸<list2>涓殑鍗曡瘝瀵瑰簲鍦板姞鍒?lt;list1>鐨勫崟璇嶅悗闈€傚鏋?lt;list1>鐨勫崟璇嶄釜鏁拌 姣?lt;list2>鐨勫錛岄偅涔堬紝<list1>涓殑澶氬嚭鏉ョ殑鍗曡瘝灝嗕繚鎸佸師鏍楓傚鏋?lt;list2>鐨勫崟璇嶄釜鏁拌 姣?lt;list1>澶氾紝閭d箞錛?lt;list2>澶氬嚭鏉ョ殑鍗曡瘝灝嗚澶嶅埗鍒?lt;list2>涓?br>    榪斿洖錛氳繑鍥炶繛鎺ヨ繃鍚庣殑瀛楃涓層?br>    紺轟緥錛?(join aaa bbb , 111 222 333)榪斿洖鍊兼槸“aaa111 bbb222 333”銆?/font>



]]>
鍐檓akefile鈥斺斾簩http://www.shnenglu.com/yehongly/archive/2008/09/18/62199.html鑼?/dc:creator>鑼?/author>Thu, 18 Sep 2008 09:41:00 GMThttp://www.shnenglu.com/yehongly/archive/2008/09/18/62199.htmlhttp://www.shnenglu.com/yehongly/comments/62199.htmlhttp://www.shnenglu.com/yehongly/archive/2008/09/18/62199.html#Feedback0http://www.shnenglu.com/yehongly/comments/commentRss/62199.htmlhttp://www.shnenglu.com/yehongly/services/trackbacks/62199.html瑙勫垯鍖呭惈涓や釜閮ㄥ垎錛屼竴涓槸渚濊禆鍏崇郴錛屼竴涓槸鐢熸垚鐩爣鐨勬柟娉曘?/font>

鍦∕akefile涓紝瑙勫垯鐨勯『搴忔槸寰堥噸瑕佺殑錛屽洜涓猴紝Makefile涓彧搴旇鏈変竴涓渶緇堢洰 鏍囷紝鍏跺畠鐨勭洰鏍囬兘鏄榪欎釜鐩爣鎵榪炲甫鍑烘潵鐨勶紝鎵浠ヤ竴瀹氳璁﹎ake鐭ラ亾浣犵殑鏈緇堢洰鏍囨槸浠涔堛備竴鑸潵璇達紝瀹氫箟鍦∕akefile涓殑鐩爣鍙兘浼氭湁寰堝錛屼絾鏄? 絎竴鏉¤鍒欎腑鐨勭洰鏍囧皢琚‘绔嬩負鏈緇堢殑鐩爣銆傚鏋滅涓鏉¤鍒欎腑鐨勭洰鏍囨湁寰堝涓紝閭d箞錛岀涓涓洰鏍囦細鎴愪負鏈緇堢殑鐩爣銆俶ake鎵瀹屾垚鐨勪篃灝辨槸榪欎釜鐩爣銆?/font>

濂戒簡錛岃繕鏄鎴戜滑鏉ョ湅涓鐪嬪浣曚功鍐欒鍒欍?/font>


涓銆佽鍒欎婦渚?/strong>

    foo.o : foo.c defs.h       # foo妯″潡
            cc -c -g foo.c

鐪嬪埌榪欎釜渚嬪瓙錛屽悇浣嶅簲璇ヤ笉鏄緢闄岀敓浜嗭紝鍓嶉潰涔熷凡璇磋繃錛宖oo.o鏄垜浠殑鐩爣錛宖oo.c鍜宒efs.h鏄洰鏍囨墍渚濊禆鐨勬簮鏂囦歡錛岃屽彧鏈変竴涓懡浠?#8220;cc -c -g foo.c”錛堜互Tab閿紑澶達級銆傝繖涓鍒欏憡璇夋垜浠袱浠朵簨錛?/font>

    1銆佹枃浠剁殑渚濊禆鍏崇郴錛宖oo.o渚濊禆浜巉oo.c鍜宒efs.h鐨勬枃浠訛紝濡傛灉foo.c鍜宒efs.h鐨勬枃浠舵棩鏈熻姣攆oo.o鏂囦歡鏃ユ湡瑕佹柊錛屾垨鏄痜oo.o涓嶅瓨鍦紝閭d箞渚濊禆鍏崇郴鍙戠敓銆?br>    2銆佸鏋滅敓鎴愶紙鎴栨洿鏂幫級foo.o鏂囦歡銆備篃灝辨槸閭d釜cc鍛戒護錛屽叾璇存槑浜嗭紝濡備綍鐢熸垚foo.o榪欎釜鏂囦歡銆傦紙褰撶劧foo.c鏂囦歡include浜哾efs.h鏂囦歡錛?/font>


浜屻佽鍒欑殑璇硶

      targets : prerequisites
        command
        ...

      鎴栨槸榪欐牱錛?

      targets : prerequisites ; command
            command
            ...

targets鏄枃浠跺悕錛屼互絀烘牸鍒嗗紑錛屽彲浠ヤ嬌鐢ㄩ氶厤絎︺備竴鑸潵璇達紝鎴戜滑鐨勭洰鏍囧熀鏈笂鏄竴涓枃浠訛紝浣嗕篃鏈夊彲鑳芥槸澶氫釜鏂囦歡銆?/font>

command鏄懡浠よ錛屽鏋滃叾涓嶄笌“target:prerequisites”鍦ㄤ竴琛岋紝閭d箞錛屽繀欏諱互[Tab閿甝寮澶達紝濡傛灉鍜宲rerequisites鍦ㄤ竴琛岋紝閭d箞鍙互鐢ㄥ垎鍙峰仛涓哄垎闅斻傦紙瑙佷笂錛?/font>

prerequisites涔熷氨鏄洰鏍囨墍渚濊禆鐨勬枃浠訛紙鎴栦緷璧栫洰鏍囷級銆傚鏋滃叾涓殑鏌愪釜鏂囦歡瑕佹瘮鐩爣鏂囦歡瑕佹柊錛岄偅涔堬紝鐩爣灝辮璁や負鏄?#8220;榪囨椂鐨?#8221;錛岃璁や負鏄渶瑕侀噸鐢熸垚鐨勩傝繖涓湪鍓嶉潰宸茬粡璁茶繃浜嗐?/font>

濡傛灉鍛戒護澶暱錛屼綘鍙互浣跨敤鍙嶆枩妗嗭紙‘\’錛変綔涓烘崲琛岀銆俶ake瀵逛竴琛屼笂鏈夊灝戜釜瀛楃娌℃湁闄愬埗銆傝鍒欏憡璇塵ake涓や歡浜嬶紝鏂囦歡鐨勪緷璧栧叧緋誨拰濡備綍鎴愭垚鐩爣鏂囦歡銆?/font>

涓鑸潵璇達紝make浼氫互UNIX鐨勬爣鍑哠hell錛屼篃灝辨槸/bin/sh鏉ユ墽琛屽懡浠ゃ?/font>


涓夈佸湪瑙勫垯涓嬌鐢ㄩ氶厤絎?/strong>

濡傛灉鎴戜滑鎯沖畾涔変竴緋誨垪姣旇緝綾諱技鐨勬枃浠訛紝鎴戜滑寰堣嚜鐒跺湴灝辨兂璧蜂嬌鐢ㄩ氶厤絎︺俶ake鏀寔涓夊悇閫氶厤絎︼細“*”錛?#8220;?”鍜?#8220;[...]”銆傝繖鏄拰Unix鐨凚-Shell鏄浉鍚岀殑銆?/font>

娉㈡氮鍙鳳紙“~”錛夊瓧絎﹀湪鏂囦歡鍚嶄腑涔熸湁姣旇緝鐗規畩鐨勭敤閫斻傚鏋滄槸“~/test”錛岃繖灝辮〃紺哄綋鍓嶇敤 鎴風殑$HOME鐩綍涓嬬殑test鐩綍銆傝?#8220;~hchen/test”鍒欒〃紺虹敤鎴穐chen鐨勫涓葷洰褰曚笅鐨則est鐩綍銆傦紙榪欎簺閮芥槸Unix涓嬬殑灝忕煡璇? 浜嗭紝make涔熸敮鎸侊級鑰屽湪Windows鎴栨槸MS-DOS涓嬶紝鐢ㄦ埛娌℃湁瀹夸富鐩綍錛岄偅涔堟嘗嫻彿鎵鎸囩殑鐩綍鍒欐牴鎹幆澧冨彉閲?#8220;HOME”鑰屽畾銆?/font>

閫氶厤絎︿唬鏇夸簡浣犱竴緋誨垪鐨勬枃浠訛紝濡?#8220;*.c”琛ㄧず鎵浠ュ悗緙涓篶鐨勬枃浠躲備竴涓渶瑕佹垜浠敞鎰忕殑鏄紝濡傛灉鎴戜滑鐨勬枃浠跺悕涓湁閫氶厤絎︼紝濡傦細“*”錛岄偅涔堝彲浠ョ敤杞箟瀛楃“\”錛屽“\*”鏉ヨ〃紺虹湡瀹炵殑“*”瀛楃錛岃屼笉鏄換鎰忛暱搴︾殑瀛楃涓層?/font>

濂藉惂錛岃繕鏄厛鏉ョ湅鍑犱釜渚嬪瓙鍚э細

    clean:
         rm -f *.o

    涓婇潰榪欎釜渚嬪瓙鎴戜笉涓嶅璇翠簡錛岃繖鏄搷浣滅郴緇烻hell鎵鏀寔鐨勯氶厤絎︺傝繖鏄湪鍛戒護涓殑閫氶厤絎︺?/font>

    print: *.c
         lpr -p $?
         touch print

    涓婇潰榪欎釜渚嬪瓙璇存槑浜嗛氶厤絎︿篃鍙互鍦ㄦ垜浠殑瑙勫垯涓紝鐩爣print渚濊禆浜庢墍鏈夌殑[.c]鏂囦歡銆傚叾涓殑“$?”鏄竴涓嚜鍔ㄥ寲鍙橀噺錛屾垜浼氬湪鍚庨潰緇欎綘璁茶堪銆?/font>

    objects = *.o

    涓婇潰榪欎釜渚嬪瓙錛岃〃紺轟簡錛岄氱鍚屾牱鍙互鐢ㄥ湪鍙橀噺涓傚茍涓嶆槸璇碵*.o]浼氬睍寮錛屼笉錛乷bjects鐨勫煎氨鏄?#8220;*.o”銆侻akefile涓殑鍙橀噺鍏跺疄灝辨槸 C/C++涓殑瀹忋傚鏋滀綘瑕佽閫氶厤絎﹀湪鍙橀噺涓睍寮錛屼篃灝辨槸璁﹐bjects鐨勫兼槸鎵鏈塠.o]鐨勬枃浠跺悕鐨勯泦鍚堬紝閭d箞錛屼綘鍙互榪欐牱錛?/font>

    objects := $(wildcard *.o)

榪欑鐢ㄦ硶鐢卞叧閿瓧“wildcard”鎸囧嚭錛屽叧浜嶮akefile鐨勫叧閿瓧錛屾垜浠皢鍦ㄥ悗闈㈣璁恒?/font>


鍥涖佹枃浠舵悳瀵?/strong>

鍦ㄤ竴浜涘ぇ鐨勫伐紼嬩腑錛屾湁澶ч噺鐨勬簮鏂囦歡錛屾垜浠氬父鐨勫仛娉曟槸鎶婅繖璁稿鐨勬簮鏂囦歡鍒嗙被錛屽茍瀛樻斁鍦ㄤ笉鍚岀殑鐩綍涓傛墍浠ワ紝褰搈ake闇瑕佸幓鎵懼鏂囦歡鐨勪緷璧栧叧緋繪椂錛屼綘鍙互鍦ㄦ枃浠跺墠鍔犱笂璺緞錛屼絾鏈濂界殑鏂規硶鏄妸涓涓礬寰勫憡璇塵ake錛岃make鍦ㄨ嚜鍔ㄥ幓鎵俱?/font>

Makefile鏂囦歡涓殑鐗規畩鍙橀噺“VPATH”灝辨槸瀹屾垚榪欎釜鍔熻兘鐨勶紝濡傛灉娌℃湁鎸囨槑榪欎釜鍙橀噺錛宮ake鍙細鍦ㄥ綋鍓嶇殑鐩綍涓幓鎵懼渚濊禆鏂囦歡鍜岀洰鏍囨枃浠躲傚鏋滃畾涔変簡榪欎釜鍙橀噺錛岄偅涔堬紝make灝變細鍦ㄥ綋褰撳墠鐩綍鎵句笉鍒扮殑鎯呭喌涓嬶紝鍒版墍鎸囧畾鐨勭洰褰曚腑鍘繪壘瀵繪枃浠朵簡銆?/font>

    VPATH = src:../headers

涓婇潰鐨勭殑瀹氫箟鎸囧畾涓や釜鐩綍錛?#8220;src”鍜?#8220;../headers”錛宮ake浼氭寜鐓ц繖涓『搴忚繘琛屾悳绱€傜洰褰曠敱“鍐掑彿”鍒嗛殧銆傦紙褰撶劧錛屽綋鍓嶇洰褰曟案榪滄槸鏈楂樹紭鍏堟悳绱㈢殑鍦版柟錛?/font>

鍙︿竴涓緗枃浠舵悳绱㈣礬寰勭殑鏂規硶鏄嬌鐢╩ake鐨?#8220;vpath”鍏抽敭瀛楋紙娉ㄦ剰錛屽畠鏄叏灝忓啓鐨勶級錛? 榪欎笉鏄彉閲忥紝榪欐槸涓涓猰ake鐨勫叧閿瓧錛岃繖鍜屼笂闈㈡彁鍒扮殑閭d釜VPATH鍙橀噺寰堢被浼鹼紝浣嗘槸瀹冩洿涓虹伒媧匯傚畠鍙互鎸囧畾涓嶅悓鐨勬枃浠跺湪涓嶅悓鐨勬悳绱㈢洰褰曚腑銆傝繖鏄竴涓緢 鐏墊椿鐨勫姛鑳姐傚畠鐨勪嬌鐢ㄦ柟娉曟湁涓夌錛?/font>

    1銆乿path <pattern> <directories>

    涓虹鍚堟ā寮?lt;pattern>鐨勬枃浠舵寚瀹氭悳绱㈢洰褰?lt;directories>銆?/font>

    2銆乿path <pattern>

    娓呴櫎絎﹀悎妯″紡<pattern>鐨勬枃浠剁殑鎼滅儲鐩綍銆?/font>

    3銆乿path

    娓呴櫎鎵鏈夊凡琚緗ソ浜嗙殑鏂囦歡鎼滅儲鐩綍銆?/font>

vapth浣跨敤鏂規硶涓殑<pattern>闇瑕佸寘鍚?#8220;%”瀛楃銆?#8220;%”鐨勬剰鎬濇槸鍖? 閰嶉浂鎴栬嫢騫插瓧絎︼紝渚嬪錛?#8220;%.h”琛ㄧず鎵鏈変互“.h”緇撳熬鐨勬枃浠躲?lt;pattern>鎸囧畾浜嗚鎼滅儲鐨勬枃浠墮泦錛? 鑰?lt;directories>鍒欐寚瀹氫簡<pattern>鐨勬枃浠墮泦鐨勬悳绱㈢殑鐩綍銆備緥濡傦細

    vpath %.h ../headers

璇ヨ鍙ヨ〃紺猴紝瑕佹眰make鍦?#8220;../headers”鐩綍涓嬫悳绱㈡墍鏈変互“.h”緇撳熬鐨勬枃浠躲傦紙濡傛灉鏌愭枃浠跺湪褰撳墠鐩綍娌℃湁鎵懼埌鐨勮瘽錛?/font>

鎴戜滑鍙互榪炵畫鍦頒嬌鐢╲path璇彞錛屼互鎸囧畾涓嶅悓鎼滅儲絳栫暐銆傚鏋滆繛緇殑vpath璇彞涓嚭鐜頒簡鐩稿悓鐨?lt;pattern>錛屾垨鏄閲嶅浜嗙殑<pattern>錛岄偅涔堬紝make浼氭寜鐓path璇彞鐨勫厛鍚庨『搴忔潵鎵ц鎼滅儲銆傚錛?/font>

    vpath %.c foo
    vpath %   blish
    vpath %.c bar

鍏惰〃紺?#8220;.c”緇撳熬鐨勬枃浠訛紝鍏堝湪“foo”鐩綍錛岀劧鍚庢槸“blish”錛屾渶鍚庢槸“bar”鐩綍銆?/font>

    vpath %.c foo:bar
    vpath %   blish

鑰屼笂闈㈢殑璇彞鍒欒〃紺?#8220;.c”緇撳熬鐨勬枃浠訛紝鍏堝湪“foo”鐩綍錛岀劧鍚庢槸“bar”鐩綍錛屾渶鍚庢墠鏄?#8220;blish”鐩綍銆?/font>


浜斻佷吉鐩爣

鏈鏃╁厛鐨勪竴涓緥瀛愪腑錛屾垜浠彁鍒拌繃涓涓?#8220;clean”鐨勭洰鏍囷紝榪欐槸涓涓?#8220;浼洰鏍?#8221;錛?/font>

    clean:
            rm *.o temp

姝e儚鎴戜滑鍓嶉潰渚嬪瓙涓殑“clean”涓鏍鳳紝鍗崇劧鎴戜滑鐢熸垚浜嗚澶氭枃浠剁紪璇戞枃浠訛紝鎴戜滑涔熷簲璇ユ彁渚涗竴涓竻闄ゅ畠浠殑“鐩爣”浠ュ瀹屾暣鍦伴噸緙栬瘧鑰岀敤銆?錛堜互“make clean”鏉ヤ嬌鐢ㄨ鐩爣錛?/font>

鍥犱負錛屾垜浠茍涓嶇敓鎴?#8220;clean”榪欎釜鏂囦歡銆?#8220;浼洰鏍?#8221;騫朵笉鏄竴涓枃浠訛紝鍙槸涓涓爣絳撅紝鐢變簬“ 浼洰鏍?#8221;涓嶆槸鏂囦歡錛屾墍浠ake鏃犳硶鐢熸垚瀹冪殑渚濊禆鍏崇郴鍜屽喅瀹氬畠鏄惁瑕佹墽琛屻傛垜浠彧鏈夐氳繃鏄劇ず鍦版寚鏄庤繖涓?#8220;鐩爣”鎵嶈兘璁╁叾鐢熸晥銆傚綋鐒訛紝“浼洰鏍?#8221;鐨勫彇鍚嶄笉鑳? 鍜屾枃浠跺悕閲嶅悕錛屼笉鐒跺叾灝卞け鍘諱簡“浼洰鏍?#8221;鐨勬剰涔変簡銆?/font>

褰撶劧錛屼負浜嗛伩鍏嶅拰鏂囦歡閲嶅悕鐨勮繖縐嶆儏鍐碉紝鎴戜滑鍙互浣跨敤涓涓壒孌婄殑鏍囪“.PHONY”鏉ユ樉紺哄湴鎸囨槑涓涓洰鏍囨槸“浼洰鏍?#8221;錛屽悜make璇存槑錛屼笉綆℃槸鍚︽湁榪欎釜鏂囦歡錛岃繖涓洰鏍囧氨鏄?#8220;浼洰鏍?#8221;銆?/font>

    .PHONY : clean

鍙鏈夎繖涓0鏄庯紝涓嶇鏄惁鏈?#8220;clean”鏂囦歡錛岃榪愯“clean”榪欎釜鐩爣錛屽彧鏈?#8220;make clean”榪欐牱銆備簬鏄暣涓繃紼嬪彲浠ヨ繖鏍峰啓錛?/font>

     .PHONY: clean
    clean:
            rm *.o temp

浼洰鏍囦竴鑸病鏈変緷璧栫殑鏂囦歡銆備絾鏄紝鎴戜滑涔熷彲浠ヤ負浼洰鏍囨寚瀹氭墍渚濊禆鐨勬枃浠躲備吉鐩爣鍚屾牱鍙互浣滀負“ 榛樿鐩爣”錛屽彧瑕佸皢鍏舵斁鍦ㄧ涓涓備竴涓ず渚嬪氨鏄紝濡傛灉浣犵殑Makefile闇瑕佷竴鍙f皵鐢熸垚鑻ュ共涓彲鎵ц鏂囦歡錛屼絾浣犲彧鎯崇畝鍗曞湴鏁蹭竴涓猰ake瀹屼簨錛屽茍涓旓紝鎵 鏈夌殑鐩爣鏂囦歡閮藉啓鍦ㄤ竴涓狹akefile涓紝閭d箞浣犲彲浠ヤ嬌鐢?#8220;浼洰鏍?#8221;榪欎釜鐗規э細

    all : prog1 prog2 prog3
    .PHONY : all

    prog1 : prog1.o utils.o
            cc -o prog1 prog1.o utils.o

    prog2 : prog2.o
            cc -o prog2 prog2.o

    prog3 : prog3.o sort.o utils.o
            cc -o prog3 prog3.o sort.o utils.o

鎴戜滑鐭ラ亾錛孧akefile涓殑絎竴涓洰鏍囦細琚綔涓哄叾榛樿鐩爣銆傛垜浠0鏄庝簡涓涓?#8220;all”鐨勪吉 鐩爣錛屽叾渚濊禆浜庡叾瀹冧笁涓洰鏍囥傜敱浜庝吉鐩爣鐨勭壒鎬ф槸錛屾繪槸琚墽琛岀殑錛屾墍浠ュ叾渚濊禆鐨勯偅涓変釜鐩爣灝辨繪槸涓嶅“all”榪欎釜鐩爣鏂般傛墍浠ワ紝鍏跺畠涓変釜鐩爣鐨勮鍒欐繪槸 浼氳鍐寵銆備篃灝辮揪鍒頒簡鎴戜滑涓鍙f皵鐢熸垚澶氫釜鐩爣鐨勭洰鐨勩?#8220;.PHONY : all”澹版槑浜?#8220;all”榪欎釜鐩爣涓?#8220;浼洰鏍?#8221;銆?/font>

闅忎究鎻愪竴鍙ワ紝浠庝笂闈㈢殑渚嬪瓙鎴戜滑鍙互鐪嬪嚭錛岀洰鏍囦篃鍙互鎴愪負渚濊禆銆傛墍浠ワ紝浼洰鏍囧悓鏍蜂篃鍙垚涓轟緷璧栥傜湅涓嬮潰鐨勪緥瀛愶細

    .PHONY: cleanall cleanobj cleandiff

    cleanall : cleanobj cleandiff
            rm program

    cleanobj :
            rm *.o

    cleandiff :
            rm *.diff

“make clean”灝嗘竻闄ゆ墍鏈夎琚竻闄ょ殑鏂囦歡銆?#8220;cleanobj”鍜?#8220;cleandiff”榪欎袱涓吉鐩爣鏈夌偣鍍?#8220;瀛愮▼搴?#8221;鐨勬剰鎬濄傛垜浠彲浠ヨ緭鍏?#8220;make cleanall”鍜?#8220;make cleanobj”鍜?#8220;make cleandiff”鍛戒護鏉ヨ揪鍒版竻闄や笉鍚岀綾繪枃浠剁殑鐩殑銆?/font>

鍏佸鐩爣

Makefile鐨勮鍒欎腑鐨勭洰鏍囧彲浠ヤ笉姝竴涓紝鍏舵敮鎸佸鐩爣錛屾湁鍙兘鎴戜滑鐨勫涓洰鏍囧悓鏃朵緷璧栦簬 涓涓枃浠訛紝騫朵笖鍏剁敓鎴愮殑鍛戒護澶т綋綾諱技銆備簬鏄垜浠氨鑳芥妸鍏跺悎騫惰搗鏉ャ傚綋鐒訛紝澶氫釜鐩爣鐨勭敓鎴愯鍒欑殑鎵ц鍛戒護鏄悓涓涓紝榪欏彲鑳戒細鍙垜浠甫鏉ラ夯鐑︼紝涓嶈繃濂藉湪鎴戜滑鐨? 鍙互浣跨敤涓涓嚜鍔ㄥ寲鍙橀噺“$@”錛堝叧浜庤嚜鍔ㄥ寲鍙橀噺錛屽皢鍦ㄥ悗闈㈣榪幫級錛岃繖涓彉閲忚〃紺虹潃鐩墠瑙勫垯涓墍鏈夌殑鐩爣鐨勯泦鍚堬紝榪欐牱璇村彲鑳藉緢鎶借薄錛岃繕鏄湅涓涓緥瀛愬惂銆?/font>

    bigoutput littleoutput : text.g
            generate text.g -$(subst output,,$@) > $@

    涓婅堪瑙勫垯絳変環浜庯細

    bigoutput : text.g
            generate text.g -big > bigoutput
    littleoutput : text.g
            generate text.g -little > littleoutput

    鍏朵腑錛?$(subst output,,$@)涓殑“$”琛ㄧず鎵ц涓涓狹akefile鐨勫嚱鏁幫紝鍑芥暟鍚嶄負subst錛屽悗闈㈢殑涓哄弬鏁般傚叧浜庡嚱鏁幫紝灝嗗湪鍚庨潰璁茶堪銆傝繖閲岀殑榪欎釜鍑芥暟鏄埅 鍙栧瓧絎︿覆鐨勬剰鎬濓紝“$@”琛ㄧず鐩爣鐨勯泦鍚堬紝灝卞儚涓涓暟緇勶紝“$@”渚濇鍙栧嚭鐩爣錛屽茍鎵т簬鍛戒護銆?/font>


涓冦侀潤鎬佹ā寮?/strong>

闈欐佹ā寮忓彲浠ユ洿鍔犲鏄撳湴瀹氫箟澶氱洰鏍囩殑瑙勫垯錛屽彲浠ヨ鎴戜滑鐨勮鍒欏彉寰楁洿鍔犵殑鏈夊脊鎬у拰鐏墊椿銆傛垜浠繕鏄厛鏉ョ湅涓涓嬭娉曪細

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


    targets瀹氫箟浜嗕竴緋誨垪鐨勭洰鏍囨枃浠訛紝鍙互鏈夐氶厤絎︺傛槸鐩爣鐨勪竴涓泦鍚堛?/font>

    target-parrtern鏄寚鏄庝簡targets鐨勬ā寮忥紝涔熷氨鏄殑鐩爣闆嗘ā寮忋?/font>

    prereq-parrterns鏄洰鏍囩殑渚濊禆妯″紡錛屽畠瀵箃arget-parrtern褰㈡垚鐨勬ā寮忓啀榪涜涓嬈′緷璧栫洰鏍囩殑瀹氫箟銆?/font>

榪欐牱鎻忚堪榪欎笁涓笢瑗匡紝鍙兘榪樻槸娌℃湁璇存竻妤氾紝榪樻槸涓句釜渚嬪瓙鏉ヨ鏄庝竴涓嬪惂銆傚鏋滄垜浠? 鐨?lt;target-parrtern>瀹氫箟鎴?#8220;%.o”錛屾剰鎬濇槸鎴戜滑鐨?lt;target>闆嗗悎涓兘鏄互“.o”緇撳熬鐨勶紝鑰屽鏋滄垜浠? 鐨?lt;prereq-parrterns>瀹氫箟鎴?#8220;%.c”錛屾剰鎬濇槸瀵?lt;target-parrtern>鎵褰㈡垚鐨勭洰鏍囬泦榪涜浜屾 瀹氫箟錛屽叾璁$畻鏂規硶鏄紝鍙?lt;target-parrtern>妯″紡涓殑“%”錛堜篃灝辨槸鍘繪帀浜哰.o]榪欎釜緇撳熬錛夛紝騫朵負鍏跺姞涓奫.c]榪欎釜緇撳熬錛? 褰㈡垚鐨勬柊闆嗗悎銆?/font>

鎵浠ワ紝鎴戜滑鐨?#8220;鐩爣妯″紡”鎴栨槸“渚濊禆妯″紡”涓兘搴旇鏈?#8220;%”榪欎釜瀛楃錛屽鏋滀綘鐨勬枃浠跺悕涓湁“%”閭d箞浣犲彲浠ヤ嬌鐢ㄥ弽鏂滄潬“\”榪涜杞箟錛屾潵鏍囨槑鐪熷疄鐨?#8220;%”瀛楃銆?/font>

鐪嬩竴涓緥瀛愶細

    objects = foo.o bar.o

    all: $(objects)

    $(objects): %.o: %.c
            $(CC) -c $(CFLAGS) $< -o $@


涓婇潰鐨勪緥瀛愪腑錛屾寚鏄庝簡鎴戜滑鐨勭洰鏍囦粠$object涓幏鍙栵紝“%.o”琛ㄦ槑瑕佹墍鏈変互 “.o”緇撳熬鐨勭洰鏍囷紝涔熷氨鏄?#8220;foo.o bar.o”錛屼篃灝辨槸鍙橀噺$object闆嗗悎鐨勬ā寮忥紝鑰屼緷璧栨ā寮?#8220;%.c”鍒欏彇妯″紡“%.o”鐨?#8220;%”錛屼篃灝辨槸“foo bar”錛屽茍涓哄叾鍔犱笅“.c”鐨勫悗緙錛屼簬鏄紝鎴戜滑鐨勪緷璧栫洰鏍囧氨鏄?#8220;foo.c bar.c”銆傝屽懡浠や腑鐨?#8220;$<”鍜?#8220;$@”鍒欐槸鑷姩鍖栧彉閲忥紝“$<”琛ㄧず鎵鏈夌殑渚濊禆鐩爣闆嗭紙涔熷氨鏄?#8220;foo.c bar.c”錛夛紝“$@”琛ㄧず鐩爣闆嗭紙涔熷氨鏄?#8220;foo.o bar.o”錛夈備簬鏄紝涓婇潰鐨勮鍒欏睍寮鍚庣瓑浠蜂簬涓嬮潰鐨勮鍒欙細

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

璇曟兂錛屽鏋滄垜浠殑“%.o”鏈夊嚑鐧句釜錛岄偅縐嶆垜浠彧瑕佺敤榪欑寰堢畝鍗曠殑“闈欐佹ā寮忚鍒?#8221;灝卞彲浠ュ啓瀹屼竴鍫嗚鍒欙紝瀹炲湪鏄お鏈夋晥鐜囦簡銆?#8220;闈欐佹ā寮忚鍒?#8221;鐨勭敤娉曞緢鐏墊椿錛屽鏋滅敤寰楀ソ錛岄偅浼氫竴涓緢寮哄ぇ鐨勫姛鑳姐傚啀鐪嬩竴涓緥瀛愶細


    files = foo.elc bar.o lose.o

    $(filter %.o,$(files)): %.o: %.c
            $(CC) -c $(CFLAGS) $< -o $@
    $(filter %.elc,$(files)): %.elc: %.el
            emacs -f batch-byte-compile $<


$(filter %.o,$(files))琛ㄧず璋冪敤Makefile鐨刦ilter鍑芥暟錛岃繃婊?#8220;$filter”闆嗭紝鍙鍏朵腑妯″紡涓?#8220;%.o”鐨勫唴瀹廣傚叾鐨勫畠鍐呭錛屾垜灝變笉鐢ㄥ璇翠簡鍚с傝繖涓緥瀛楀睍紺轟簡Makefile涓洿澶х殑寮規с?/font>


鍏佽嚜鍔ㄧ敓鎴愪緷璧栨?/strong>

鍦∕akefile涓紝鎴戜滑鐨勪緷璧栧叧緋誨彲鑳戒細闇瑕佸寘鍚竴緋誨垪鐨勫ご鏂囦歡錛屾瘮濡傦紝濡傛灉鎴戜滑鐨刴ain.c涓湁涓鍙?#8220;#include "defs.h"”錛岄偅涔堟垜浠殑渚濊禆鍏崇郴搴旇鏄細

    main.o : main.c defs.h

浣嗘槸錛屽鏋滄槸涓涓瘮杈冨ぇ鍨嬬殑宸ョ▼錛屼綘蹇呴渶娓呮鍝簺C鏂囦歡鍖呭惈浜嗗摢浜涘ご鏂囦歡錛屽茍涓旓紝浣犲湪鍔犲叆鎴栧垹 闄ゅご鏂囦歡鏃訛紝涔熼渶瑕佸皬蹇冨湴淇敼Makefile錛岃繖鏄竴涓緢娌℃湁緇存姢鎬х殑宸ヤ綔銆備負浜嗛伩鍏嶈繖縐嶇箒閲嶈屽張瀹規槗鍑洪敊鐨勪簨鎯咃紝鎴戜滑鍙互浣跨敤C/C++緙栬瘧鐨勪竴涓姛 鑳姐傚ぇ澶氭暟鐨凜/C++緙栬瘧鍣ㄩ兘鏀寔涓涓?#8220;-M”鐨勯夐」錛屽嵆鑷姩鎵懼婧愭枃浠朵腑鍖呭惈鐨勫ご鏂囦歡錛屽茍鐢熸垚涓涓緷璧栧叧緋匯備緥濡傦紝濡傛灉鎴戜滑鎵ц涓嬮潰鐨勫懡浠わ細

    cc -M main.c

鍏惰緭鍑烘槸錛?/font>

    main.o : main.c defs.h

浜庢槸鐢辯紪璇戝櫒鑷姩鐢熸垚鐨勪緷璧栧叧緋伙紝榪欐牱涓鏉ワ紝浣犲氨涓嶅繀鍐嶆墜鍔ㄤ功鍐欒嫢騫叉枃浠剁殑渚濊禆鍏崇郴錛岃岀敱緙栬瘧鍣ㄨ嚜鍔ㄧ敓鎴愪簡銆傞渶瑕佹彁閱掍竴鍙ョ殑鏄紝濡傛灉浣犱嬌鐢℅NU鐨凜/C++緙栬瘧鍣紝浣犲緱鐢?#8220;-MM”鍙傛暟錛屼笉鐒訛紝“-M”鍙傛暟浼氭妸涓浜涙爣鍑嗗簱鐨勫ご鏂囦歡涔熷寘鍚繘鏉ャ?/font>

    gcc -M main.c鐨勮緭鍑烘槸錛?/font>

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


    gcc -MM main.c鐨勮緭鍑哄垯鏄細

    main.o: main.c defs.h

閭d箞錛岀紪璇戝櫒鐨勮繖涓姛鑳藉浣曚笌鎴戜滑鐨凪akefile鑱旂郴鍦ㄤ竴璧峰憿銆傚洜涓鴻繖鏍蜂竴鏉ワ紝鎴戜滑鐨? Makefile涔熻鏍規嵁榪欎簺婧愭枃浠墮噸鏂扮敓鎴愶紝璁㎝akefile鑷凡渚濊禆浜庢簮鏂囦歡錛熻繖涓姛鑳藉茍涓嶇幇瀹烇紝涓嶈繃鎴戜滑鍙互鏈夊叾瀹冩墜孌墊潵榪傚洖鍦板疄鐜拌繖涓鍔熻兘銆? GNU緇勭粐寤鴻鎶婄紪璇戝櫒涓烘瘡涓涓簮鏂囦歡鐨勮嚜鍔ㄧ敓鎴愮殑渚濊禆鍏崇郴鏀懼埌涓涓枃浠朵腑錛屼負姣忎竴涓?#8220;name.c”鐨勬枃浠墮兘鐢熸垚涓涓?#8220;name.d”鐨? Makefile鏂囦歡錛孾.d]鏂囦歡涓氨瀛樻斁瀵瑰簲[.c]鏂囦歡鐨勪緷璧栧叧緋匯?/font>

浜庢槸錛屾垜浠彲浠ュ啓鍑篬.c]鏂囦歡鍜孾.d]鏂囦歡鐨勪緷璧栧叧緋伙紝騫惰make鑷姩鏇存柊鎴栬嚜鎴怺.d]鏂囦歡錛屽茍鎶婂叾鍖呭惈鍦ㄦ垜浠殑涓籑akefile涓紝榪欐牱錛屾垜浠氨鍙互鑷姩鍖栧湴鐢熸垚姣忎釜鏂囦歡鐨勪緷璧栧叧緋諱簡銆?/font>

榪欓噷錛屾垜浠粰鍑轟簡涓涓ā寮忚鍒欐潵浜х敓[.d]鏂囦歡錛?/font>

    %.d: %.c
            @set -e; rm -f $@; \
             $(CC) -M $(CPPFLAGS) $< >
$@.$$$$; \
             sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' <
$@.$$$$ > $@; \
             rm -f
$@.$$$$


榪欎釜瑙勫垯鐨勬剰鎬濇槸錛屾墍鏈夌殑[.d]鏂囦歡渚濊禆浜嶽.c]鏂囦歡錛?#8220;rm -f $@”鐨勬剰鎬濇槸鍒犻櫎鎵鏈夌殑鐩爣錛屼篃灝辨槸[.d]鏂囦歡錛岀浜岃鐨勬剰鎬濇槸錛屼負姣忎釜渚濊禆鏂囦歡“$<”錛屼篃灝辨槸[.c]鏂囦歡鐢熸垚渚濊禆鏂囦歡錛?#8220;$@”琛ㄧず妯″紡 “%.d”鏂囦歡錛屽鏋滄湁涓涓狢鏂囦歡鏄痭ame.c錛岄偅涔?#8220;%”灝辨槸“name”錛?#8220;$$$$”鎰忎負涓涓殢鏈虹紪鍙鳳紝絎簩琛岀敓鎴愮殑鏂囦歡鏈夊彲鑳芥槸 “name.d.12345”錛岀涓夎浣跨敤sed鍛戒護鍋氫簡涓涓浛鎹紝鍏充簬sed鍛戒護鐨勭敤娉曡鍙傜湅鐩稿叧鐨勪嬌鐢ㄦ枃妗c傜鍥涜灝辨槸鍒犻櫎涓存椂鏂囦歡銆?/font>

鎬昏岃█涔嬶紝榪欎釜妯″紡瑕佸仛鐨勪簨灝辨槸鍦ㄧ紪璇戝櫒鐢熸垚鐨勪緷璧栧叧緋諱腑鍔犲叆[.d]鏂囦歡鐨勪緷璧栵紝鍗蟲妸渚濊禆鍏崇郴錛?/font>

    main.o : main.c defs.h

杞垚錛?/font>

    main.o main.d : main.c defs.h

浜庢槸錛屾垜浠殑[.d]鏂囦歡涔熶細鑷姩鏇存柊浜嗭紝騫朵細鑷姩鐢熸垚浜嗭紝褰撶劧錛屼綘榪樺彲浠ュ湪榪欎釜[.d]鏂囦歡 涓姞鍏ョ殑涓嶅彧鏄緷璧栧叧緋伙紝鍖呮嫭鐢熸垚鐨勫懡浠や篃鍙竴騫跺姞鍏ワ紝璁╂瘡涓猍.d]鏂囦歡閮藉寘鍚竴涓畬璧栫殑瑙勫垯銆備竴鏃︽垜浠畬鎴愯繖涓伐浣滐紝鎺ヤ笅鏉ワ紝鎴戜滑灝辮鎶婅繖浜涜嚜鍔ㄧ敓鎴? 鐨勮鍒欐斁榪涙垜浠殑涓籑akefile涓傛垜浠彲浠ヤ嬌鐢∕akefile鐨?#8220;include”鍛戒護錛屾潵寮曞叆鍒殑Makefile鏂囦歡錛堝墠闈㈣榪囷級錛屼緥濡傦細

    sources = foo.c bar.c

    include $(sources:.c=.d)

涓婅堪璇彞涓殑“$(sources:.c=.d)”涓殑“.c=.d”鐨勬剰鎬濇槸鍋氫竴涓浛鎹紝鎶? 鍙橀噺$(sources)鎵鏈塠.c]鐨勫瓧涓查兘鏇挎崲鎴怺.d]錛屽叧浜庤繖涓?#8220;鏇挎崲”鐨勫唴瀹癸紝鍦ㄥ悗闈㈡垜浼氭湁鏇翠負璇︾粏鐨勮榪般傚綋鐒訛紝浣犲緱娉ㄦ剰嬈″簭錛屽洜涓? include鏄寜嬈℃潵杞藉叆鏂囦歡錛屾渶鍏堣澆鍏ョ殑[.d]鏂囦歡涓殑鐩爣浼氭垚涓洪粯璁ょ洰鏍囥?/font>

姣忔潯瑙勫垯涓殑鍛戒護鍜屾搷浣滅郴緇烻hell鐨勫懡浠よ鏄竴鑷寸殑銆俶ake浼氫竴鎸夐『搴忎竴鏉′竴鏉$殑鎵ц鍛? 浠わ紝姣忔潯鍛戒護鐨勫紑澶村繀欏諱互[Tab]閿紑澶達紝闄ら潪錛屽懡浠ゆ槸绱ц窡鍦ㄤ緷璧栬鍒欏悗闈㈢殑鍒嗗彿鍚庣殑銆傚湪鍛戒護琛屼箣闂翠腑鐨勭┖鏍兼垨鏄┖琛屼細琚拷鐣ワ紝浣嗘槸濡傛灉璇ョ┖鏍兼垨絀鴻鏄? 浠ab閿紑澶寸殑錛岄偅涔坢ake浼氳涓哄叾鏄竴涓┖鍛戒護銆?/font>

鎴戜滑鍦║NIX涓嬪彲鑳戒細浣跨敤涓嶅悓鐨凷hell錛屼絾鏄痬ake鐨勫懡浠ら粯璁ゆ槸琚?#8220;/bin/sh”鈥斺擴NIX鐨勬爣鍑哠hell瑙i噴鎵ц鐨勩傞櫎闈炰綘鐗瑰埆鎸囧畾涓涓叾瀹冪殑Shell銆侻akefile涓紝“#”鏄敞閲婄錛屽緢鍍廋/C++涓殑“//”錛屽叾鍚庣殑鏈瀛楃閮借娉ㄩ噴銆?/font>

涓銆佹樉紺哄懡浠?/strong>

閫氬父錛宮ake浼氭妸鍏惰鎵ц鐨勫懡浠よ鍦ㄥ懡浠ゆ墽琛屽墠杈撳嚭鍒板睆騫曚笂銆傚綋鎴戜滑鐢?#8220;@”瀛楃鍦ㄥ懡浠よ鍓嶏紝閭d箞錛岃繖涓懡浠ゅ皢涓嶈make鏄劇ず鍑烘潵錛屾渶鍏蜂唬琛ㄦх殑渚嬪瓙鏄紝鎴戜滑鐢ㄨ繖涓姛鑳芥潵鍍忓睆騫曟樉紺轟竴浜涗俊鎭傚錛?/font>

    @echo 姝e湪緙栬瘧XXX妯″潡......

褰搈ake鎵ц鏃訛紝浼氳緭鍑?#8220;姝e湪緙栬瘧XXX妯″潡......”瀛椾覆錛屼絾涓嶄細杈撳嚭鍛戒護錛屽鏋滄病鏈?#8220;@”錛岄偅涔堬紝make灝嗚緭鍑猴細

    echo 姝e湪緙栬瘧XXX妯″潡......
    姝e湪緙栬瘧XXX妯″潡......

濡傛灉make鎵ц鏃訛紝甯﹀叆make鍙傛暟“-n”鎴?#8220;--just-print”錛岄偅涔堝叾鍙槸鏄劇ず鍛戒護錛屼絾涓嶄細鎵ц鍛戒護錛岃繖涓姛鑳藉緢鏈夊埄浜庢垜浠皟璇曟垜浠殑Makefile錛岀湅鐪嬫垜浠功鍐欑殑鍛戒護鏄墽琛岃搗鏉ユ槸浠涔堟牱瀛愮殑鎴栨槸浠涔堥『搴忕殑銆?/font>

鑰宮ake鍙傛暟“-s”鎴?#8220;--slient”鍒欐槸鍏ㄩ潰紱佹鍛戒護鐨勬樉紺恒?/font>

 

浜屻佸懡浠ゆ墽琛?/strong>

褰撲緷璧栫洰鏍囨柊浜庣洰鏍囨椂錛屼篃灝辨槸褰撹鍒欑殑鐩爣闇瑕佽鏇存柊鏃訛紝make浼氫竴鏉′竴鏉$殑鎵ц鍏跺悗鐨勫懡 浠ゃ傞渶瑕佹敞鎰忕殑鏄紝濡傛灉浣犺璁╀笂涓鏉″懡浠ょ殑緇撴灉搴旂敤鍦ㄤ笅涓鏉″懡浠ゆ椂錛屼綘搴旇浣跨敤鍒嗗彿鍒嗛殧榪欎袱鏉″懡浠ゃ傛瘮濡備綘鐨勭涓鏉″懡浠ゆ槸cd鍛戒護錛屼綘甯屾湜絎簩鏉″懡浠ゅ緱鍦? cd涔嬪悗鐨勫熀紜涓婅繍琛岋紝閭d箞浣犲氨涓嶈兘鎶婅繖涓ゆ潯鍛戒護鍐欏湪涓よ涓婏紝鑰屽簲璇ユ妸榪欎袱鏉″懡浠ゅ啓鍦ㄤ竴琛屼笂錛岀敤鍒嗗彿鍒嗛殧銆傚錛?/font>

    紺轟緥涓錛?br>        exec:
                cd /home/hchen
                pwd

    紺轟緥浜岋細
        exec:
                cd /home/hchen; pwd

褰撴垜浠墽琛?#8220;make exec”鏃訛紝絎竴涓緥瀛愪腑鐨刢d娌℃湁浣滅敤錛宲wd浼氭墦鍗板嚭褰撳墠鐨凪akefile鐩綍錛岃岀浜屼釜渚嬪瓙涓紝cd灝辮搗浣滅敤浜嗭紝pwd浼氭墦鍗板嚭“/home/hchen”銆?/font>

make涓鑸槸浣跨敤鐜鍙橀噺SHELL涓墍瀹氫箟鐨勭郴緇烻hell鏉ユ墽琛屽懡浠わ紝榛樿鎯呭喌涓嬩嬌鐢? UNIX鐨勬爣鍑哠hell鈥斺?bin/sh鏉ユ墽琛屽懡浠ゃ備絾鍦∕S-DOS涓嬫湁鐐圭壒孌婏紝鍥犱負MS-DOS涓嬫病鏈塖HELL鐜鍙橀噺錛屽綋鐒朵綘涔熷彲浠ユ寚瀹氥傚 鏋滀綘鎸囧畾浜哢NIX椋庢牸鐨勭洰褰曞艦寮忥紝棣栧厛錛宮ake浼氬湪SHELL鎵鎸囧畾鐨勮礬寰勪腑鎵懼鍛戒護瑙i噴鍣紝濡傛灉鎵句笉鍒幫紝鍏朵細鍦ㄥ綋鍓嶇洏絎︿腑鐨勫綋鍓嶇洰褰曚腑瀵繪壘錛屽鏋滃啀 鎵句笉鍒幫紝鍏朵細鍦≒ATH鐜鍙橀噺涓墍瀹氫箟鐨勬墍鏈夎礬寰勪腑瀵繪壘銆侻S-DOS涓紝濡傛灉浣犲畾涔夌殑鍛戒護瑙i噴鍣ㄦ病鏈夋壘鍒幫紝鍏朵細緇欎綘鐨勫懡浠よВ閲婂櫒鍔犱笂璇稿 “.exe”銆?#8220;.com”銆?#8220;.bat”銆?#8220;.sh”絳夊悗緙銆?/font>



涓夈佸懡浠ゅ嚭閿?/strong>

姣忓綋鍛戒護榪愯瀹屽悗錛宮ake浼氭嫻嬫瘡涓懡浠ょ殑榪斿洖鐮侊紝濡傛灉鍛戒護榪斿洖鎴愬姛錛岄偅涔坢ake浼氭墽琛屼笅 涓鏉″懡浠わ紝褰撹鍒欎腑鎵鏈夌殑鍛戒護鎴愬姛榪斿洖鍚庯紝榪欎釜瑙勫垯灝辯畻鏄垚鍔熷畬鎴愪簡銆傚鏋滀竴涓鍒欎腑鐨勬煇涓懡浠ゅ嚭閿欎簡錛堝懡浠ら鍑虹爜闈為浂錛夛紝閭d箞make灝變細緇堟鎵ц褰撳墠 瑙勫垯錛岃繖灝嗘湁鍙兘緇堟鎵鏈夎鍒欑殑鎵ц銆?/font>

鏈変簺鏃跺欙紝鍛戒護鐨勫嚭閿欏茍涓嶈〃紺哄氨鏄敊璇殑銆備緥濡俶kdir鍛戒護錛屾垜浠竴瀹氶渶瑕佸緩绔嬩竴涓洰褰曪紝濡? 鏋滅洰褰曚笉瀛樺湪錛岄偅涔坢kdir灝辨垚鍔熸墽琛岋紝涓囦簨澶у悏錛屽鏋滅洰褰曞瓨鍦紝閭d箞灝卞嚭閿欎簡銆傛垜浠箣鎵浠ヤ嬌鐢╩kdir鐨勬剰鎬濆氨鏄竴瀹氳鏈夎繖鏍風殑涓涓洰褰曪紝浜庢槸鎴戜滑 灝變笉甯屾湜mkdir鍑洪敊鑰岀粓姝㈣鍒欑殑榪愯銆?/font>

涓轟簡鍋氬埌榪欎竴鐐癸紝蹇界暐鍛戒護鐨勫嚭閿欙紝鎴戜滑鍙互鍦∕akefile鐨勫懡浠よ鍓嶅姞涓涓噺鍙?#8220;-”錛堝湪Tab閿箣鍚庯級錛屾爣璁頒負涓嶇鍛戒護鍑轟笉鍑洪敊閮借涓烘槸鎴愬姛鐨勩傚錛?/font>

   clean:
            -rm -f *.o

榪樻湁涓涓叏灞鐨勫姙娉曟槸錛岀粰make鍔犱笂“-i”鎴栨槸“--ignore-errors”鍙傛暟錛? 閭d箞錛孧akefile涓墍鏈夊懡浠ら兘浼氬拷鐣ラ敊璇傝屽鏋滀竴涓鍒欐槸浠?#8220;.IGNORE”浣滀負鐩爣鐨勶紝閭d箞榪欎釜瑙勫垯涓殑鎵鏈夊懡浠ゅ皢浼氬拷鐣ラ敊璇傝繖浜涙槸涓嶅悓綰? 鍒殑闃叉鍛戒護鍑洪敊鐨勬柟娉曪紝浣犲彲浠ユ牴鎹綘鐨勪笉鍚屽枩嬈㈣緗?/font>

榪樻湁涓涓鎻愪竴涓嬬殑make鐨勫弬鏁扮殑鏄?#8220;-k”鎴栨槸“--keep-going”錛岃繖涓弬鏁扮殑鎰忔濇槸錛屽鏋滄煇瑙勫垯涓殑鍛戒護鍑洪敊浜嗭紝閭d箞灝辯粓鐩瑙勫垯鐨勬墽琛岋紝浣嗙戶緇墽琛屽叾瀹冭鍒欍?/font>



鍥涖佸祵濂楁墽琛宮ake

鍦ㄤ竴浜涘ぇ鐨勫伐紼嬩腑錛屾垜浠細鎶婃垜浠笉鍚屾ā鍧楁垨鏄笉鍚屽姛鑳界殑婧愭枃浠舵斁鍦ㄤ笉鍚岀殑鐩綍涓紝鎴戜滑鍙互鍦ㄦ瘡 涓洰褰曚腑閮戒功鍐欎竴涓鐩綍鐨凪akefile錛岃繖鏈夊埄浜庤鎴戜滑鐨凪akefile鍙樺緱鏇村姞鍦扮畝媧侊紝鑰屼笉鑷充簬鎶婃墍鏈夌殑涓滆タ鍏ㄩ儴鍐欏湪涓涓狹akefile涓紝 榪欐牱浼氬緢闅劇淮鎶ゆ垜浠殑Makefile錛岃繖涓妧鏈浜庢垜浠ā鍧楃紪璇戝拰鍒嗘緙栬瘧鏈夌潃闈炲父澶х殑濂藉銆?/font>

渚嬪錛屾垜浠湁涓涓瓙鐩綍鍙玸ubdir錛岃繖涓洰褰曚笅鏈変釜Makefile鏂囦歡錛屾潵鎸囨槑浜嗚繖涓洰褰曚笅鏂囦歡鐨勭紪璇戣鍒欍傞偅涔堟垜浠繪帶鐨凪akefile鍙互榪欐牱涔﹀啓錛?/font>

    subsystem:
            cd subdir && $(MAKE)

鍏剁瓑浠蜂簬錛?/font>

    subsystem:
            $(MAKE) -C subdir

瀹氫箟$(MAKE)瀹忓彉閲忕殑鎰忔濇槸錛屼篃璁告垜浠殑make闇瑕佷竴浜涘弬鏁幫紝鎵浠ュ畾涔夋垚涓涓彉閲忔瘮杈冨埄浜庣淮鎶ゃ傝繖涓や釜渚嬪瓙鐨勬剰鎬濋兘鏄厛榪涘叆“subdir”鐩綍錛岀劧鍚庢墽琛宮ake鍛戒護銆?/font>

鎴戜滑鎶婅繖涓狹akefile鍙仛“鎬繪帶Makefile”錛屾繪帶Makefile鐨勫彉閲忓彲浠ヤ紶閫掑埌涓嬬駭鐨凪akefile涓紙濡傛灉浣犳樉紺虹殑澹版槑錛夛紝浣嗘槸涓嶄細瑕嗙洊涓嬪眰鐨凪akefile涓墍瀹氫箟鐨勫彉閲忥紝闄ら潪鎸囧畾浜?#8220;-e”鍙傛暟銆?/font>

濡傛灉浣犺浼犻掑彉閲忓埌涓嬬駭Makefile涓紝閭d箞浣犲彲浠ヤ嬌鐢ㄨ繖鏍風殑澹版槑錛?/font>

    export <variable ...>

濡傛灉浣犱笉鎯寵鏌愪簺鍙橀噺浼犻掑埌涓嬬駭Makefile涓紝閭d箞浣犲彲浠ヨ繖鏍峰0鏄庯細

    unexport <variable ...>

濡傦細
   
    紺轟緥涓錛?/font>

        export variable = value

        鍏剁瓑浠蜂簬錛?/font>

        variable = value
        export variable

        鍏剁瓑浠蜂簬錛?/font>

        export variable := value

        鍏剁瓑浠蜂簬錛?/font>

        variable := value
        export variable

    紺轟緥浜岋細

        export variable += value

        鍏剁瓑浠蜂簬錛?/font>

        variable += value
        export variable

濡傛灉浣犺浼犻掓墍鏈夌殑鍙橀噺錛岄偅涔堬紝鍙涓涓猠xport灝辮浜嗐傚悗闈粈涔堜篃涓嶇敤璺燂紝琛ㄧず浼犻掓墍鏈夌殑鍙橀噺銆?/font>

闇瑕佹敞鎰忕殑鏄紝鏈変袱涓彉閲忥紝涓涓槸SHELL錛屼竴涓槸MAKEFLAGS錛岃繖涓や釜鍙橀噺涓嶇浣犳槸 鍚xport錛屽叾鎬繪槸瑕佷紶閫掑埌涓嬪眰Makefile涓紝鐗瑰埆鏄疢AKEFILES鍙橀噺錛屽叾涓寘鍚簡make鐨勫弬鏁頒俊鎭紝濡傛灉鎴戜滑鎵ц“鎬繪帶 Makefile”鏃舵湁make鍙傛暟鎴栨槸鍦ㄤ笂灞侻akefile涓畾涔変簡榪欎釜鍙橀噺錛岄偅涔圡AKEFILES鍙橀噺灝嗕細鏄繖浜涘弬鏁幫紝騫朵細浼犻掑埌涓嬪眰 Makefile涓紝榪欐槸涓涓郴緇熺駭鐨勭幆澧冨彉閲忋?/font>

浣嗘槸make鍛戒護涓殑鏈夊嚑涓弬鏁板茍涓嶅線涓嬩紶閫掞紝瀹冧滑鏄?#8220;-C”,“-f”,“-h”“-o”鍜?#8220;-W”錛堟湁鍏矼akefile鍙傛暟鐨勭粏鑺傚皢鍦ㄥ悗闈㈣鏄庯級錛屽鏋滀綘涓嶆兂寰涓嬪眰浼犻掑弬鏁幫紝閭d箞錛屼綘鍙互榪欐牱鏉ワ細

    subsystem:
            cd subdir && $(MAKE) MAKEFLAGS=

濡傛灉浣犲畾涔変簡鐜鍙橀噺MAKEFLAGS錛岄偅涔堜綘寰楃‘淇″叾涓殑閫夐」鏄ぇ瀹墮兘浼氱敤鍒扮殑錛屽鏋滃叾涓湁“-t”,“-n”,鍜?#8220;-q”鍙傛暟錛岄偅涔堝皢浼氭湁璁╀綘鎰忔兂涓嶅埌鐨勭粨鏋滐紝鎴栬浼氳浣犲紓甯稿湴鎭愭厡銆?/font>

榪樻湁涓涓湪“宓屽鎵ц”涓瘮杈冩湁鐢ㄧ殑鍙傛暟錛?#8220;-w”鎴栨槸“--print- directory”浼氬湪make鐨勮繃紼嬩腑杈撳嚭涓浜涗俊鎭紝璁╀綘鐪嬪埌鐩墠鐨勫伐浣滅洰褰曘傛瘮濡傦紝濡傛灉鎴戜滑鐨勪笅綰ake鐩綍鏄?#8220;/home/hchen/gnu /make”錛屽鏋滄垜浠嬌鐢?#8220;make -w”鏉ユ墽琛岋紝閭d箞褰撹繘鍏ヨ鐩綍鏃訛紝鎴戜滑浼氱湅鍒幫細

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

鑰屽湪瀹屾垚涓嬪眰make鍚庣寮鐩綍鏃訛紝鎴戜滑浼氱湅鍒幫細

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

褰撲綘浣跨敤“-C”鍙傛暟鏉ユ寚瀹歮ake涓嬪眰Makefile鏃訛紝“-w”浼氳鑷姩鎵撳紑鐨勩傚鏋滃弬鏁頒腑鏈?#8220;-s”錛?#8220;--slient”錛夋垨鏄?#8220;--no-print-directory”錛岄偅涔堬紝“-w”鎬繪槸澶辨晥鐨勩?/font>



浜斻佸畾涔夊懡浠ゅ寘

濡傛灉Makefile涓嚭鐜頒竴浜涚浉鍚屽懡浠ゅ簭鍒楋紝閭d箞鎴戜滑鍙互涓鴻繖浜涚浉鍚岀殑鍛戒護搴忓垪瀹氫箟涓涓彉閲忋傚畾涔夎繖縐嶅懡浠ゅ簭鍒楃殑璇硶浠?#8220;define”寮濮嬶紝浠?#8220;endef”緇撴潫錛屽錛?/font>

    define run-yacc
    yacc $(firstword $^)
    mv y.tab.c $@
    endef

榪欓噷錛?#8220;run-yacc”鏄繖涓懡浠ゅ寘鐨勫悕瀛楋紝鍏朵笉瑕佸拰Makefile涓殑鍙橀噺閲嶅悕銆傚湪 “define”鍜?#8220;endef”涓殑涓よ灝辨槸鍛戒護搴忓垪銆傝繖涓懡浠ゅ寘涓殑絎竴涓懡浠ゆ槸榪愯Yacc紼嬪簭錛屽洜涓篩acc紼嬪簭鎬繪槸鐢熸垚“y.tab.c”鐨勬枃 浠訛紝鎵浠ョ浜岃鐨勫懡浠ゅ氨鏄妸榪欎釜鏂囦歡鏀規敼鍚嶅瓧銆傝繕鏄妸榪欎釜鍛戒護鍖呮斁鍒頒竴涓ず渚嬩腑鏉ョ湅鐪嬪惂銆?/font>

    foo.c : foo.y
            $(run-yacc)

鎴戜滑鍙互鐪嬭錛岃浣跨敤榪欎釜鍛戒護鍖咃紝鎴戜滑灝卞ソ鍍忎嬌鐢ㄥ彉閲忎竴鏍楓傚湪榪欎釜鍛戒護鍖呯殑浣跨敤涓紝鍛戒護鍖? “run-yacc”涓殑“$^”灝辨槸“foo.y”錛?#8220;$@”灝辨槸“foo.c”錛堟湁鍏寵繖縐嶄互“$”寮澶寸殑鐗規畩鍙橀噺錛屾垜浠細鍦ㄥ悗闈粙緇嶏級錛宮ake鍦ㄦ墽 琛屽懡浠ゅ寘鏃訛紝鍛戒護鍖呬腑鐨勬瘡涓懡浠や細琚緷嬈$嫭绔嬫墽琛屻?/font>



]]>
璺熸垜涓璧峰啓 Makefilehttp://www.shnenglu.com/yehongly/archive/2008/09/18/62197.html鑼?/dc:creator>鑼?/author>Thu, 18 Sep 2008 09:39:00 GMThttp://www.shnenglu.com/yehongly/archive/2008/09/18/62197.htmlhttp://www.shnenglu.com/yehongly/comments/62197.htmlhttp://www.shnenglu.com/yehongly/archive/2008/09/18/62197.html#Feedback0http://www.shnenglu.com/yehongly/comments/commentRss/62197.htmlhttp://www.shnenglu.com/yehongly/services/trackbacks/62197.html

姒傝堪
鈥斺?/strong>

浠涔堟槸makefile錛熸垨璁稿緢澶歐inodws鐨勭▼搴忓憳閮戒笉鐭ラ亾榪欎釜涓滆タ錛屽洜涓洪偅浜? Windows鐨処DE閮戒負浣犲仛浜嗚繖涓伐浣滐紝浣嗘垜瑙夊緱瑕佷綔涓涓ソ鐨勫拰professional鐨勭▼搴忓憳錛宮akefile榪樻槸瑕佹噦銆傝繖灝卞ソ鍍忕幇鍦ㄦ湁榪欎箞澶? 鐨凥TML鐨勭紪杈戝櫒錛屼絾濡傛灉浣犳兂鎴愪負涓涓笓涓氫漢澹紝浣犺繕鏄浜嗚ВHTML鐨勬爣璇嗙殑鍚箟銆傜壒鍒湪Unix涓嬬殑杞歡緙栬瘧錛屼綘灝變笉鑳戒笉鑷繁鍐檓akefile 浜嗭紝浼氫笉浼氬啓makefile錛屼粠涓涓晶闈㈣鏄庝簡涓涓漢鏄惁鍏峰瀹屾垚澶у瀷宸ョ▼鐨勮兘鍔涖?/font>

鍥犱負錛宮akefile鍏崇郴鍒頒簡鏁翠釜宸ョ▼鐨勭紪璇戣鍒欍備竴涓伐紼嬩腑鐨勬簮鏂囦歡涓嶈鏁幫紝鍏舵寜綾誨瀷銆佸姛 鑳姐佹ā鍧楀垎鍒斁鍦ㄨ嫢騫蹭釜鐩綍涓紝makefile瀹氫箟浜嗕竴緋誨垪鐨勮鍒欐潵鎸囧畾錛屽摢浜涙枃浠墮渶瑕佸厛緙栬瘧錛屽摢浜涙枃浠墮渶瑕佸悗緙栬瘧錛屽摢浜涙枃浠墮渶瑕侀噸鏂扮紪璇戯紝鐢氳嚦浜庤繘琛? 鏇村鏉傜殑鍔熻兘鎿嶄綔錛屽洜涓簃akefile灝卞儚涓涓猄hell鑴氭湰涓鏍鳳紝鍏朵腑涔熷彲浠ユ墽琛屾搷浣滅郴緇熺殑鍛戒護銆?/font>

makefile甯︽潵鐨勫ソ澶勫氨鏄斺?#8220;鑷姩鍖栫紪璇?#8221;錛屼竴鏃﹀啓濂斤紝鍙渶瑕佷竴涓猰ake鍛戒護錛屾暣涓? 宸ョ▼瀹屽叏鑷姩緙栬瘧錛屾瀬澶х殑鎻愰珮浜嗚蔣浠跺紑鍙戠殑鏁堢巼銆俶ake鏄竴涓懡浠ゅ伐鍏鳳紝鏄竴涓В閲妋akefile涓寚浠ょ殑鍛戒護宸ュ叿錛屼竴鑸潵璇達紝澶у鏁扮殑IDE閮芥湁榪? 涓懡浠わ紝姣斿錛欴elphi鐨刴ake錛孷isual C++鐨刵make錛孡inux涓婫NU鐨刴ake銆傚彲瑙侊紝makefile閮芥垚涓轟簡涓縐嶅湪宸ョ▼鏂歸潰鐨勭紪璇戞柟娉曘?/font>

鐜板湪璁茶堪濡備綍鍐檓akefile鐨勬枃绔犳瘮杈冨皯錛岃繖鏄垜鎯沖啓榪欑瘒鏂囩珷鐨勫師鍥犮傚綋鐒訛紝涓嶅悓浜у晢鐨? make鍚勪笉鐩稿悓錛屼篃鏈変笉鍚岀殑璇硶錛屼絾鍏舵湰璐ㄩ兘鏄湪“鏂囦歡渚濊禆鎬?#8221;涓婂仛鏂囩珷錛岃繖閲岋紝鎴戜粎瀵笹NU鐨刴ake榪涜璁茶堪錛屾垜鐨勭幆澧冩槸RedHat Linux 8.0錛宮ake鐨勭増鏈槸3.80銆傚繀绔燂紝榪欎釜make鏄簲鐢ㄦ渶涓哄箍娉涚殑錛屼篃鏄敤寰楁渶澶氱殑銆傝屼笖鍏惰繕鏄渶閬靛驚浜嶪EEE 1003.2-1992 鏍囧噯鐨勶紙POSIX.2錛夈?/font>

鍦ㄨ繖綃囨枃妗d腑錛屽皢浠/C++鐨勬簮鐮佷綔涓烘垜浠熀紜錛屾墍浠ュ繀鐒舵秹鍙婁竴浜涘叧浜嶤/C++鐨勭紪璇戠殑鐭ヨ瘑錛岀浉鍏充簬榪欐柟闈㈢殑鍐呭錛岃繕璇峰悇浣嶆煡鐪嬬浉鍏崇殑緙栬瘧鍣ㄧ殑鏂囨。銆傝繖閲屾墍榛樿鐨勭紪璇戝櫒鏄疷NIX涓嬬殑GCC鍜孋C銆?/font>

 

鍏充簬紼嬪簭鐨勭紪璇戝拰閾炬帴
鈥斺斺斺斺斺斺斺斺斺?/strong>

鍦ㄦ錛屾垜鎯沖璇村叧浜庣▼搴忕紪璇戠殑涓浜涜鑼冨拰鏂規硶錛屼竴鑸潵璇達紝鏃犺鏄疌銆丆++銆佽繕鏄痯as錛岄鍏? 瑕佹妸婧愭枃浠剁紪璇戞垚涓棿浠g爜鏂囦歡錛屽湪Windows涓嬩篃灝辨槸 .obj 鏂囦歡錛孶NIX涓嬫槸 .o 鏂囦歡錛屽嵆 Object File錛岃繖涓姩浣滃彨鍋氱紪璇戯紙compile錛夈傜劧鍚庡啀鎶婂ぇ閲忕殑Object File鍚堟垚鎵ц鏂囦歡錛岃繖涓姩浣滃彨浣滈摼鎺ワ紙link錛夈?/font>

緙栬瘧鏃訛紝緙栬瘧鍣ㄩ渶瑕佺殑鏄娉曠殑姝g‘錛屽嚱鏁頒笌鍙橀噺鐨勫0鏄庣殑姝g‘銆傚浜庡悗鑰咃紝閫氬父鏄綘闇瑕佸憡璇夌紪璇? 鍣ㄥご鏂囦歡鐨勬墍鍦ㄤ綅緗紙澶存枃浠朵腑搴旇鍙槸澹版槑錛岃屽畾涔夊簲璇ユ斁鍦–/C++鏂囦歡涓級錛屽彧瑕佹墍鏈夌殑璇硶姝g‘錛岀紪璇戝櫒灝卞彲浠ョ紪璇戝嚭涓棿鐩爣鏂囦歡銆備竴鑸潵璇達紝姣忎釜婧? 鏂囦歡閮藉簲璇ュ搴斾簬涓涓腑闂寸洰鏍囨枃浠訛紙O鏂囦歡鎴栨槸OBJ鏂囦歡錛夈?/font>

閾炬帴鏃訛紝涓昏鏄摼鎺ュ嚱鏁板拰鍏ㄥ眬鍙橀噺錛屾墍浠ワ紝鎴戜滑鍙互浣跨敤榪欎簺涓棿鐩爣鏂囦歡錛圤鏂囦歡鎴栨槸OBJ鏂? 浠訛級鏉ラ摼鎺ユ垜浠殑搴旂敤紼嬪簭銆傞摼鎺ュ櫒騫朵笉綆″嚱鏁版墍鍦ㄧ殑婧愭枃浠訛紝鍙鍑芥暟鐨勪腑闂寸洰鏍囨枃浠訛紙Object File錛夛紝鍦ㄥぇ澶氭暟鏃跺欙紝鐢變簬婧愭枃浠跺お澶氾紝緙栬瘧鐢熸垚鐨勪腑闂寸洰鏍囨枃浠跺お澶氾紝鑰屽湪閾炬帴鏃墮渶瑕佹槑鏄懼湴鎸囧嚭涓棿鐩爣鏂囦歡鍚嶏紝榪欏浜庣紪璇戝緢涓嶆柟渚匡紝鎵浠ワ紝鎴戜滑瑕佺粰 涓棿鐩爣鏂囦歡鎵撲釜鍖咃紝鍦╓indows涓嬭繖縐嶅寘鍙?#8220;搴撴枃浠?#8221;錛圠ibrary File)錛屼篃灝辨槸 .lib 鏂囦歡錛屽湪UNIX涓嬶紝鏄疉rchive File錛屼篃灝辨槸 .a 鏂囦歡銆?/font>

鎬葷粨涓涓嬶紝婧愭枃浠墮鍏堜細鐢熸垚涓棿鐩爣鏂囦歡錛屽啀鐢變腑闂寸洰鏍囨枃浠剁敓鎴愭墽琛屾枃浠躲傚湪緙栬瘧鏃訛紝緙栬瘧鍣ㄥ彧 媯嫻嬬▼搴忚娉曪紝鍜屽嚱鏁般佸彉閲忔槸鍚﹁澹版槑銆傚鏋滃嚱鏁版湭琚0鏄庯紝緙栬瘧鍣ㄤ細緇欏嚭涓涓鍛婏紝浣嗗彲浠ョ敓鎴怬bject File銆傝屽湪閾炬帴紼嬪簭鏃訛紝閾炬帴鍣ㄤ細鍦ㄦ墍鏈夌殑Object File涓壘瀵誨嚱鏁扮殑瀹炵幇錛屽鏋滄壘涓嶅埌錛岄偅鍒板氨浼氭姤閾炬帴閿欒鐮侊紙Linker Error錛夛紝鍦╒C涓嬶紝榪欑閿欒涓鑸槸錛歀ink 2001閿欒錛屾剰鎬濊鏄錛岄摼鎺ュ櫒鏈兘鎵懼埌鍑芥暟鐨勫疄鐜般備綘闇瑕佹寚瀹氬嚱鏁扮殑Object File.

濂斤紝璦褰掓浼狅紝GNU鐨刴ake鏈夎澶氱殑鍐呭錛岄棽璦灝戝彊錛岃繕鏄鎴戜滑寮濮嬪惂銆?/font>

 

Makefile 浠嬬粛
鈥斺斺斺斺斺斺?/strong>

make鍛戒護鎵ц鏃訛紝闇瑕佷竴涓?Makefile 鏂囦歡錛屼互鍛婅瘔make鍛戒護闇瑕佹庝箞鏍風殑鍘葷紪璇戝拰閾炬帴紼嬪簭銆?/font>

棣栧厛錛屾垜浠敤涓涓ず渚嬫潵璇存槑Makefile鐨勪功鍐欒鍒欍備互渚跨粰澶у涓涓劅鍏磋璇嗐傝繖涓ず渚嬫潵婧愪簬GNU鐨刴ake浣跨敤鎵嬪唽錛屽湪榪欎釜紺轟緥涓紝鎴戜滑鐨勫伐紼嬫湁8涓狢鏂囦歡錛屽拰3涓ご鏂囦歡錛屾垜浠鍐欎竴涓狹akefile鏉ュ憡璇塵ake鍛戒護濡備綍緙栬瘧鍜岄摼鎺ヨ繖鍑犱釜鏂囦歡銆傛垜浠殑瑙勫垯鏄細
    1錛夊鏋滆繖涓伐紼嬫病鏈夌紪璇戣繃錛岄偅涔堟垜浠殑鎵鏈塁鏂囦歡閮借緙栬瘧騫惰閾炬帴銆?br>    2錛夊鏋滆繖涓伐紼嬬殑鏌愬嚑涓狢鏂囦歡琚慨鏀癸紝閭d箞鎴戜滑鍙紪璇戣淇敼鐨凜鏂囦歡錛屽茍閾炬帴鐩爣紼嬪簭銆?br>    3錛夊鏋滆繖涓伐紼嬬殑澶存枃浠惰鏀瑰彉浜嗭紝閭d箞鎴戜滑闇瑕佺紪璇戝紩鐢ㄤ簡榪欏嚑涓ご鏂囦歡鐨凜鏂囦歡錛屽茍閾炬帴鐩爣紼嬪簭銆?/font>

鍙鎴戜滑鐨凪akefile鍐欏緱澶熷ソ錛屾墍鏈夌殑榪欎竴鍒囷紝鎴戜滑鍙敤涓涓猰ake鍛戒護灝卞彲浠ュ畬鎴愶紝make鍛戒護浼氳嚜鍔ㄦ櫤鑳藉湴鏍規嵁褰撳墠鐨勬枃浠朵慨鏀圭殑鎯呭喌鏉ョ‘瀹氬摢浜涙枃浠墮渶瑕侀噸緙栬瘧錛屼粠鑰岃嚜宸辯紪璇戞墍闇瑕佺殑鏂囦歡鍜岄摼鎺ョ洰鏍囩▼搴忋?/font>


涓銆丮akefile鐨勮鍒?/strong>

鍦ㄨ榪拌繖涓狹akefile涔嬪墠錛岃繕鏄鎴戜滑鍏堟潵綺楃暐鍦扮湅涓鐪婱akefile鐨勮鍒欍?/font>

    target ... : prerequisites ...
            command
            ...
            ...

    target涔熷氨鏄竴涓洰鏍囨枃浠訛紝鍙互鏄疧bject File錛屼篃鍙互鏄墽琛屾枃浠躲傝繕鍙互鏄竴涓爣絳撅紙Label錛夛紝瀵逛簬鏍囩榪欑鐗規э紝鍦ㄥ悗緇殑“浼洰鏍?#8221;绔犺妭涓細鏈夊彊榪般?/font>

    prerequisites灝辨槸錛岃鐢熸垚閭d釜target鎵闇瑕佺殑鏂囦歡鎴栨槸鐩爣銆?/font>

    command涔熷氨鏄痬ake闇瑕佹墽琛岀殑鍛戒護銆傦紙浠繪剰鐨凷hell鍛戒護錛?/font>

榪欐槸涓涓枃浠剁殑渚濊禆鍏崇郴錛屼篃灝辨槸璇達紝target榪欎竴涓垨澶氫釜鐨勭洰鏍囨枃浠朵緷璧栦簬 prerequisites涓殑鏂囦歡錛屽叾鐢熸垚瑙勫垯瀹氫箟鍦╟ommand涓傝鐧戒竴鐐瑰氨鏄錛宲rerequisites涓鏋滄湁涓涓互涓婄殑鏂囦歡姣? target鏂囦歡瑕佹柊鐨勮瘽錛宑ommand鎵瀹氫箟鐨勫懡浠ゅ氨浼氳鎵ц銆傝繖灝辨槸Makefile鐨勮鍒欍備篃灝辨槸Makefile涓渶鏍稿績鐨勫唴瀹廣?/font>

璇村埌搴曪紝Makefile鐨勪笢瑗垮氨鏄繖鏍蜂竴鐐癸紝濂藉儚鎴戠殑榪欑瘒鏂囨。涔熻緇撴潫浜嗐傚懙鍛點傝繕涓嶅敖鐒訛紝榪欐槸Makefile鐨勪富綰垮拰鏍稿績錛屼絾瑕佸啓濂戒竴涓狹akefile榪樹笉澶燂紝鎴戜細浠ュ悗闈竴鐐逛竴鐐瑰湴緇撳悎鎴戠殑宸ヤ綔緇忛獙緇欎綘鎱㈡參鍒版潵銆傚唴瀹硅繕澶氱潃鍛€傦細錛?/font>


浜屻佷竴涓ず渚?/strong>

姝e鍓嶉潰鎵璇寸殑錛屽鏋滀竴涓伐紼嬫湁3涓ご鏂囦歡錛屽拰8涓狢鏂囦歡錛屾垜浠負浜嗗畬鎴愬墠闈㈡墍榪扮殑閭d笁涓鍒欙紝鎴戜滑鐨凪akefile搴旇鏄笅闈㈢殑榪欎釜鏍峰瓙鐨勩?/font>

    edit : main.o kbd.o command.o display.o \
           insert.o search.o files.o utils.o
            cc -o edit main.o kbd.o command.o display.o \
                       insert.o search.o files.o utils.o

    main.o : main.c defs.h
            cc -c main.c
    kbd.o : kbd.c defs.h command.h
            cc -c kbd.c
    command.o : command.c defs.h command.h
            cc -c command.c
    display.o : display.c defs.h buffer.h
            cc -c display.c
    insert.o : insert.c defs.h buffer.h
            cc -c insert.c
    search.o : search.c defs.h buffer.h
            cc -c search.c
    files.o : files.c defs.h buffer.h command.h
            cc -c files.c
    utils.o : utils.c defs.h
            cc -c utils.c
    clean :
            rm edit main.o kbd.o command.o display.o \
               insert.o search.o files.o utils.o

鍙嶆枩鏉狅紙\錛夋槸鎹㈣絎︾殑鎰忔濄傝繖鏍鋒瘮杈冧究浜嶮akefile鐨勬槗璇匯傛垜浠彲浠ユ妸榪欎釜鍐呭淇濆瓨鍦? 鏂囦歡涓?#8220;Makefile”鎴?#8220;makefile”鐨勬枃浠朵腑錛岀劧鍚庡湪璇ョ洰褰曚笅鐩存帴杈撳叆鍛戒護“make”灝卞彲浠ョ敓鎴愭墽琛屾枃浠秂dit銆傚鏋滆鍒犻櫎鎵ц鏂囦歡鍜? 鎵鏈夌殑涓棿鐩爣鏂囦歡錛岄偅涔堬紝鍙綆鍗曞湴鎵ц涓涓?#8220;make clean”灝卞彲浠ヤ簡銆?/font>

鍦ㄨ繖涓猰akefile涓紝鐩爣鏂囦歡錛坱arget錛夊寘鍚細鎵ц鏂囦歡edit鍜屼腑闂寸洰鏍囨枃浠? 錛?.o錛夛紝渚濊禆鏂囦歡錛坧rerequisites錛夊氨鏄啋鍙峰悗闈㈢殑閭d簺 .c 鏂囦歡鍜?.h鏂囦歡銆傛瘡涓涓?.o 鏂囦歡閮芥湁涓緇勪緷璧栨枃浠訛紝鑰岃繖浜?.o 鏂囦歡鍙堟槸鎵ц鏂囦歡 edit 鐨勪緷璧栨枃浠躲備緷璧栧叧緋葷殑瀹炶川涓婂氨鏄鏄庝簡鐩爣鏂囦歡鏄敱鍝簺鏂囦歡鐢熸垚鐨勶紝鎹㈣█涔嬶紝鐩爣鏂囦歡鏄摢浜涙枃浠舵洿鏂扮殑銆?/font>

鍦ㄥ畾涔夊ソ渚濊禆鍏崇郴鍚庯紝鍚庣畫鐨勯偅涓琛屽畾涔変簡濡備綍鐢熸垚鐩爣鏂囦歡鐨勬搷浣滅郴緇熷懡浠わ紝涓瀹氳浠ヤ竴涓猅ab 閿綔涓哄紑澶淬傝浣忥紝make騫朵笉綆″懡浠ゆ槸鎬庝箞宸ヤ綔鐨勶紝浠栧彧綆℃墽琛屾墍瀹氫箟鐨勫懡浠ゃ俶ake浼氭瘮杈僼argets鏂囦歡鍜宲rerequisites鏂囦歡鐨勪慨鏀? 鏃ユ湡錛屽鏋減rerequisites鏂囦歡鐨勬棩鏈熻姣攖argets鏂囦歡鐨勬棩鏈熻鏂幫紝鎴栬卼arget涓嶅瓨鍦ㄧ殑璇濓紝閭d箞錛宮ake灝變細鎵ц鍚庣畫瀹氫箟鐨勫懡 浠ゃ?/font>

榪欓噷瑕佽鏄庝竴鐐圭殑鏄紝clean涓嶆槸涓涓枃浠訛紝瀹冨彧涓嶈繃鏄竴涓姩浣滃悕瀛楋紝鏈夌偣鍍廋璇█涓殑 lable涓鏍鳳紝鍏跺啋鍙峰悗浠涔堜篃娌℃湁錛岄偅涔堬紝make灝變笉浼氳嚜鍔ㄥ幓鎵炬枃浠剁殑渚濊禆鎬э紝涔熷氨涓嶄細鑷姩鎵ц鍏跺悗鎵瀹氫箟鐨勫懡浠ゃ傝鎵ц鍏跺悗鐨勫懡浠わ紝灝辮鍦╩ake 鍛戒護鍚庢槑鏄懼緱鎸囧嚭榪欎釜lable鐨勫悕瀛椼傝繖鏍風殑鏂規硶闈炲父鏈夌敤錛屾垜浠彲浠ュ湪涓涓猰akefile涓畾涔変笉鐢ㄧ殑緙栬瘧鎴栨槸鍜岀紪璇戞棤鍏崇殑鍛戒護錛屾瘮濡傜▼搴忕殑鎵撳寘錛岀▼ 搴忕殑澶囦喚錛岀瓑絳夈?/font>

涓夈乵ake鏄浣曞伐浣滅殑

鍦ㄩ粯璁ょ殑鏂瑰紡涓嬶紝涔熷氨鏄垜浠彧杈撳叆make鍛戒護銆傞偅涔堬紝

    1銆乵ake浼氬湪褰撳墠鐩綍涓嬫壘鍚嶅瓧鍙?#8220;Makefile”鎴?#8220;makefile”鐨勬枃浠躲?br>    2銆佸鏋滄壘鍒幫紝瀹冧細鎵炬枃浠朵腑鐨勭涓涓洰鏍囨枃浠訛紙target錛夛紝鍦ㄤ笂闈㈢殑渚嬪瓙涓紝浠栦細鎵懼埌“edit”榪欎釜鏂囦歡錛屽茍鎶婅繖涓枃浠朵綔涓烘渶緇堢殑鐩爣鏂囦歡銆?br>    3銆佸鏋渆dit鏂囦歡涓嶅瓨鍦紝鎴栨槸edit鎵渚濊禆鐨勫悗闈㈢殑 .o 鏂囦歡鐨勬枃浠朵慨鏀規椂闂磋姣攅dit榪欎釜鏂囦歡鏂幫紝閭d箞錛屼粬灝變細鎵ц鍚庨潰鎵瀹氫箟鐨勫懡浠ゆ潵鐢熸垚edit榪欎釜鏂囦歡銆?br>    4銆佸鏋渆dit鎵渚濊禆鐨?o鏂囦歡涔熷瓨鍦紝閭d箞make浼氬湪褰撳墠鏂囦歡涓壘鐩爣涓?o鏂囦歡鐨勪緷璧栨э紝濡傛灉鎵懼埌鍒欏啀鏍規嵁閭d竴涓鍒欑敓鎴?o鏂囦歡銆傦紙榪欐湁鐐瑰儚涓涓爢鏍堢殑榪囩▼錛?br>    5銆佸綋鐒訛紝浣犵殑C鏂囦歡鍜孒鏂囦歡鏄瓨鍦ㄧ殑鍟︼紝浜庢槸make浼氱敓鎴?.o 鏂囦歡錛岀劧鍚庡啀鐢?.o 鏂囦歡鐢熷懡make鐨勭粓鏋佷換鍔★紝涔熷氨鏄墽琛屾枃浠秂dit浜嗐?/font>

榪欏氨鏄暣涓猰ake鐨勪緷璧栨э紝make浼氫竴灞傚張涓灞傚湴鍘繪壘鏂囦歡鐨勪緷璧栧叧緋伙紝鐩村埌鏈緇堢紪璇戝嚭絎竴 涓洰鏍囨枃浠躲傚湪鎵懼鐨勮繃紼嬩腑錛屽鏋滃嚭鐜伴敊璇紝姣斿鏈鍚庤渚濊禆鐨勬枃浠舵壘涓嶅埌錛岄偅涔坢ake灝變細鐩存帴閫鍑猴紝騫舵姤閿欙紝鑰屽浜庢墍瀹氫箟鐨勫懡浠ょ殑閿欒錛屾垨鏄紪璇戜笉鎴? 鍔燂紝make鏍規湰涓嶇悊銆俶ake鍙鏂囦歡鐨勪緷璧栨э紝鍗籌紝濡傛灉鍦ㄦ垜鎵句簡渚濊禆鍏崇郴涔嬪悗錛屽啋鍙峰悗闈㈢殑鏂囦歡榪樻槸涓嶅湪錛岄偅涔堝涓嶈搗錛屾垜灝變笉宸ヤ綔鍟︺?/font>

閫氳繃涓婅堪鍒嗘瀽錛屾垜浠煡閬擄紝鍍廲lean榪欑錛屾病鏈夎絎竴涓洰鏍囨枃浠剁洿鎺ユ垨闂存帴鍏寵仈錛岄偅涔堝畠鍚庨潰鎵瀹氫箟鐨勫懡浠ゅ皢涓嶄細琚嚜鍔ㄦ墽琛岋紝涓嶈繃錛屾垜浠彲浠ユ樉紺鴻make鎵ц銆傚嵆鍛戒護鈥斺?#8220;make clean”錛屼互姝ゆ潵娓呴櫎鎵鏈夌殑鐩爣鏂囦歡錛屼互渚塊噸緙栬瘧銆?/font>

浜庢槸鍦ㄦ垜浠紪紼嬩腑錛屽鏋滆繖涓伐紼嬪凡琚紪璇戣繃浜嗭紝褰撴垜浠慨鏀逛簡鍏朵腑涓涓簮鏂囦歡錛屾瘮濡? file.c錛岄偅涔堟牴鎹垜浠殑渚濊禆鎬э紝鎴戜滑鐨勭洰鏍噁ile.o浼氳閲嶇紪璇戯紙涔熷氨鏄湪榪欎釜渚濇у叧緋誨悗闈㈡墍瀹氫箟鐨勫懡浠わ級錛屼簬鏄痜ile.o鐨勬枃浠朵篃鏄渶鏂扮殑 鍟︼紝浜庢槸file.o鐨勬枃浠朵慨鏀規椂闂磋姣攅dit瑕佹柊錛屾墍浠dit涔熶細琚噸鏂伴摼鎺ヤ簡錛堣瑙乪dit鐩爣鏂囦歡鍚庡畾涔夌殑鍛戒護錛夈?/font>

鑰屽鏋滄垜浠敼鍙樹簡“command.h”錛岄偅涔堬紝kdb.o銆乧ommand.o鍜宖iles.o閮戒細琚噸緙栬瘧錛屽茍涓旓紝edit浼氳閲嶉摼鎺ャ?/font>


鍥涖乵akefile涓嬌鐢ㄥ彉閲?/strong>

鍦ㄤ笂闈㈢殑渚嬪瓙涓紝鍏堣鎴戜滑鐪嬬湅edit鐨勮鍒欙細

      edit : main.o kbd.o command.o display.o \
                  insert.o search.o files.o utils.o
            cc -o edit main.o kbd.o command.o display.o \
                       insert.o search.o files.o utils.o

鎴戜滑鍙互鐪嬪埌[.o]鏂囦歡鐨勫瓧絎︿覆琚噸澶嶄簡涓ゆ錛屽鏋滄垜浠殑宸ョ▼闇瑕佸姞鍏ヤ竴涓柊鐨刐.o]鏂? 浠訛紝閭d箞鎴戜滑闇瑕佸湪涓や釜鍦版柟鍔狅紙搴旇鏄笁涓湴鏂癸紝榪樻湁涓涓湴鏂瑰湪clean涓級銆傚綋鐒訛紝鎴戜滑鐨刴akefile騫朵笉澶嶆潅錛屾墍浠ュ湪涓や釜鍦版柟鍔犱篃涓嶇瘡錛屼絾濡傛灉 makefile鍙樺緱澶嶆潅錛岄偅涔堟垜浠氨鏈夊彲鑳戒細蹇樻帀涓涓渶瑕佸姞鍏ョ殑鍦版柟錛岃屽鑷寸紪璇戝け璐ャ傛墍浠ワ紝涓轟簡makefile鐨勬槗緇存姢錛屽湪makefile涓垜浠? 鍙互浣跨敤鍙橀噺銆俶akefile鐨勫彉閲忎篃灝辨槸涓涓瓧絎︿覆錛岀悊瑙f垚C璇█涓殑瀹忓彲鑳戒細鏇村ソ銆?/font>

姣斿錛屾垜浠0鏄庝竴涓彉閲忥紝鍙玱bjects, OBJECTS, objs, OBJS, obj, 鎴栨槸 OBJ錛屽弽姝d笉綆′粈涔堝暒錛屽彧瑕佽兘澶熻〃紺簅bj鏂囦歡灝辮浜嗐傛垜浠湪makefile涓寮濮嬪氨榪欐牱瀹氫箟錛?/font>

     objects = main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

浜庢槸錛屾垜浠氨鍙互寰堟柟渚垮湴鍦ㄦ垜浠殑makefile涓互“$(objects)”鐨勬柟寮忔潵浣跨敤榪欎釜鍙橀噺浜嗭紝浜庢槸鎴戜滑鐨勬敼鑹増makefile灝卞彉鎴愪笅闈㈣繖涓牱瀛愶細

    objects = main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

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


浜庢槸濡傛灉鏈夋柊鐨?.o 鏂囦歡鍔犲叆錛屾垜浠彧闇綆鍗曞湴淇敼涓涓?objects 鍙橀噺灝卞彲浠ヤ簡銆?/font>

鍏充簬鍙橀噺鏇村鐨勮瘽棰橈紝鎴戜細鍦ㄥ悗緇粰浣犱竴涓閬撴潵銆?/font>


浜斻佽make鑷姩鎺ㄥ

GNU鐨刴ake寰堝己澶э紝瀹冨彲浠ヨ嚜鍔ㄦ帹瀵兼枃浠朵互鍙婃枃浠朵緷璧栧叧緋誨悗闈㈢殑鍛戒護錛屼簬鏄垜浠氨娌″繀瑕佸幓鍦ㄦ瘡涓涓猍.o]鏂囦歡鍚庨兘鍐欎笂綾諱技鐨勫懡浠わ紝鍥犱負錛屾垜浠殑make浼氳嚜鍔ㄨ瘑鍒紝騫惰嚜宸辨帹瀵煎懡浠ゃ?/font>

鍙make鐪嬪埌涓涓猍.o]鏂囦歡錛屽畠灝變細鑷姩鐨勬妸[.c]鏂囦歡鍔犲湪渚濊禆鍏崇郴涓紝濡傛灉make 鎵懼埌涓涓獁hatever.o錛岄偅涔坵hatever.c錛屽氨浼氭槸whatever.o鐨勪緷璧栨枃浠躲傚茍涓?cc -c whatever.c 涔熶細琚帹瀵煎嚭鏉ワ紝浜庢槸錛屾垜浠殑makefile鍐嶄篃涓嶇敤鍐欏緱榪欎箞澶嶆潅銆傛垜浠殑鏄柊鐨刴akefile鍙堝嚭鐐変簡銆?/font>


    objects = main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

    edit : $(objects)
            cc -o edit $(objects)

    main.o : defs.h
    kbd.o : defs.h command.h
    command.o : defs.h command.h
    display.o : defs.h buffer.h
    insert.o : defs.h buffer.h
    search.o : defs.h buffer.h
    files.o : defs.h buffer.h command.h
    utils.o : defs.h

    .PHONY : clean
    clean :
            rm edit $(objects)

榪欑鏂規硶錛屼篃灝辨槸make鐨?#8220;闅愭櫐瑙勫垯”銆備笂闈㈡枃浠跺唴瀹逛腑錛?#8220;.PHONY”琛ㄧず錛宑lean鏄釜浼洰鏍囨枃浠躲?/font>

鍏充簬鏇翠負璇︾粏鐨?#8220;闅愭櫐瑙勫垯”鍜?#8220;浼洰鏍囨枃浠?#8221;錛屾垜浼氬湪鍚庣畫緇欎綘涓涓閬撴潵銆?/font>


鍏佸彟綾婚鏍肩殑makefile

鍗崇劧鎴戜滑鐨刴ake鍙互鑷姩鎺ㄥ鍛戒護錛岄偅涔堟垜鐪嬪埌閭e爢[.o]鍜孾.h]鐨勪緷璧栧氨鏈夌偣涓嶇埥錛岄偅涔堝鐨勯噸澶嶇殑[.h]錛岃兘涓嶈兘鎶婂叾鏀舵嫝璧鋒潵錛屽ソ鍚э紝娌℃湁闂錛岃繖涓浜巑ake鏉ヨ寰堝鏄擄紝璋佸彨瀹冩彁渚涗簡鑷姩鎺ㄥ鍛戒護鍜屾枃浠剁殑鍔熻兘鍛紵鏉ョ湅鐪嬫渶鏂伴鏍肩殑makefile鍚с?/font>

    objects = main.o kbd.o command.o display.o \
              insert.o search.o files.o utils.o

    edit : $(objects)
            cc -o edit $(objects)

    $(objects) : defs.h
    kbd.o command.o files.o : command.h
    display.o insert.o search.o files.o : buffer.h

    .PHONY : clean
    clean :
            rm edit $(objects)

榪欑椋庢牸錛岃鎴戜滑鐨刴akefile鍙樺緱寰堢畝鍗曪紝浣嗘垜浠殑鏂囦歡渚濊禆鍏崇郴灝辨樉寰楁湁鐐瑰噷涔變簡銆傞奔鍜岀唺鎺屼笉鍙吋寰椼傝繕鐪嬩綘鐨勫枩濂戒簡銆傛垜鏄笉鍠滄榪欑椋庢牸鐨勶紝涓鏄枃浠剁殑渚濊禆鍏崇郴鐪嬩笉娓呮錛屼簩鏄鏋滄枃浠朵竴澶氾紝瑕佸姞鍏ュ嚑涓柊鐨?o鏂囦歡錛岄偅灝辯悊涓嶆竻妤氫簡銆?/font>


涓冦佹竻絀虹洰鏍囨枃浠剁殑瑙勫垯

姣忎釜Makefile涓兘搴旇鍐欎竴涓竻絀虹洰鏍囨枃浠訛紙.o鍜屾墽琛屾枃浠訛級鐨勮鍒欙紝榪欎笉浠呬究浜庨噸緙栬瘧錛屼篃寰堝埄浜庝繚鎸佹枃浠剁殑娓呮磥銆傝繖鏄竴涓?#8220;淇吇”錛堝懙鍛碉紝榪樿寰楁垜鐨勩婄紪紼嬩慨鍏匯嬪悧錛夈備竴鑸殑椋庢牸閮芥槸錛?/font>

        clean:
            rm edit $(objects)

鏇翠負紼沖仴鐨勫仛娉曟槸錛?/font>

        .PHONY : clean
        clean :
                -rm edit $(objects)

鍓嶉潰璇磋繃錛?PHONY鎰忔濊〃紺篶lean鏄竴涓?#8220;浼洰鏍?#8221;錛屻傝屽湪rm鍛戒護鍓嶉潰鍔犱簡涓涓皬鍑? 鍙風殑鎰忔濆氨鏄紝涔熻鏌愪簺鏂囦歡鍑虹幇闂錛屼絾涓嶈綆★紝緇х畫鍋氬悗闈㈢殑浜嬨傚綋鐒訛紝clean鐨勮鍒欎笉瑕佹斁鍦ㄦ枃浠剁殑寮澶達紝涓嶇劧錛岃繖灝變細鍙樻垚make鐨勯粯璁ょ洰鏍囷紝鐩鎬俊 璋佷篃涓嶆効鎰忚繖鏍楓備笉鎴愭枃鐨勮鐭╂槸鈥斺?#8220;clean浠庢潵閮芥槸鏀懼湪鏂囦歡鐨勬渶鍚?#8221;銆?/font>


涓婇潰灝辨槸涓涓猰akefile鐨勬璨岋紝涔熸槸makefile鐨勫熀紜錛屼笅闈㈣繕鏈夊緢澶歮akefile鐨勭浉鍏崇粏鑺傦紝鍑嗗濂戒簡鍚楋紵鍑嗗濂戒簡灝辨潵銆?/font>

涓銆丮akefile閲屾湁浠涔堬紵

Makefile閲屼富瑕佸寘鍚簡浜斾釜涓滆タ錛氭樉寮忚鍒欍侀殣鏅﹁鍒欍佸彉閲忓畾涔夈佹枃浠舵寚紺哄拰娉ㄩ噴銆?/font>

1銆佹樉寮忚鍒欍傛樉寮忚鍒欒鏄庝簡錛屽浣曠敓鎴愪竴涓垨澶氱殑鐨勭洰鏍囨枃浠躲傝繖鏄敱Makefile鐨勪功鍐欒呮槑鏄炬寚鍑猴紝瑕佺敓鎴愮殑鏂囦歡錛屾枃浠剁殑渚濊禆鏂囦歡錛岀敓鎴愮殑鍛戒護銆?/font>

2銆侀殣鏅﹁鍒欍傜敱浜庢垜浠殑make鏈夎嚜鍔ㄦ帹瀵肩殑鍔熻兘錛屾墍浠ラ殣鏅︾殑瑙勫垯鍙互璁╂垜浠瘮杈冪矖緋欏湴綆鐣ュ湴涔﹀啓Makefile錛岃繖鏄敱make鎵鏀寔鐨勩?/font>

3銆佸彉閲忕殑瀹氫箟銆傚湪Makefile涓垜浠瀹氫箟涓緋誨垪鐨勫彉閲忥紝鍙橀噺涓鑸兘鏄瓧絎︿覆錛岃繖涓湁鐐逛綘C璇█涓殑瀹忥紝褰揗akefile琚墽琛屾椂錛屽叾涓殑鍙橀噺閮戒細琚墿灞曞埌鐩稿簲鐨勫紩鐢ㄤ綅緗笂銆?/font>

4銆佹枃浠舵寚紺恒傚叾鍖呮嫭浜嗕笁涓儴鍒嗭紝涓涓槸鍦ㄤ竴涓狹akefile涓紩鐢ㄥ彟涓涓? Makefile錛屽氨鍍廋璇█涓殑include涓鏍鳳紱鍙︿竴涓槸鎸囨牴鎹煇浜涙儏鍐墊寚瀹歁akefile涓殑鏈夋晥閮ㄥ垎錛屽氨鍍廋璇█涓殑棰勭紪璇?if涓鏍鳳紱榪樻湁 灝辨槸瀹氫箟涓涓琛岀殑鍛戒護銆傛湁鍏寵繖涓閮ㄥ垎鐨勫唴瀹癸紝鎴戜細鍦ㄥ悗緇殑閮ㄥ垎涓榪般?/font>

5銆佹敞閲娿侻akefile涓彧鏈夎娉ㄩ噴錛屽拰UNIX鐨凷hell鑴氭湰涓鏍鳳紝鍏舵敞閲婃槸鐢?#8220;#”瀛楃錛岃繖涓氨鍍廋/C++涓殑“//”涓鏍楓傚鏋滀綘瑕佸湪浣犵殑Makefile涓嬌鐢?#8220;#”瀛楃錛屽彲浠ョ敤鍙嶆枩妗嗚繘琛岃漿涔夛紝濡傦細“\#”銆?/font>

鏈鍚庯紝榪樺煎緱涓鎻愮殑鏄紝鍦∕akefile涓殑鍛戒護錛屽繀欏昏浠Tab]閿紑濮嬨?/font>


浜屻丮akefile鐨勬枃浠跺悕

榛樿鐨勬儏鍐典笅錛宮ake鍛戒護浼氬湪褰撳墠鐩綍涓嬫寜欏哄簭鎵懼鏂囦歡鍚嶄負“GNUmakefile”銆? “makefile”銆?#8220;Makefile”鐨勬枃浠訛紝鎵懼埌浜嗚В閲婅繖涓枃浠躲傚湪榪欎笁涓枃浠跺悕涓紝鏈濂戒嬌鐢?#8220;Makefile”榪欎釜鏂囦歡鍚嶏紝鍥犱負錛岃繖涓枃浠跺悕 絎竴涓瓧絎︿負澶у啓錛岃繖鏍鋒湁涓縐嶆樉鐩殑鎰熻銆傛渶濂戒笉瑕佺敤“GNUmakefile”錛岃繖涓枃浠舵槸GNU鐨刴ake璇嗗埆鐨勩傛湁鍙﹀涓浜沵ake鍙鍏ㄥ皬鍐欑殑 “makefile”鏂囦歡鍚嶆晱鎰燂紝浣嗘槸鍩烘湰涓婃潵璇達紝澶у鏁扮殑make閮芥敮鎸?#8220;makefile”鍜?#8220;Makefile”榪欎袱縐嶉粯璁ゆ枃浠跺悕銆?/font>

褰撶劧錛屼綘鍙互浣跨敤鍒殑鏂囦歡鍚嶆潵涔﹀啓Makefile錛屾瘮 濡傦細“Make.Linux”錛?#8220;Make.Solaris”錛?#8220;Make.AIX”絳夛紝濡傛灉瑕佹寚瀹氱壒瀹氱殑Makefile錛屼綘鍙互浣跨敤make鐨?#8220;- f”鍜?#8220;--file”鍙傛暟錛屽錛歮ake -f Make.Linux鎴杕ake --file Make.AIX銆?/font>


涓夈佸紩鐢ㄥ叾瀹冪殑Makefile

鍦∕akefile浣跨敤include鍏抽敭瀛楀彲浠ユ妸鍒殑Makefile鍖呭惈榪涙潵錛岃繖寰堝儚C璇█鐨?include錛岃鍖呭惈鐨勬枃浠朵細鍘熸ā鍘熸牱鐨勬斁鍦ㄥ綋鍓嶆枃浠剁殑鍖呭惈浣嶇疆銆俰nclude鐨勮娉曟槸錛?/font>

    include <filename>

    filename鍙互鏄綋鍓嶆搷浣滅郴緇烻hell鐨勬枃浠舵ā寮忥紙鍙互淇濆惈璺緞鍜岄氶厤絎︼級

鍦╥nclude鍓嶉潰鍙互鏈変竴浜涚┖瀛楃錛屼絾鏄粷涓嶈兘鏄痆Tab]閿紑濮嬨俰nclude 鍜?lt;filename>鍙互鐢ㄤ竴涓垨澶氫釜絀烘牸闅斿紑銆備婦涓緥瀛愶紝浣犳湁榪欐牱鍑犱釜Makefile錛歛.mk銆乥.mk銆乧.mk錛岃繕鏈変竴涓枃浠跺彨 foo.make錛屼互鍙婁竴涓彉閲?(bar)錛屽叾鍖呭惈浜唀.mk鍜宖.mk錛岄偅涔堬紝涓嬮潰鐨勮鍙ワ細

    include foo.make *.mk $(bar)

    絳変環浜庯細

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

make鍛戒護寮濮嬫椂錛屼細鎶婃壘瀵籭nclude鎵鎸囧嚭鐨勫叾瀹僊akefile錛屽茍鎶婂叾鍐呭瀹夌疆鍦? 褰撳墠鐨勪綅緗傚氨濂藉儚C/C++鐨?include鎸囦護涓鏍楓傚鏋滄枃浠墮兘娌℃湁鎸囧畾緇濆璺緞鎴栨槸鐩稿璺緞鐨勮瘽錛宮ake浼氬湪褰撳墠鐩綍涓嬮鍏堝鎵撅紝濡傛灉褰撳墠鐩綍 涓嬫病鏈夋壘鍒幫紝閭d箞錛宮ake榪樹細鍦ㄤ笅闈㈢殑鍑犱釜鐩綍涓嬫壘錛?/font>

    1銆佸鏋渕ake鎵ц鏃訛紝鏈?#8220;-I”鎴?#8220;--include-dir”鍙傛暟錛岄偅涔坢ake灝變細鍦ㄨ繖涓弬鏁版墍鎸囧畾鐨勭洰褰曚笅鍘誨鎵俱?br>    2銆佸鏋滅洰褰?lt;prefix>/include錛堜竴鑸槸錛?usr/local/bin鎴?usr/include錛夊瓨鍦ㄧ殑璇濓紝make涔熶細鍘繪壘銆?/font>

濡傛灉鏈夋枃浠舵病鏈夋壘鍒扮殑璇濓紝make浼氱敓鎴愪竴鏉¤鍛婁俊鎭紝浣嗕笉浼氶┈涓婂嚭鐜拌嚧鍛介敊璇傚畠浼氱戶緇澆鍏? 鍏跺畠鐨勬枃浠訛紝涓鏃﹀畬鎴恗akefile鐨勮鍙栵紝make浼氬啀閲嶈瘯榪欎簺娌℃湁鎵懼埌錛屾垨鏄笉鑳借鍙栫殑鏂囦歡錛屽鏋滆繕鏄笉琛岋紝make鎵嶄細鍑虹幇涓鏉¤嚧鍛戒俊鎭傚鏋滀綘 鎯寵make涓嶇悊閭d簺鏃犳硶璇誨彇鐨勬枃浠訛紝鑰岀戶緇墽琛岋紝浣犲彲浠ュ湪include鍓嶅姞涓涓噺鍙?#8220;-”銆傚錛?/font>

    -include <filename>
    鍏惰〃紺猴紝鏃犺include榪囩▼涓嚭鐜頒粈涔堥敊璇紝閮戒笉瑕佹姤閿欑戶緇墽琛屻傚拰鍏跺畠鐗堟湰make鍏煎鐨勭浉鍏沖懡浠ゆ槸sinclude錛屽叾浣滅敤鍜岃繖涓涓槸涓鏍風殑銆?/font>


鍥涖佺幆澧冨彉閲?MAKEFILES

濡傛灉浣犵殑褰撳墠鐜涓畾涔変簡鐜鍙橀噺MAKEFILES錛岄偅涔堬紝make浼氭妸榪欎釜鍙橀噺涓殑鍊煎仛涓 涓被浼間簬include鐨勫姩浣溿傝繖涓彉閲忎腑鐨勫兼槸鍏跺畠鐨凪akefile錛岀敤絀烘牸鍒嗛殧銆傚彧鏄紝瀹冨拰include涓嶅悓鐨勬槸錛屼粠榪欎釜鐜鍙樹腑寮曞叆鐨? Makefile鐨?#8220;鐩爣”涓嶄細璧蜂綔鐢紝濡傛灉鐜鍙橀噺涓畾涔夌殑鏂囦歡鍙戠幇閿欒錛宮ake涔熶細涓嶇悊銆?/font>

浣嗘槸鍦ㄨ繖閲屾垜榪樻槸寤鴻涓嶈浣跨敤榪欎釜鐜鍙橀噺錛屽洜涓哄彧瑕佽繖涓彉閲忎竴琚畾涔夛紝閭d箞褰撲綘浣跨敤make 鏃訛紝鎵鏈夌殑Makefile閮戒細鍙楀埌瀹冪殑褰卞搷錛岃繖緇濅笉鏄綘鎯崇湅鍒扮殑銆傚湪榪欓噷鎻愯繖涓簨錛屽彧鏄負浜嗗憡璇夊ぇ瀹訛紝涔熻鏈夋椂鍊欎綘鐨凪akefile鍑虹幇浜嗘簨錛岄偅涔? 浣犲彲浠ョ湅鐪嬪綋鍓嶇幆澧冧腑鏈夋病鏈夊畾涔夎繖涓彉閲忋?/font>


浜斻乵ake鐨勫伐浣滄柟寮?/font>

GNU鐨刴ake宸ヤ綔鏃剁殑鎵ц姝ラ鍏ヤ笅錛氾紙鎯蟲潵鍏跺畠鐨刴ake涔熸槸綾諱技錛?/font>

    1銆佽鍏ユ墍鏈夌殑Makefile銆?br>    2銆佽鍏ヨinclude鐨勫叾瀹僊akefile銆?br>    3銆佸垵濮嬪寲鏂囦歡涓殑鍙橀噺銆?br>    4銆佹帹瀵奸殣鏅﹁鍒欙紝騫跺垎鏋愭墍鏈夎鍒欍?br>    5銆佷負鎵鏈夌殑鐩爣鏂囦歡鍒涘緩渚濊禆鍏崇郴閾俱?br>    6銆佹牴鎹緷璧栧叧緋伙紝鍐沖畾鍝簺鐩爣瑕侀噸鏂扮敓鎴愩?br>    7銆佹墽琛岀敓鎴愬懡浠ゃ?/font>

1-5姝ヤ負絎竴涓樁孌碉紝6-7涓虹浜屼釜闃舵銆傜涓涓樁孌典腑錛屽鏋滃畾涔夌殑鍙橀噺琚嬌鐢ㄤ簡錛岄偅 涔堬紝make浼氭妸鍏跺睍寮鍦ㄤ嬌鐢ㄧ殑浣嶇疆銆備絾make騫朵笉浼氬畬鍏ㄩ┈涓婂睍寮錛宮ake浣跨敤鐨勬槸鎷栧歡鎴樻湳錛屽鏋滃彉閲忓嚭鐜板湪渚濊禆鍏崇郴鐨勮鍒欎腑錛岄偅涔堜粎褰撹繖鏉′緷璧栬鍐? 瀹氳浣跨敤浜嗭紝鍙橀噺鎵嶄細鍦ㄥ叾鍐呴儴灞曞紑銆?/font>

褰撶劧錛岃繖涓伐浣滄柟寮忎綘涓嶄竴瀹氳娓呮錛屼絾鏄煡閬撹繖涓柟寮忎綘涔熶細瀵筸ake鏇翠負鐔熸倝銆傛湁浜嗚繖涓熀紜錛屽悗緇儴鍒嗕篃灝卞鏄撶湅鎳備簡銆?/font>





]]>
C/C++棰勫鐞嗚繃紼嬩笌璇彞鎬葷粨http://www.shnenglu.com/yehongly/archive/2008/01/03/40308.html鑼?/dc:creator>鑼?/author>Thu, 03 Jan 2008 05:59:00 GMThttp://www.shnenglu.com/yehongly/archive/2008/01/03/40308.htmlhttp://www.shnenglu.com/yehongly/comments/40308.htmlhttp://www.shnenglu.com/yehongly/archive/2008/01/03/40308.html#Feedback0http://www.shnenglu.com/yehongly/comments/commentRss/40308.htmlhttp://www.shnenglu.com/yehongly/services/trackbacks/40308.htmlhttp://www.cnscn.org(CNS鐢佃剳涓庤嫳璇涔犵綉)
Author: cnscn <http://www.cnscn.org>

1)棰勫鐞?/font>

  鏍規嵁宸叉斁緗湪鏂囦歡涓殑棰勫鐞嗘寚浠ゆ潵淇敼婧愭枃浠剁殑 鍐呭
  棰勫鐞嗗櫒浼氬垎鏋怽鎵ц鎵鏈夌殑棰勫鐞嗗櫒鎸囦護,鐒跺悗鍒犻櫎浠栦滑,寰楀埌涓涓粎鍖呭惈C++璇彞鐨勮漿鎹㈠崟鍏?br>  棰勫鐞嗘寚浠や互#鍙峰紑澶?br>

  甯哥敤鐨勯澶勭悊鎸囦護:
  #include       鍖呭惈澶存枃浠?br>
  #if               鏉′歡
  #else          鍚﹀垯
  #elif            鍚﹀垯濡傛灉
  #endif         緇撴潫鏉′歡

  #ifdef  鎴?#if defined        濡傛灉瀹氫箟浜嗕竴涓鍙? 灝辨墽琛屾搷浣?br>  #ifndef 鎴?#if !defined      濡傛灉娌℃湁瀹氫箟涓涓鍙? 灝辨寚鎵ц鎿嶄綔

  #define        瀹氫箟涓涓鍙?br>  #undef         鍒犻櫎涓涓鍙?br>
  #line            閲嶆柊瀹氫箟褰撳墠琛屽彿鍜屾枃浠跺悕

  #error            杈撳嚭緙栬瘧閿欒 娑堟伅,銆鍋滄緙栬瘧

  #pragma        鎻愪緵 鏈哄櫒涓撶敤鐨勭壒鎬?鍚屾椂淇濊瘉涓嶤++鐨勫畬鍏ㄥ吋瀹?br>

2)#include銆 鍦? 紼嬪簭涓寘鍚ご鏂囦歡
銆澶存枃浠墮氬父浠?h緇撳熬,鍏? 鍐呭鍙嬌鐢?include棰勫鐞嗗櫒鎸囦護鍖呭惈鍒? 紼嬪簭涓?br>銆澶存枃浠朵腑涓鑸寘鍚? 鍑芥暟鍘熷瀷涓庡叏灞鍙橀噺

  褰㈠紡甯告湁涓嬮潰涓ょ
  #include <iostream>
  #include "myheader.h"

  鍓嶈?lt;>鐢ㄦ潵寮曠敤鏍囧噯搴撳ご鏂囦歡,鍚庤?"甯哥敤鏉ュ紩鐢ㄨ嚜瀹氫箟鐨勫ご鏂囦歡
  鍓嶈?lt;>緙栬瘧鍣ㄥ彧鎼滅儲鍖呭惈鏍囧噯搴撳ご鏂囦歡鐨勯粯璁? 鐩綍,鍚庤呴鍏堟悳绱㈡鍦ㄧ紪璇戠殑婧愭枃浠舵墍鍦ㄧ殑 鐩綍,鎵句笉鍒版椂鍐嶆悳绱㈠寘鍚爣鍑嗗簱澶存枃浠剁殑榛樿 鐩綍.
  濡傛灉鎶婂ご鏂囦歡鏀懼湪鍏朵粬 鐩綍涓?涓轟簡鏌ユ壘鍒板畠,蹇呴』鍦ㄥ弻寮曞彿涓寚瀹氫粠婧愭枃浠跺埌澶存枃浠剁殑瀹屾暣璺緞


3)#define  瀹氫箟絎﹀彿銆佸畯
1>絎﹀彿
  #define PI 3.1415925  瀹氫箟絎﹀彿PI涓?.1415925
  #define PI銆銆銆銆銆銆鍙栨秷PI鐨勫?br>
  榪欓噷PI鐪嬭搗鏉ュ儚涓涓彉閲忥紝浣嗗畠涓庡彉閲忔病鏈変換浣曞叧緋伙紝瀹冨彧鏄竴涓鍙鋒垨鏍囧織錛屽湪 紼嬪簭浠g爜緙栬瘧鍓嶏紝姝ょ鍙蜂細鐢ㄤ竴緇勬寚瀹氱殑瀛楃鏉ヤ唬鏇?br>  3.14159265銆涓嶆槸涓涓暟鍊鹼紝鍙槸涓涓瓧絎︿覆錛屼笉浼氳繘琛屾鏌?br>
  鍦ㄧ紪璇戝墠錛岄澶勭悊鍣ㄤ細閬嶅巻浠g爜錛屽湪瀹冭涓虹疆鎹㈡湁鎰忎箟鐨勫湴鏂癸紝鐢ㄥ瓧絎︿覆PI鐨勫畾涔夊?3.14159265)鏉ヤ唬鏇?br>銆鍦ㄦ敞閲婃垨瀛楃涓蹭腑鐨凱I涓嶈繘琛屾浛鎹?br>
  鍦–涓父浠?define鏉ュ畾涔夌鍙峰父閲忥紝浣嗗湪C++涓渶濂戒嬌鐢╟onst 鏉ュ畾涔夊父閲?br>  #define PI 3.14159265
  const long double PI=3.14159265;
  涓よ呮瘮杈冧笅錛屽墠鑰呮病鏈夌被鍨嬬殑鎸囧畾瀹規槗寮曡搗涓嶅繀欏葷殑楹葷儲錛岃屽悗鑰呭畾涔夋竻妤氾紝鎵浠ュ湪C++涓帹鑽愪嬌鐢╟onst鏉ュ畾涔夊父閲?br>
銆#define鐨勭己鐐?
   1)涓嶆敮鎸佺被鍨嬫鏌?br>   2)涓嶈冭檻浣滅敤鍩?br>   3)絎﹀彿鍚嶄笉鑳介檺鍒跺湪涓涓懡鍚? 絀洪棿涓?br>


2>#undef 鍒犻櫎#define瀹氫箟鐨勭鍙?/span>
  #define PI 3.14159265
  ... //涔嬮棿鎵鏈夌殑PI閮藉彲浠ヨ鏇挎崲涓?.14159265

  #undef PI
  涔嬪悗涓嶅啀鏈塒I榪欎釜鏍囪瘑絎?br>

3>瀹氫箟瀹?/span>
  #define Print(Var) count<<(Var)<<endl
  鐢ㄥ畯鍚嶄腑鐨勫弬鏁板甫鍏ヨ鍙ヤ腑鐨勫弬鏁?br>  瀹忓悗闈㈡病鏈?鍙?br>  Print(Var)涓殑Print鍜?涔嬮棿涓嶈兘鏈夌┖鏍鹼紝鍚﹀垯(灝變細琚В閲婁負緗崲瀛楃涓茬殑涓閮ㄥ垎

  #define Print(Var, digits)  count << setw(digits) << (Var) << endl
  璋冪敤
  Print(ival, 15)
  棰勫鐞嗗櫒灝變細鎶婂畠鎹㈡垚
  cout << setw(15) << (ival) << endl;


  鎵鏈夌殑鎯呭喌涓嬮兘鍙互浣跨敤鍐呰仈鍑芥暟鏉ヤ唬鏇垮畯錛岃繖鏍峰彲浠ュ寮虹被鍨嬬殑媯鏌?br>  template<class T> inline void Print (const T& var, const int& digits)
  {
      count<<setw(digits)<<var<<endl;
  }

  璋冪敤
  Print(ival, 15);


  浣跨敤瀹忔椂搴旀敞鎰忕殑鏄撳紩璧風殑閿欒:
  #define max(x,y) x>y?x:y;+


  璋冪敤 result = max(myval, 99);  鍒欐崲鎴?result = myval>99?myval:99;  榪欎釜娌℃湁闂鏄紜殑
  璋冪敤 result = max(myval++, 99);  鍒欐崲鎴?result = myval++>99?myval++:99; 榪欐牱濡傛灉myval>99閭d箞myval灝變細閫掑涓ゆ錛岃繖縐嶆儏鍐典笅()鏄病浠涔堢敤鐨勫result=max((x),y)鍒?result = (myval++)>99?(myval++):99;

  鍐嶅
  #define product(m,n) m*n

  璋冪敤
  result = product(5+1,6);鍒欐浛鎹負result = 5+1*6; 鎵浠ヤ駭鐢熶簡閿欒鐨勭粨鏋滐紝姝ゆ椂搴斾嬌鐢?)鎶婂弬鏁版嫭璧?br>  #define product(m,n) (m)*(n)
  鍒檙esult = product(5+1,6);鍒欐浛鎹負result = (5+1)*(6); 鎵浠ヤ駭鐢熶簡閿欒鐨勭粨鏋滐紝姝ゆ椂搴斾嬌鐢?)鎶婂弬鏁版嫭璧?br>

緇撹:銆涓鑸敤鍐呰仈鍑芥暟鏉ヤ唬鏇塊澶勭悊鍣ㄥ畯


鎶宸?/font>:
    1)緇欐浛鎹㈠彉閲忓姞寮曞彿
    #define MYSTR "I love you"

    cout << MYSTR ; //I love you鑰屼笉鏄?I love you"
    濡傛灉
    cout << "MYSTR" ; //鍒欎細杈撳嚭"MYSTR"鑰屼笉鏄?I love you"

    鍙互榪欐牱鍋?br>    cout << #MYSTR ;  //鍒欎細杈撳嚭 "I love you"鍗砪out << "\"I love you\"";

    2)鍦ㄥ畯琛ㄨ揪寮忎腑榪炴帴鍑犱釜鍙傛暟
    濡?br>      #define join(a,b) ab銆榪欐牱涓嶄細鐞嗚В涓哄弬鏁癮鐨勫間笌鍙傛暟b鐨勫肩殑榪炴帴錛屽嵆濡俲oin(10,999)涓嶄細鐞嗚В涓?0999鑰屾槸鎶奱b鐞嗚В涓哄瓧絎︿覆錛屽嵆杈撳嚭ab
    榪欐椂鍙互
    #define join(a,b) a##b
      鍒檍oin(10,999)灝變細杈撳嚭10999


3)閫昏緫棰勫鐞嗗櫒鎸囦護
銆#if defined CALCAVERAGE銆鎴?#ifdef CALCAVERAGE
   int count=sizeof(data)/sizeof(data[0]);
   for(int i=0; i<count; i++)
     average += data;
   average /= count;
  #endif

  濡傛灉宸茬粡瀹氫箟絎﹀彿CALCAVERAGE鍒欐妸#if涓?endif闂寸殑璇彞鏀懼湪瑕佺紪璇戠殑婧愪唬鐮佸唴


  闃叉閲嶅寮曞叆鏌愪簺澶存枃浠?br>  #ifndef COMPARE_H
  #define COMPARE_H     娉ㄦ剰: 榪欓噷鍙槸瀹氫箟涓涓病鏈夊肩殑絎﹀彿COMPARE_H, 涓嬮潰鐨刵amespace compare涓嶆槸COMPARE_H鐨? 鍐呭錛岃繖閲岀殑瀹氫箟涓嶅儚鏄畾涔変竴涓父閲忔垨瀹忥紝浠呬粎瀹氫箟涓涓鍙鳳紝鎸囧嚭姝ょ鍙峰凡瀹氫箟錛屽垯灝變細鏈変笅闈㈢殑 鍐呭namespace compare{...
   namespace compare{
     double max(const double* data, int size);
     double min(const double* data, int size);
   }
  #endif

  姣旇緝
  #define VERSION \
   3
  鍥犱負鏈夋崲琛岀\銆鎵浠ヤ笂鍙ョ瓑浠蜂簬 #define VERSION 3
  鐢辨鍙互鐪嬪嚭#define COMPARE_H涓巒amespace compare鏄嫭绔嬫病鏈夊叧緋葷殑涓や釜琛?br>

  涔熷彲浠ヨ繖鏍風敤
  #if defined block1 && defined block2
  ...
  #endif

  #if CPU==PENTIUM4
    ...
  #endif


  #if LANGUAGE == ENGLISH
  #define Greeting "Good Morning."
  #elif LANGUAGE == GERMAN
  #define Greeting "Guten Tag."
  #elif LANGUAGE == FRENCH
  #define Greeting "Bonjour."
  #else
  #define Greeting "Hi."
  #endif
  std::cout<<Greeting << std::endl;


  #if VERSION == 3
  ...
  #elif VERSION == 4
  ...
  #else
  ...
  #endif


5)鏍囧噯鐨勯澶勭悊鍣ㄥ畯
  __LINE__     褰撳墠婧愭枃浠朵腑鐨勪唬鐮佽鍙鳳紝鍗佽繘鍒舵暣鏁?br>  __FILE__銆  婧愭枃浠剁殑鍚嶇О錛屽瓧絎︿覆瀛楅潰閲?br>  __DATE__銆 婧愭枃浠剁殑澶勭悊鏃ユ湡錛屽瓧絎︿覆瀛楅潰閲忥紝鏍煎紡mmm dd yyyy鍏朵腑mmm鏄湀浠藉Jan銆丗eb絳夈dd鏄?1-31 yyyy鏄洓浣嶇殑騫翠喚
  __TIME__    婧愭枃浠剁殑緙栬瘧 鏃墮棿錛屼篃鏄瓧絎︿覆瀛楅潰閲忔牸寮忔槸hh:mm:ss
  __STDC__   榪欏彇鍐充簬瀹炵幇鏂瑰紡錛屽鏋滅紪璇戝櫒閫夐」璁劇疆涓虹紪璇戞爣鍑嗙殑C浠g爜錛岄氬父灝卞畾涔夊畠錛屽惁鍒欏氨涓嶅畾涔夊畠
  __cplusplus  鍦ㄧ紪璇慍++ 紼嬪簭鏃訛紝瀹冨氨瀹氫箟涓?99711L

  浣跨敤#line鍙互淇敼__FILE__榪斿洖鐨勫瓧絎︿覆
  濡?br>  #line 1000    鎶婂綋鍓嶈鍙瘋緗負1000
  #line 1000 "the program file"      淇敼__FILE__榪斿洖鐨勫瓧絎︿覆琛屽彿鏀逛負浜?000錛屾枃浠跺悕鏀逛負浜?the program file"
  #line __LINE__ "the program file"  淇敼__FILE__榪斿洖鐨勫瓧絎︿覆琛屽彿娌″彉錛屾枃浠跺悕鏀逛負浜?the program file"

  cout << "program last complied at "<<__TIME__
       << " on " << __DATE__
       << endl;


6)#error
  鍦ㄩ澶勭悊闃舵錛屽鏋滃嚭鐜頒簡閿欒錛屽垯#error鎸囦護鍙互鐢熸垚涓涓瘖鏂? 娑堟伅錛屽茍鏄劇ず涓轟竴涓紪璇戦敊璇紝鍚屾椂涓緙栬瘧
  #ifndef __cplusplus
  #error "Error -  Should be C++"
  #endif


7)#pragma
銆涓撻棬鐢ㄤ簬瀹炵幇棰勫厛瀹氫箟濂界殑閫夐」錛屽叾緇撴灉鍦ㄧ紪璇戝櫒璇存槑鏂囨。涓繘琛屼簡璇︾粏鐨勮В閲娿傜紪璇戝櫒鏈瘑鍒嚭鏉ョ殑#pragma鎸囦護閮戒細琚拷鐣?br>

8)assert()瀹?/span>
  鍦ㄦ爣鍑嗗簱澶存枃浠?lt;cassert>涓0鏄?br>  鐢ㄤ簬鍦? 紼嬪簭涓? 嫻嬭瘯涓涓昏緫琛ㄨ揪寮忥紝濡傛灉閫昏緫琛ㄨ揪寮忎負false, 鍒檃ssert()浼氱粓姝? 紼嬪簭錛屽茍鏄劇ず璇婃柇 娑堟伅
  鐢ㄤ簬鍦ㄦ潯浠朵笉婊¤凍灝變細鍑虹幇閲嶅ぇ閿欒錛屾墍浠ュ簲紜繚鍚庨潰鐨勮鍙ヤ笉搴斿啀緇х畫鎵ц錛屾墍浠ュ畠鐨勫簲鐢ㄩ潪甯哥伒媧?br>  娉ㄦ剰: assert涓嶆槸閿欒澶勭悊 鏈哄埗錛岄昏緫琛ㄨ揪寮忕殑緇撴灉涓嶅簲浜х敓璐熼潰鏁堟灉錛屼篃涓嶅簲瓚呭嚭 紼嬪簭鍛樼殑鎺у埗(濡傛壘寮涓涓枃浠舵槸鍚︽垚鍔?, 紼嬪簭搴旀彁渚涢傚綋鐨勪唬鐮佹潵澶勭悊榪欑鎯呭喌
銆assert(expression);
  assert(expression) && assert(expression2);
  鍙互浣跨敤#define NDEBUG鏉ュ叧闂柇璦 鏈哄埗

  #include <iostream>
  #include <cassert>
  using std::cout;
  using std::endl;

  int main()
  {
     int x=0;
     int y=0;

     cout<<endl;

     for(x=0; x<20; x++)
     {
        cout<<"x= "<<x <<" y= "<<y<<endl;
        assert(x<y);銆//褰搙>=y涓巟==5鏃訛紝灝辨姤閿欙紝騫剁粓姝? 紼嬪簭鐨勬墽琛?br>     }
     return 0;
  }


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              欧美日韩一卡| 亚洲综合色网站| 开心色5月久久精品| 国产综合色产在线精品| 久久久精品国产免费观看同学| 亚洲欧美日韩国产成人| 国产亚洲一区二区三区| 久久中文久久字幕| 免费亚洲网站| 亚洲一区二区网站| 欧美有码在线观看视频| 亚洲区第一页| 在线天堂一区av电影| 国产精品久久久久999| 久久久av毛片精品| 免播放器亚洲一区| 亚洲手机在线| 欧美中文字幕视频在线观看| 亚洲国产一区二区a毛片| 亚洲精品中文字幕在线| 国产精品欧美久久久久无广告| 久久久精品一区| 模特精品裸拍一区| 午夜精品亚洲| 乱码第一页成人| 亚洲欧美日韩中文在线制服| 欧美在线观看视频在线| 一本色道久久综合狠狠躁篇怎么玩| 一区二区三区四区五区精品| 一区二区三区中文在线观看| 亚洲精品字幕| 一区二区在线视频| 一区二区三区四区国产精品| 亚洲高清三级视频| 亚洲你懂的在线视频| 最新国产拍偷乱拍精品| 亚洲男人第一av网站| 亚洲精品永久免费| 欧美一区二区三区在线视频| 一本一道久久综合狠狠老精东影业| 欧美一区视频在线| 亚洲无线观看| 欧美精品123区| 你懂的国产精品| 国产日韩精品视频一区二区三区| 亚洲欧洲一区二区天堂久久| 国产一区二区三区在线观看视频| 亚洲破处大片| 亚洲国产精品美女| 久久精品毛片| 欧美一级久久久| 国产精品久久九九| 亚洲精品欧美一区二区三区| 在线国产精品播放| 欧美一区二区在线看| 欧美一区二区三区四区在线| 欧美日韩视频第一区| 亚洲第一二三四五区| 亚洲电影自拍| 欧美国产日韩精品| 99精品视频网| 蜜臀av一级做a爰片久久| 久久婷婷国产综合精品青草| 国产情人综合久久777777| 夜夜嗨av一区二区三区网页 | 亚洲日本成人网| 雨宫琴音一区二区在线| 久久精品二区| 久久婷婷人人澡人人喊人人爽| 国产午夜亚洲精品理论片色戒| 亚洲欧美第一页| 久久国产精品免费一区| 国产欧美日韩在线观看| 亚洲欧美不卡| 久久久亚洲人| 一区在线免费观看| 美女视频黄 久久| 亚洲国产精品激情在线观看| av成人国产| 欧美日韩在线一区| 亚洲欧美中日韩| 久久久久高清| 亚洲国产欧美一区| 欧美日韩另类在线| 亚洲免费在线| 欧美二区不卡| 这里只有视频精品| 国产亚洲精品成人av久久ww| 久久午夜影视| 日韩亚洲精品在线| 午夜精品久久久久久久久久久| 国产亚洲综合精品| 欧美搞黄网站| 亚洲香蕉伊综合在人在线视看| 久久不射中文字幕| 亚洲国产一区二区精品专区| 欧美日韩一区二区三区免费看 | 久久久久女教师免费一区| 亚洲国产裸拍裸体视频在线观看乱了| 欧美精品成人91久久久久久久| 一区二区激情小说| 久久人人九九| 亚洲视频久久| 影视先锋久久| 国产精品青草久久| 欧美mv日韩mv国产网站app| 99精品国产在热久久| 久久久久欧美精品| 亚洲一区二区三| 亚洲黄色在线看| 国产精品视频区| 欧美成人伊人久久综合网| 亚洲图片欧洲图片日韩av| 免费日韩一区二区| 欧美一区二区三区四区在线观看 | 欧美日韩亚洲91| 久久免费视频在线| 午夜精品福利电影| 日韩亚洲一区二区| 亚洲第一福利视频| 久久久久久久综合| 欧美亚洲在线视频| 一本一本久久| 亚洲激情校园春色| 精品电影在线观看| 国产啪精品视频| 欧美日韩在线一区| 欧美伦理91i| 午夜精品久久久久久久久久久久| 亚洲影视综合| 在线看片欧美| 黄色成人在线网址| 国产在线观看精品一区二区三区| 欧美日韩中国免费专区在线看| 久热国产精品| 久久精品日韩欧美| 欧美综合国产| 欧美影视一区| 欧美亚洲午夜视频在线观看| 亚洲淫性视频| 午夜精品久久久99热福利| 这里只有精品电影| 一区二区三区国产在线观看| 亚洲精品中文字幕在线| 亚洲精品老司机| 日韩视频在线一区二区| 99国产精品久久久久久久久久 | 这里只有精品视频| 亚洲视频中文| 亚洲欧美日韩久久精品| 亚洲综合欧美日韩| 亚洲欧美在线视频观看| 先锋a资源在线看亚洲| 午夜精品理论片| 久久精品99国产精品| 久久亚洲国产成人| 欧美成人午夜激情在线| 亚洲高清视频的网址| 亚洲精品中文字幕女同| 在线亚洲自拍| 欧美一区二区在线看| 久久嫩草精品久久久精品| 久久人人97超碰国产公开结果| 另类av一区二区| 欧美日韩一区二区在线观看| 国产免费观看久久| 樱桃视频在线观看一区| 亚洲精品之草原avav久久| 亚洲一区二区三区四区在线观看| 亚洲欧美清纯在线制服| 久久久亚洲欧洲日产国码αv| 欧美激情国产高清| 亚洲一区二区动漫| 久久精品视频va| 欧美日韩国语| 国外精品视频| 一区二区三区黄色| 久久精品亚洲一区| 亚洲国产91| 亚洲综合欧美日韩| 玖玖视频精品| 国产精品美女一区二区| 精品999日本| 亚洲综合清纯丝袜自拍| 免费毛片一区二区三区久久久| 99视频超级精品| 久久久精品999| 国产精品乱码一区二区三区| 伊人久久大香线| 亚洲影视中文字幕| 亚洲丶国产丶欧美一区二区三区| 一区二区三区视频在线观看| 久久亚洲欧洲| 国产精品色午夜在线观看| 亚洲国产精品一区二区三区| 欧美一级片久久久久久久| 亚洲人成人一区二区在线观看| 久久国内精品自在自线400部| 欧美日韩亚洲一区二区三区在线 | 欧美性事在线|