一、make是什麼
gnu make是乙個工程管理器,專門負責管理、維護較多檔案的處理,實現自動化編譯。如果乙個工程專案中,有成百上千個**原始檔,若其中乙個或多個檔案進過修改,make就需要能夠自動識別更新了的**,不需要像方法1一樣逐個輸入編譯冗長的命令列,就可以完成最後的編譯工作。make執行時,自動尋找makefile(makefile)檔案,然後執行編譯工作。因此,我們需要自己編寫makefile檔案(makefile與makefile都可以直接被make命令識別,下同。但linux區分大小寫)來管理、維護工程檔案,提高實際專案的工作效率。
二、適用什麼情況
1)如果這個工程沒有編譯過,那麼我們的所有c檔案都要編譯並被鏈結。
2)如果這個工程的某幾個c檔案被修改,那麼我們只編譯被修改的c檔案,並鏈結目標程。
3)如果這個工程的標頭檔案被改變了,那麼我們需要編譯引用了這幾個標頭檔案的c檔案,並鏈結目標程式。
三、主要過程
1.設定編譯環境 set compile environment
2.獲取要編譯的原始檔,以及把原始檔轉換為目標檔案 ( 原始檔和目標檔案) source to obj
3.將檔案編譯為目標檔案 objing
4.將目標檔案鏈結成可執行檔案或(打包為)動態庫,或靜態庫 linking
5.其他方面 clean等
四、示例
## 設定編譯環境
cc:=gcc
cxx:=g++
bin:= libdemo.so
flags := -wall -g -fpic
cxx_flags := -wall -g -pipe -fpic -shared -export-dynamic
lib := -l../common/test/ -ltest
include_path := -i/common/ -i../common/test/
## 獲取要編譯的原始檔,以及把原始檔轉換為目標檔案
sources := $(wildcard *.c *.cpp)
objs := $(patsubst %.c, %.o, $(patsubst %.cpp,%.o,$(sources)) )
## 將原始檔編譯為目標檔案
%.o: %.c
$(cc) $(flags) -c $< -o $@ $(include_path)
%.o:%.cpp
$(cxx) $(flags) -c $< -o $@ $(include_path)
## 將目標檔案鏈結成可執行檔案或動態庫,或靜態庫
$(bin) : $(objs)
$(cxx) $(cxx_flags) $(objs) $(include_path) $(lib) -o $(bin)
chmod a+x $(bin)
## 其他
clean:
rm -rf *.o $(bin)
install:
cp $(bin) ../common/bin
makfile 中 變數的含義
例子 dep sed dependencies q makefile tmp dep sed dependencies q makefile tmp make for i in init c do echo n init cpp m i done tmp make cp tmp make makef...
Android中makfile的隨記
什麼是makefile?也許非常多winodws的程式設計師都不知道這個東西,由於那些windows的ide都為你做了這個工作,但我認為要作乙個好的android底層程式設計師。makefile還是要懂。特別在unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從乙個...
編寫boot exe檔案
org 07c00h 程式會被載入到7c00處,所以需要這一句 mov ax,cs mov ds,ax mov es,ax call dispstr 呼叫顯示字串例程 jmp 無限迴圈 dispstr mov ax,bootmessage mov bp,ax es bp 串位址 mov cx,16 ...