make缂栬瘧涓€

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了make缂栬瘧涓€相关的知识,希望对你有一定的参考价值。

鏍囩锛?a href='http://www.mamicode.com/so/1/shel' title='shel'>shel   ifd   linu   姝ラ   鍏崇郴   缂栬瘧   efi   澶氫釜   stdio.h   

鍦?span style="font-family: Times New Roman">C鍜?/span>C++涓紝棣栧厛瑕佹妸婧愭枃浠剁紪璇戞垚涓棿浠g爜鏂囦欢锛屽湪windows涓嬪氨鏄?/span>obj鏂囦欢锛?/span>linux涓嬪氨鏄?/span>.o鏂囦欢锛?/span>object file銆傝繖涓姩浣滃彨鍋氱紪璇戯紝鐒跺悗鍐嶆妸澶ч噺鐨?/span>object file鍚堟垚鎵ц鏂囦欢銆傝繖涓姩浣滃彨鍋氶摼鎺?/span>(link)

 

缂栬瘧鏃讹紝缂栬瘧鍣ㄩ渶瑕佺殑鏄娉曠殑姝g‘锛屽嚱鏁颁笌鍙橀噺鐨勫0鏄庣殑姝g‘銆傚浜庡悗鑰咃紝閫氬父鏄綘闇€瑕佸憡璇夌紪璇戝櫒澶存枃浠剁殑鎵€鍦ㄤ綅缃紙澶存枃浠朵腑搴旇鍙槸澹版槑锛岃€屽畾涔夊簲璇ユ斁鍦?nbsp;C/C++鏂囦欢涓級 锛屽彧瑕佹墍鏈夌殑璇硶姝g‘锛岀紪璇戝櫒灏卞彲浠ョ紪璇戝嚭涓棿鐩爣鏂囦欢銆備竴鑸潵璇达紝姣忎釜婧愭枃浠堕兘搴旇瀵?/span>

搴斾簬涓€涓腑闂寸洰鏍囨枃浠讹紙鏂囦欢鎴栨槸 OBJ 鏂囦欢锛?/span>

 

閾炬帴鏃讹紝涓昏鏄摼鎺ュ嚱鏁板拰鍏ㄥ眬鍙橀噺锛屾墍浠ワ紝鎴戜滑鍙互浣跨敤杩欎簺涓棿鐩爣鏂囦欢锛?span style="font-family: Times New Roman">O 鏂囦欢鎴栨槸 OBJ 鏂囦欢锛夋潵閾炬帴鎴戜滑鐨勫簲鐢ㄧ▼搴忋€傞摼鎺ュ櫒骞朵笉绠″嚱鏁版墍鍦ㄧ殑婧愭枃浠讹紝鍙鍑芥暟鐨勪腑闂寸洰鏍囨枃浠讹紙Object File锛?nbsp;锛屽湪澶у鏁版椂鍊欙紝鐢变簬婧愭枃浠跺お澶氾紝缂栬瘧鐢熸垚鐨勪腑闂寸洰鏍囨枃浠跺お澶氾紝鑰屽湪閾炬帴鏃堕渶瑕佹槑鏄惧湴鎸囧嚭涓棿鐩爣鏂囦欢鍚嶏紝杩欏浜庣紪璇戝緢涓嶆柟渚匡紝鎵€浠ワ紝鎴戜滑瑕佺粰涓棿鐩爣鏂囦欢鎵撲釜鍖咃紝鍦?nbsp;Windows 涓嬭繖绉嶅寘鍙€滃簱鏂囦欢鈥濓紙Library File)锛屼篃灏辨槸 .lib 鏂囦欢锛屽湪 UNIX 涓嬶紝鏄?nbsp;Archive File锛屼篃灏辨槸 .a 鏂囦欢

 

鎵€浠ユ暣涓繃绋嬪ぇ鑷村垎涓?span style="font-family: Times New Roman">2涓楠わ細

1 婧愭枃浠堕鍏堜細鐢熸垚涓棿鐩爣鏂囦欢锛屽啀鐢变腑闂寸洰鏍囨枃浠剁敓鎴愭墽琛屾枃浠躲€傚湪缂栬瘧鏃讹紝缂栬瘧鍣ㄥ彧妫€娴嬬▼搴忚娉曪紝鍜屽嚱鏁般€佸彉閲忔槸鍚﹁澹版槑銆?nbsp;濡傛灉鍑芥暟鏈澹版槑锛岀紪璇戝櫒浼氱粰鍑轰竴涓鍛婏紝浣嗗彲浠ョ敓鎴?nbsp;ObjectFile銆?/span>

