1. 程式人生 > 實用技巧 >Liunx之編譯指令碼Makefile介紹

Liunx之編譯指令碼Makefile介紹

前言

在 Liunx 平臺下,我們更注重編譯器對專案的編譯過程,因為在 Windows 平臺下有大量的 IDE 供我們使用,以至於大量的程式猿不知道自己寫的程式碼是怎麼在我們的物理機上執行。

如果你對你的程式碼是如何在物理機上執行的,那麼你大可跳轉到 Liunx之C/C++編譯流程解析

該文章只記錄Makefile的基本格式,和基本語法,如果這使你覺得乏味,那麼你或許對以下內容有興趣:

提醒

大可不必強迫自己去做一些傷元氣的事,或者寫一些傷元氣的程式碼。一切為了部落,呼哈~~

目錄
Makefile之介紹
* 警告: 
      li > 在Makefile中的命令,必須要以[Tab]鍵開始!!!

* 書寫格式:
      li > Makefile
      li > makefile

* 定義: 
      li > 告訴make維護一個大型程式,該做什麼。Makefile說明了組成程式的各模組間的相互關係及更新模組時必須進行的動作,make按照這些說明自動地維護這些模組。

      li > Makefile是一個文字形式的資料庫檔案,其中包含一些規則來告訴make處理哪些檔案以及如何處理這些檔案。這些規則主要是描述哪些檔案(稱為target目標文
           件,不要和編譯時產生的目標檔案相混淆)是從哪些別的檔案(稱為dependency依賴檔案)中產生的,以及用什麼命令(command)來執行這個過程。

* Makefile 的組成:
      li > 顯式規則,顯式規則說明了如何生成一個或多個目標檔案。這是由Makefile的書寫者明顯指出,要生成的檔案,檔案的依賴檔案,生成的命令。

      li > 隱式規則,由於make有自動推導的功能,所以隱式規則可以讓我們比較粗糙地簡略地書寫Makefile,這是由make支援的。

      li > 變數定義,在Makefile中我們要定義一系列的變數,變數一般都是字串,這個有點你C語言中的巨集,當Makefile被執行時,其中的變數都會被擴充套件到相應的引用
           位置上。

      li > 檔案指示,其包括了三個部分,一個是在一個Makefile中引用另一個Makefile,就像C語言中的include一樣;另一個是指根據某些情況指定Makefile中的有效部
           分,就像C語言中的預編譯#if一樣。

      li > 註釋,和UNIX的Shell指令碼一樣Makefile中只有行註釋, 其註釋是用 '#' 字元,這個就像C/C++中的 '//' 或者 '/*'。

* Makefile使用方法:
      li > make,執行make命令時,會對磁碟上的檔案進行檢查,如果目標檔案的生成或被改動時的時間至少比它的一個依賴檔案還舊的話,make就執行相應的命令,以更新
           目標檔案。目標檔案不一定是最後的可執行檔案,可以是任何一箇中間檔案並可以作為其他目標檔案的依賴檔案。

* Makefile使用方法擴充套件: 可以自定義偽命令,如 install、clean、debug、relese等
      li > make install
      li > make clean
      li > make debug
      li > make relese
      
Makefile之基本規則
/*
li > 一個目標(target),即make最終需要建立的檔案,如可執行檔案和目標檔案;目標也可以是要執行的動作,如'clean'

li > 一個或多個依賴檔案(dependency)列表,通常是編譯目標檔案所需要的其他檔案

li > 一系列命今(command),是make執行的動作,通常是把指定的相關檔案編譯成目標檔案的編譯命令,每個命令佔一行,且每個命令列的起始字元必須為TAB字元

# 以下例子詮釋了以上內容
# 
# 目標 : 依賴檔案
#      命令
#
target: main.o
      gcc -o target main.o

main.o: main.c
      gcc -c main.c -o main.o

clean: 
      rm -rf *.o target

*/