實際當中程式檔案比較大,這時候對檔案進行分類,分為標頭檔案、原始檔、目標檔案、可執行檔案。也就是說通常將檔案按照檔案型別放在不同的目錄當中,這個時候的makefile需要統一管理這些檔案,將生產的目標檔案放在目標目錄下,可執行檔案放到可執行目錄下。
dir_inc = ./includedir_src = ./src
dir_obj = ./obj
dir_bin = ./bin
src = $(wildcard $/*
.c)obj = $(patsubst %.c,$/%.o,$(notdir $))
target = main
bin_target = $/$
cc = gcc
cflags = -g -wall -i$
$:$ $(cc) $(obj) -o $@
$/%.o:$/%.c
$(cc) $(cflags) -c $< -o $@
.phony:clean
clean:
find $ -name *.o -exec rm -rf{}
解釋如下:
(1)makefile中的 符號 $@, $^, $< 的意思:
$@ 表示目標檔案
$^ 表示所有的依賴檔案
$< 表示第乙個依賴檔案
$? 表示比目標還要新的依賴檔案列表
(2)wildcard、notdir、patsubst的意思:
wildcard : 擴充套件萬用字元
notdir : 去除路徑
patsubst :替換萬用字元
src = $(wildcard *.c)
等於指定編譯當前目錄下所有.c檔案,如果還有子目錄,比如子目錄為inc,則再增加乙個wildcard函式,象這樣:
src = $(wildcard *.c) $(wildcard inc/*.c)
(3)gcc -i -l
-l的區別:
gcc -o hello hello.c
-i /home/hello/include -l /home/hello/lib -lworld
上面這句表示在編譯hello.c時-i /home/hello/include表示將/home/hello/include目錄作為第乙個尋找標頭檔案的目錄,
尋找的順序是:/home/hello/include-->/usr/include-->/usr/local/include
-l /home/hello/lib表示將/home/hello/lib目錄作為第乙個尋找庫檔案的目錄,
尋找的順序是:/home/hello/lib-->/lib-->/usr/lib-->/usr/local/lib
-lworld表示在上面的lib的路徑中尋找libworld.so動態庫檔案(如果gcc編譯選項中加入了「-static」表示尋找libworld.a靜態庫檔案)
通用版的測試流程
前提 針對乙個從零開始的全新的專案 一 目標 結合公司現有的專案情況制定合理規範的測試流程,提高測試效率和產品質量,盡可能減少客戶對產品的問題反饋,核心還是要加強專案組成員之間的工作交流和溝通,保證整個專案的高效率的按質按量的交付。二 測試流程說明圖 三 測試流程 1.需求分析 參與人員 客戶 專案...
無亂碼filter完全通用版
dofilter req,resp,chain 1 轉換型別 2 if method.equalsignorecase get enumeration names req.getparameternames while names.hasmoreelements string name string...
通用Makefile詳解
我們在linux環境下開發程式,少不了要自己編寫makefile,乙個稍微大一些的工程下面都會包含很多。c的源文 件。如果我們用gcc去乙個乙個編譯每乙個原始檔的話,效率會低很多,但是如果我們可以寫乙個makefile,那麼只需要執行乙個make就ok了,這 樣大大提高了開發效率。但是makefil...