Make編譯機制,Configure
- 1.Make機制
- demo1.make編譯
- demo2.make清理
- demo3:make 安裝
- demo4:make 卸載
- 2.configure
- 2.1 Autoconf
- 2.2 軟件的源碼安裝
軟件發布的一些基礎知識。
- gcc, cpp, as, ld–施工隊,底層干活工人
- make --包工頭,指揮工人工作
- configure–分析師,分析材料是否具備
- Autoconf–市政規劃局,派出有用的分析師
內存泄漏–如果一個長時間運行的程序,不斷申請新的控價,而且不釋放。內存空間被一點一點地消耗光。
內存管理機制
- windows總是喜歡盡量留出空間來給程序用
- Linux–盡可能多的把會用到的庫、命令等統統都搬進來,能占多少是多少。要運行程序時,他把東西一點一點搬進內存,Linux就把原來占用的資源一點一點往外搬。–Copy-on-Write
free 命令查看內存使用情況(單位為KB)
- men–內核緩沖后的利用率
- buffer/cache–軟件占用的內存
發布軟件
本機編譯得到的二進制文件,需要很多庫文件來協助才能運行的起來。
查看程序的依賴庫,使用ldd命令。
lld ./rubbish1115
因為需要眾多庫文件協助,所以在Linux上發布軟件時都是發布源碼包,然后在目標系統上再編譯一遍。
1.Make機制
Make 也是一個程序,用于統籌規劃文件編譯。通過Makefile來實現統籌規劃。能夠依據文件修改的時間,智能地判斷出哪些模塊需要重新編譯,重新連接。
windows下的VC也是類似的作用,只不過把他們都用圖形界面封裝了起來。
make 命令運行的時候,會在當前目錄下查抄Makefile 或者 makefile文件。找到就執行,沒找到就報錯。makefile每一段的格式都類似
目標:原料
<tab>加工方法
demo1.make編譯
all:main.o part1.o part2.o gcc main.o part1.o part2.o -o mybin
main.o:mian.cgcc -c main.c
part1.o:part1.cgcc -c part1.c
part2.o:part1.cgcc -c part2.c
- make 不加任何參數的時候,從all 這一段開始工作。如果原料部分文件不存在,往下去尋找相應的文件,找到后返回,直至加工方法執行完成。
- make +參數來指定目標,那么就會去只想指定目標對應的那一段
- make 沒有指定目標,makefile中也沒有all, 從文件開始處執行。
- Makefile文件可以引用另一makefile文件,因此一個工程軟件中,經常可以看到不同源碼目錄下都有一個makefile文件。
demo2.make清理
clean:rm ./*.orm mybin
demo3:make 安裝
將編譯好的mybin文件,復制到系統中相應的目錄中,完成安裝
install:mybincp ./mybin /user/bin/
demo4:make 卸載
作為一個標準的GNU軟件,生成的makefile中應該高喊uninstall的定義。如果不規范的軟件,沒有提供uninstall方法,就只能手動刪除了。
make uninstall
(瞎猜,盲寫)
uninstall:rm /user/bin/mybin
2.configure
檢查編譯的各種條件是否必備,檢查各種條件都必備之后,會生成Makefile文件。
鐵打的make只有一個,流水的configure每個軟件一個。
運行./configure 之后,會檢查各種各樣的條件,例如 “checking for xxxxx yes/no”, 不是必須的材料沒有了也就沒有了。如果必須的東西沒有了,那么confiugre就會報錯并停止。
2.1 Autoconf
自動生成configure文件(幾萬行,自己敲時不可能了。)
- autoscan–檢查源碼目錄結構,生成confiugre.scan報告。(人工)修改該文件,生成configure.in文件,解釋一些有用的內容:
autoscan
# AC_INIT(main.c)--說明這個工程主要的圖紙是那個文件.
# AM_INIT_AUTOMAKE(rubbish1115,1.0)--說明這個項目的名稱,叫做rubbish115, 版本是1.0.
# AC_PROG_CC--configure需要檢查C語言編譯器是否正常.
# AC_OUTPUT(Makefile)--configure需要產生的文件叫Makefile.
- aclocal–查看configure.in文件,對一些宏定義做一些詳細的注解和說明,并生成aclocal.m4報告
aclocal
3.autoconf-依據configure.in 和aclocal.m4生成configure腳本
4.automake–生成configure腳本能夠識別和使用的makefile.in文件(自己寫的makefile文件不管用)。需要(人為)提供草稿文件makefile.am。
makefile.am文件內容
AUTOMAKE_OPTIONS=foreign # 行業規范,
bin_PROGRAMS=rubbish1115 # 說明編譯之后的程序叫rubbish1115
rubbish1115_SOURCES=main.c ai.c board.c # 說明這個工程包括這三個文件
Automake主要幫助開發GNU軟件的人員來維護軟件,所以在執行Automake時,默認會檢查目錄下是否存在標準GNU軟件中應具備的文件,例如NEWS,AUTHOR, ChangeLog等文件。設置foreign,則會忽略對這些文件的檢查。
2.2 軟件的源碼安裝
原料都準備好之后,依次運行以下三條命令,就能把軟件安裝上
./configure
make
make install