2鑰屽湪閾炬帴绋嬪簭鏃讹紝閾炬帴鍣ㄤ細鍦ㄦ墍鏈夌殑 Object File 涓壘瀵诲嚱鏁扮殑瀹炵幇锛屽鏋滄壘涓嶅埌锛岄偅鍒板氨浼氭姤閾炬帴閿欒鐮侊紙Linker Error锛?nbsp;锛屽湪 VC涓嬶紝杩欑閿欒涓€鑸槸锛?/span>Link 2001 閿欒锛屾剰鎬濊鏄锛岄摼鎺ュ櫒鏈兘鎵惧埌鍑芥暟鐨勫疄鐜般€備綘闇€瑕佹寚瀹氬嚱鏁扮殑 Object File.

 

涓嬮潰鎴戜滑灏辨潵鐪嬩笅makefile鐨勮娉曡鍒欍€?/span>

makefile鐨勮娉曡鍒欏涓?/span>

target:prerequisites

command

target涔熷氨鏄竴涓洰鏍囨枃浠讹紝鍙互鏄?nbsp;Object File锛屼篃鍙互鏄墽琛屾枃浠躲€傝繕鍙互鏄竴涓爣绛撅紙Label锛?/span>

prerequisites 灏辨槸锛岃鐢熸垚閭d釜 target 鎵€闇€瑕佺殑鏂囦欢鎴栨槸鐩爣

command 涔熷氨鏄?nbsp;make 闇€瑕佹墽琛岀殑鍛戒护銆?nbsp;锛堜换鎰忕殑 Shell 鍛戒护锛?/span>

 

璇寸櫧浜嗭紝鍏跺疄灏辨槸鏁翠釜宸ョ▼閲岄潰鐨勬枃浠朵緷璧栧叧绯伙紝target 杩欎竴涓垨澶氫釜鐨勭洰鏍囨枃浠朵緷璧栦簬 prerequisites 涓殑鏂囦欢锛屽叾鐢熸垚瑙勫垯瀹氫箟鍦?nbsp;command 涓€傝鐧戒竴鐐瑰氨鏄锛?nbsp;prerequisites 涓鏋滄湁涓€涓互涓婄殑鏂囦欢姣?nbsp;target 鏂囦欢瑕佹柊鐨勮瘽锛?/span>command 鎵€瀹氫箟鐨勫懡浠ゅ氨浼氳鎵ц銆傝繖灏辨槸 Makefile 鐨勮鍒欍€?/span>

涓€涓伐绋嬩腑鐨勬簮鏂囦欢涓嶈鍏舵暟锛屾寜鐓т笉鍚岀殑鍔熻兘鍒嗙被鍦ㄨ嫢骞茬殑鐩綍閲岄潰锛宮akefile瀹氫箟浜嗕竴绯诲垪鐨勮鍒欙紝鏉ュ埗瀹氶偅浜涙枃浠堕渶瑕佸厛缂栬瘧锛岄偅浜涙枃浠跺悗缂栬瘧锛岄偅浜涙枃浠堕噸鏂扮紪璇戙€俶akefile鏈€澶х殑濂藉灏辨槸鑷姩鍖栫紪璇戙€備竴鏃﹀啓濂斤紝鍙渶瑕佷竴涓猰ake鍛戒护锛屾暣涓繃绋嬮兘鑷姩缂栬瘧銆傛瀬澶ф彁楂樺紑鍙戠殑鏁堢巼銆傛垜浠厛鏉ョ湅涓畝鍗曠殑渚嬪瓙锛?br>濡傛灉涓€涓伐绋嬮噷闈㈡湁1涓ご鏂囦欢calc.h鍜?涓狢鏂囦欢main.c锛宑alc.c
main.c鐨勫唴瀹瑰涓嬶細
#include "stdio.h"
#include "calc.h"
int main()
{
    int n,k;
    int c;
    n=3;
    k=4;
    c=calculate(n,k);
    printf("the value is %d ",c);
}
calc.c鐨勫唴瀹瑰涓嬶細
#include "calc.h"

