1.庫+makefile
庫
功能:移植性,封裝性,保護源碼

分類: 靜態(tài)庫??.a
? ? ? ? ???動態(tài)庫??.so
一、
靜態(tài)庫:libXXX.a
1、??準(zhǔn)備功能函數(shù)的.c文件
將所有功能函數(shù)的.c文件編譯為.o文件
2、?打包生成靜態(tài)庫: ar -rc libxxx.a add.o...
libStatic.a ?庫名要掐頭去尾:Static
3、?利用靜態(tài)庫編譯程序
gcc main.c ?-l庫名 -L庫的路徑
-l:(小寫的L)指明用到的庫文件
-L:庫文件所在的的路徑
特點:以空間換取時間
二、
libdong.so ?動態(tài)庫
1、先準(zhǔn)備功能函數(shù)的 .c
2、將.c ?轉(zhuǎn)化為 .o

3、打包生成動態(tài)庫 ?libxxx.so
gcc ?-fpic ?-shared ?xxx.o yyy.o -o?libxxx.so
或 gcc -shared -fpic *.o -o libdong.so
4、
第一步:將動態(tài)庫拷貝到/usr/lib
第二步:編譯應(yīng)用程序 gcc main.c -lxxx ?
-l:(小寫的L)指明用到的庫文件
sudo cp libdong.so /usr/lib
驗證:gcc mian.c -o main -ldong
特點:./main 以時間換空間?
三、
makefile
make
1、作用
相當(dāng)于腳本編程語言,本質(zhì)是實現(xiàn)自動化編譯,需要makefile或者Makefile文件支持
2、安裝
sudo apt-get install make
3、使用
makefile/Makefile是一個文件,可以用vim或者gedit編輯
格式:
目標(biāo):依賴
? ?(Tab)命令
整體思想:目標(biāo)和依賴的關(guān)系,命令就是來定義由依賴如何生成目標(biāo)的
???????注意:命令之前要有tab鍵不允許有空格
?
注釋: 以#開頭
?
變量
定義: 變量名=XXX
使用: $(變量名)
?
特殊變量:
$@ 目標(biāo)文件
$^ 所有的依賴文件
如果目標(biāo)文件中有多個重復(fù)的,那么這個變量會除去重復(fù)的依賴文件,只保留一份。
?

$< 所有依賴合集中的第一個依賴文件
如果依賴目標(biāo)是以模式(%)定義的,那么$<將是復(fù)合模式的一系列的文件集合,注意,是一個一個取出來的,和目標(biāo)一對一執(zhí)行命令。
%表示通配符
?

偽目標(biāo):沒有依賴的目標(biāo)
格式:
目標(biāo):
(Tab)命令
舉例:
clean:
rm *.o main
?
運行:
終端輸入:make
make默認(rèn)生成文件中的第一個目標(biāo)
要想從生成其他目標(biāo):make 目標(biāo)
備注:
多個makefile
? make的時候是需要有makefile文件來支持
直接make:會找??Makefile??或?makefile(先找makefile,沒有就找Makefile)
想要指定:make -f makefile或者make -f Makefile
?
?
?
?