Makefile中的 ifeq
阿新 • • 發佈:2018-10-31
Makefile中的ifeq
多條件判斷
ifeq ($(TARGET_ARCH), arm) LOCAL_SRC_FILES := ... else ifeq ($(TARGET_ARCH), x86) LOCAL_SRC_FILES := ... else ifeq ($(TARGET_ARCH), mips) LOCAL_SRC_FILES := ... else LOCAL_SRC_FILES := ... endif
刪除中間檔案:
clean:
rm -f $(ALL_OBJS)
make是如何工作的
在預設的方式下,也就是我們只輸入make命令。那麼,
- make會在當前目錄下找名字叫“Makefile”或“makefile”的檔案。
- 如果找到,它會找檔案中的第一個目標檔案(target),並把這個檔案作為最終的目標檔案。
- 如果目標檔案不存在,或是目標檔案所依賴的後面的 .o 檔案的修改時間要比目標檔案新,那麼,他就會執行後面所定義的命令來生成目標檔案。
- 如果目標檔案所依賴的.o檔案也存在,那麼make會在當前檔案中找目標為.o檔案的依賴性,如果找到則再根據那一個規則生成.o檔案。(這有點像一個堆疊的過程)
- 當然,你的C檔案和H檔案是存在的啦,於是make會生成 .o 檔案,然後再用 .o 檔案宣告make的終極任務,也就是執行目標檔案。
反斜槓(\)是換行符的意思
編譯、連結
一般來說,無論是C、C++、還是pas,首先要把原始檔編譯成中間程式碼檔案,在Windows下也就是.obj檔案,UNIX下是.o檔案,即Object File,這個動作叫做編譯(compile)。
然後再把大量的Object File合成執行檔案,這個動作叫作連結(link)。
編譯時,編譯器需要的是語法的正確,函式與變數的宣告的正確。對於後者,通常是你需要告訴編譯器標頭檔案的所在位置(標頭檔案中應該只是宣告,而定義應該放在C/C++檔案中),只要所有的語法正確,編譯器就可以編譯出中間目標檔案。一般來說,每個原始檔都應該對應於一箇中間目標檔案(O檔案或是OBJ檔案)。
連結時,主要是連結函式和全域性變數,所以,我們可以使用這些中間目標檔案(O檔案或是OBJ檔案)來連結我們的應用程式。連結器並不管函式所在的原始檔,只管函式的中間目標檔案(Object File),在大多數時候,由於原始檔太多,編譯生成的中間目標檔案太多,而在連結時需要明顯地指出中間目標檔名,這對於編譯很不方便,所以,我們要給中間目標檔案打個包,在Windows下這種包叫“庫檔案”(LibraryFile),也就是 .lib檔案,在UNIX下,是Archive File,也就是 .a檔案