int calculate(int n,int k)
{
    return n*k;
}
calc.h鐨勫唴瀹瑰涓嬶細
#ifdef CALC_H
#define CALC_H
int calculate(int n,int k);
#endif
涓轰簡瀹屾垚瀵瑰伐绋嬫枃浠舵鐨勭紪璇戯紝骞剁敓鎴愭墽琛屾枃浠秏ain,鎸夌収濡備笅鐨勬柟寮忕紪璇戞枃浠?br>[email protected]:/home/zhf/zhf/c_prj/make_function# gcc main.c calc.c -o main
浣嗘槸濡傛灉鎴戝main.c鍋氫簡淇敼銆傚氨闇€瑕佹妸鎵€鏈夋簮鏂囦欢閮介噸鏂扮紪璇戜竴閬嶏紝鍗充娇鍏朵粬鏂囦欢娌℃湁浠讳綍鍙樺寲銆備篃瑕佽窡鐫€閲嶆柊缂栬瘧銆備竴涓ぇ鐨勮蒋浠堕」鐩笂鍗冧釜婧愭枃浠剁粍鎴愶紝缂栬瘧涓€娆¤€楁椂寰堥暱銆備竴涓簮鏂囦欢淇敼瀵艰嚧鍏ㄩ儴閲嶆柊缂栬瘧鑲畾涓嶅悎鐞嗐€傛垜浠彲浠ヨ繖鏍蜂紭鍖栦笅锛?br>gcc -c main.c
gcc -c calc.c
gcc main.o calc.o -o main
濡傛灉缂栬瘧涔嬪悗鏈夊main.c鍋氫簡淇敼锛岄噸鏂扮紪璇戜箣闇€瑕佷袱姝ワ細
gcc -c main.c
gcc main.o calc.o -o main
杩欐牱姣斾箣鍓嶇殑瑕佺渷浜嬩竴浜涗簡锛屼絾杩樻槸鏈夐棶棰橈紝鍦╟alc.c鍜宮ain.c閮藉寘鍚簡calc.h銆傚鏋滄垜瀵筩alc.h鍋氫簡鏀瑰姩銆傛墍鏈夊寘鍚玞alc.h鐨勬枃浠堕兘寰楁敼鍔ㄣ€傝€屼笖杩樺緱鍒板鍘绘壘閭d簺鍖呭惈浜哻alc.h銆傝繕鏄緢楹荤儲銆傛瘮濡傚湪calc.h涓鍔犱簡涓€涓畯瀹氫箟銆傚苟涓斿湪man.c鍜宑alc.c涓兘鏈夌敤鍒拌繖涓彉閲忋€傞偅涔堜竴鏃alc.h淇敼浜嗗畯瀹氫箟鍙橀噺鐨勫€笺€俢alc.c鍜宮ain.c閮藉繀椤婚噸鏂扮紪璇戙€?br>#define max_value 40

閭d箞鎴戜滑闇€瑕佷竴绉嶄粈涔堟牱鐨勭紪璇戞柟寮忔墠鑳芥渶鐪佷簨鍛細
1 濡傛灉杩欎釜宸ョ▼娌℃湁琚紪璇戣繃锛岄偅涔堟垜浠殑鎵€鏈塁鏂囦欢閮借缂栬瘧骞惰閾炬帴
2 濡傛灉杩欎釜宸ョ▼鐨勬煇鍑犱釜C鏂囦欢琚慨鏀癸紝閭d箞鎴戜滑鍙紪璇戣淇敼鐨凜鏂囦欢锛屽苟杩炴帴鐩爣绋嬪簭
3 濡傛灉杩欎釜宸ョ▼鐨勫ご鏂囦欢琚慨鏀逛簡锛岄偅涔堟垜浠渶瑕佺紪璇戝紩鐢ㄤ簡杩欏嚑涓ご鏂囦欢鐨凜鏂囦欢骞堕摼鎺ョ洰鏍囩▼搴忋€?br>鑳借揪鍒颁笂杩扮洰鐨勭殑灏辨槸makefile鏂囦欢浜嗐€傚湪宸ョ▼鐨勬枃浠惰矾寰勪笅鏂板缓涓€涓狹akefile鏂囦欢銆傚叾涓唴瀹瑰涓嬶細
main:main.o calc.o
    gcc -o main main.o calc.o
main.o:main.c calc.h
    gcc -c main.c
calc.o:calc.c calc.h
    gcc -c calc.c
clean:
    rm *.o
    rm main
