1. 程式人生 > >Makefile中的 ifeq

Makefile中的 ifeq

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命令。那麼,

  1. make會在當前目錄下找名字叫“Makefile”或“makefile”的檔案。
  2. 如果找到,它會找檔案中的第一個目標檔案(target),並把這個檔案作為最終的目標檔案。
  3. 如果目標檔案不存在,或是目標檔案所依賴的後面的 .o 檔案的修改時間要比目標檔案新,那麼,他就會執行後面所定義的命令來生成目標檔案。
  4. 如果目標檔案所依賴的.o檔案也存在,那麼make會在當前檔案中找目標為.o檔案的依賴性,如果找到則再根據那一個規則生成.o檔案。(這有點像一個堆疊的過程)
  5. 當然,你的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檔案