1)工程專案中不希望原始碼資料夾在編譯時被改動(唯讀資料夾)
2)在編譯時自動建立資料夾(build)用於存放編譯結果
3)編譯過程中能夠自動搜尋需要的檔案
4)makefile易於擴充套件,能夠復用相同型別的專案
5)支援除錯版本的編譯選項
1)自動獲取原始檔列表(函式呼叫):srcs := $(wildcard src/*.c)
2)根據原始檔列表生成目標檔案列表(變數的值替換):objs := $(srcs:.c=.o)
3)替換每乙個目標檔案的路徑字首(函式呼叫):objs := $(patsubst src/%, build/%, $(objs))
提高擴充套件性,修改後:
.phony
: all clean
dir_build
:= build
dir_src
:= src
dir_inc
:= inc
# 用變數表示字尾型別
type_inc
:= .h
type_src
:= .c
type_obj
:= .o
cc:= gcc
# 新增鏈結標籤
lflags
:=cflags
:= -i
$(dir_inc)
# 新增debug版本
ifeq ($(
debug), true)
cflags += -g
endif
mkdir
:= mkdir
rm:= rm -rf
:= $(
hdrs
:= $(wildcard $(
dir_inc)/*$(
type_inc))
hdrs
:= $(notdir $(
hdrs))
objs
:= $(wildcard $(
dir_src)/*$(
type_src))
objs
:= $(
objs:$(
type_src)=$(
type_obj))
objs
:= $(patsubst $(
dir_src)/%, $(
dir_build)/%, $(
objs))
vpath %$(
type_inc) $(
dir_inc)
vpath %$(
type_src) $(
dir_src)
all :
$(dir_build) $(
@echo
$(dir_build) :
$(mkdir) $@
$($(
objs)
$(cc) $(
lflags) -o $@
$^$(
dir_build)/%$(
type_obj) : %$(
type_src) $(
hdrs)
$(cc) $(
cflags) -o $@ -c $<
clean:
$(rm) $(
dir_build)
makefile 指定檔案搜尋路徑和檔案生成路徑
在編寫makefile的時候,會遇到就是程式原始檔和makefile不是在同乙個目錄下的,如引用某乙個標頭檔案或者.c檔案,此時需要通過一些設定來引導make到指定的目錄下面對對應的標頭檔案進行搜尋。一 makefile在搜尋指定檔案的時候有三種方式,具體如下 1 在makefile的開頭通過對 v...
0825 0903搜尋專題
poj1321 棋盤問題 dfs,雖然並不知道書上或者模板裡的dfs是什麼樣子,但是大概了解。vj掛了 在上面下回再補poj2251 dungeon master 這道題很苦逼的做了好幾天,交了幾十發,用兩種方式均返回tle。然後搜題解,說是要用bfs,啃書,發現原來自己一直不會bfs。寬度優先搜尋...
搜尋專題 S
1 簡單描述 數獨,在乙個9x9的方格中,需要把數字1 9填寫到空格當中,並且使方格的每一行和每一列中都包含1 9這九個數字。同時還要保證,空格中用粗線劃分成9個3x3的方格也同時包含1 9這九個數字。2 思路 include using namespace std struct node node...