鎵цmake鍛戒护
[email protected]:/home/zhf/zhf/c_prj/make_function# make
gcc -c main.c
gcc -c calc.c
gcc -o main main.o calc.o

鏉ョ湅涓婱akefile鐨勮鍒欙細
1 绗竴鏉¤鍒欑殑鐩爣涓簃ain銆傝€屼负浜嗗緱鍒癿ain锛屽繀椤诲厛寰楀埌main.o calc.o杩?涓枃浠躲€傛墍浠ake浼氳繘涓€姝ユ煡鎵捐繖2涓潯浠朵负鐩爣鐨勮鍒欍€?br>2 绗簩鏉¤鍒欏拰绗笁濂楄鍒欑殑鐩爣涓塵ain.o鍜宑alc.o銆俶ain.o渚濊禆浜巑ain.c鍜宑alc.h銆備负浜嗗緱鍒癿ain.o蹇呰鎵цgcc -c main. Calc.o渚濊禆浜巆alc.c鍜宑alc.h銆備负浜嗗緱鍒癱alc.o蹇呴』鎵цgcc -c calc.c
3 鏈€鍚庣殑clean鎿嶄綔娓呴櫎鎵ц杩囩▼涓骇鐢熺殑涓存椂鏂囦欢銆傚綋鐢╩ake鍛戒护鎵ц鐨勬椂鍊欙紝clean涓嬬殑鍛戒护涓嶄細鎵ц锛岃浠ake clean鏂瑰紡鍗曠嫭鎵ц銆傛墽琛屽悗锛屾墍鏈?.o鍜宮ain閮借鍒犻櫎銆?br>[email protected]:/home/zhf/zhf/c_prj/make_function# ls -al
total 40
drwxr-xr-x 2 root root 4096 Nov 10 09:15 .
drwxr-xr-x 3 root root 4096 Nov  8 10:35 ..
-rw-r--r-- 1 root root  118 Nov 10 08:55 calc.c
-rw-r--r-- 1 root root   94 Nov 10 08:54 calc.h
-rw-r--r-- 1 root root 1056 Nov 10 09:15 calc.o
-rwxr-xr-x 1 root root 7396 Nov 10 09:15 main
-rw-r--r-- 1 root root  182 Nov 10 08:56 main.c
-rw-r--r-- 1 root root 1196 Nov 10 09:15 main.o
-rw-r--r-- 1 root root  142 Nov 10 09:15 Makefile
鎵цmake clean
[email protected]:/home/zhf/zhf/c_prj/make_function# make clean
rm *.o
rm main
[email protected]:/home/zhf/zhf/c_prj/make_function# ls -al
total 24
drwxr-xr-x 2 root root 4096 Nov 10 09:29 .
drwxr-xr-x 3 root root 4096 Nov  8 10:35 ..
-rw-r--r-- 1 root root  118 Nov 10 08:55 calc.c
-rw-r--r-- 1 root root   94 Nov 10 08:54 calc.h
-rw-r--r-- 1 root root  182 Nov 10 08:56 main.c
-rw-r--r-- 1 root root  142 Nov 10 09:15 Makefile

涓嬮潰鎴戜滑鏉ヤ慨鏀筩alc.h涓殑鍐呭锛?define max_value 50
鐪嬩笅缂栬瘧鍐呭銆傜敱浜巆alc.c鍜宮ain.c閮藉寘鍚簡calc.h鍥犳calc.c鍜宮ain.c閮戒細缂栬瘧
[email protected]:/home/zhf/zhf/c_prj/make_function# make
gcc -c main.c
gcc -c calc.c
gcc -o main main.o calc.o

濡傛灉鍙慨鏀筩alc.c涓殑鍐呭銆俢alc.c淇敼濡備笅
int calculate(int n,int k)
{
    printf("the value is %d",max_value);
    return n*k+n*k;
}
鍙互鐪嬪埌鍙紪璇戜簡calc.c銆俶ain.c娌℃湁缂栬瘧
[email protected]:/home/zhf/zhf/c_prj/make_function# make
gcc -c calc.c
gcc -o main main.o calc.o

褰撴病鏈変换浣曟枃浠朵慨鏀圭殑鏃跺€欙細浼氭彁绀簃ain is up to date
[email protected]:/home/zhf/zhf/c_prj/make_function# make
make: 鈥榤ain鈥?is up to date.

