makefile專題 路徑搜尋的綜合示例

2021-08-15 18:23:25 字數 2821 閱讀 1859

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...