閭d箞make鏄浣曞伐浣滅殑鍛細
1 make浼氬湪褰撳墠鐩綍涓嬫煡鎵惧悕涓簃akefile鎴栬€匨akefile鐨勬枃浠?br>2 濡傛灉鎵惧埌锛屽畠浼氭壘鏂囦欢涓殑绗竴涓洰鏍囨枃浠讹紝鍦ㄤ笂闈㈢殑渚嬪瓙涓紝瀹冧細鎵惧埌main杩欎釜鏂囦欢
3 濡傛灉main涓嶅瓨鍦紝鎴栬€卪ain鎵€渚濊禆鐨勫悗闈㈢殑.o鏂囦欢鐨勪慨鏀规椂闂存瘮main鏅氾紝閭d箞灏变細鎵ц鍚庨潰鎵€瀹氫箟鐨勫懡浠ゆ潵鐢熸垚main杩欎釜鏂囦欢
4 濡傛灉main鎵€渚濊禆鐨?o鏂囦欢瀛樺湪锛岄偅涔坢ake浼氬湪褰撳墠鏂囦欢涓煡鎵剧洰鏍囦负.o鏂囦欢鐨勪緷璧栨€э紝濡傛灉鎵惧埌锛屽垯鍐嶆牴鎹偅涓鍒欑敓鎴?o鏂囦欢
5 褰揅鏂囦欢鍜孒鏂囦欢瀛樺湪鏃讹紝make浼氱敓鎴?o鏂囦欢銆傜劧鍚庡啀鐢?o鏂囦欢鐢熸垚make鐨勭粓缁撲换鍔′篃灏辨槸鎵ц鏂囦欢main
涔熷氨鏄锛宮ain浼氫竴灞備竴灞傜殑瀵绘壘鏂囦欢鐨勪緷璧栧叧绯伙紝鐩村埌缂栬瘧鍑轰竴涓洰鏍囨枃浠躲€傚鏋滃湪鏌ユ壘杩囩▼涓緷璧栫殑鏂囦欢鎵句笉鍒伴偅涔堝氨浼氱洿鎺ラ€€鍑烘垨鎶ラ敊銆?br>
缁х画鏉ョ湅涓嬩箣鍓嶇殑makefile鏂囦欢銆傚湪绗竴鏉¤鍒欑殑鏃跺€欍€?o鏂囦欢琚噸澶嶄簡涓ゆ銆傚鏋滃伐绋嬮渶瑕佸姞鍏ヤ竴涓柊鐨?o鏂囦欢锛岄偅涔堝氨闇€瑕佸湪2涓湴鏂瑰姞銆傚鏋渕akefile寰堝鏉傘€傞偅涔堝氨鍙湁鍙兘蹇樻帀涓€涓渶瑕佸姞鍏ョ殑鍦版柟銆傝€屽鑷寸紪璇戝け璐ャ€傛墍浠ヤ负浜唌akefile鐨勬槗缁存姢锛屽湪makefile涓彲浠ヤ娇鐢ㄥ彉閲忋€傚彲浠ョ悊瑙d负C璇█涓殑瀹忓畾涔?br>main:main.o calc.o
    gcc -o main main.o calc.o
鏂囦欢淇敼濡備笅锛?br>objects=main.o calc.o
main:$(objects)
    gcc -o main $(objects)
















































































































以上是关于make缂栬瘧涓€的主要内容,如果未能解决你的问题,请参考以下文章

Linux缂栬瘧瀹夎ffmpeg鐨刟vs2妯″潡

缂栬瘧瀹夎澶ф暟鎹钩鍙版潈闄愮鐞嗙粍浠?- Apache Ranger 3.x

瀹屽叏寮€婧愶紒鍗庝负鏂硅垷缂栬瘧鍣ㄦ寮忔敮鎸丆璇█浜嗭紝骞跺紑鏀鹃缚钂欐暀绋嬶紒

200琛孞S浠g爜锛屽甫浣犲疄鐜颁唬鐮佺紪璇戝櫒锛堜汉浜洪兘鑳藉浼氾級

瀹炵幇涓€涓唬鐮佺紪璇戝櫒锛?00琛孞S浠g爜锛?/h1>

200琛孞S浠g爜锛屽甫浣犲疄鐜板井鍨嬩唬鐮佺紪璇戝櫒锛堜汉浜洪兘鑳藉浼氾級