前言
從學習c語言開始就慢慢開始接觸makefile,查閱了很多的makefile的資料但總感覺沒有真正掌握makefile,如果自己動手寫乙個makefile總覺得非常吃力。所以特意借助部落格總結makefile的相關知識,通過例子說明makefile的具體用法。
1.只有單個c檔案
2.含有多個c檔案
3.需要包括標頭檔案路徑
4.增加巨集定義
5.增加系統共享庫
6.增加自定義共享庫
7.乙個實際的例子
【**倉庫】——makefile-example
【本例說明】
本例將說明makefile檔案中如何加入巨集定義。
1.gcc複習
巨集定義使用字首-d,在編譯過程中可以把巨集定義追加到cflag中。巨集定義有兩種相似的寫法
【第一種】-d defines
【第二種】-d defines=condition
2.原始檔
使用兩種不同的方式,通過巨集定義包裹列印功能,分別使用#ifdef和#if
[cpp] view plain
copy
#include
#include
#include
int
main(
void
)
3.makefile
請替換其中的[tab],並以**倉庫中的makefile檔案為主。
[cpp] view plain
copy
# 指令編譯器和選項
cc=gcc
cflags=-wall -std=gnu99
# 巨集定義
defs = -dtest_add -dtest_sub=1
cflags += $(defs)
# 目標檔案
target=test
# 原始檔
srcs = test.c \
./test-add/test-add.c \
./test-sub/test-sub.c
# 標頭檔案查詢路徑
inc = -i./test-add -i./test-sub
# 目標檔案
objs = $(srcs:.c=.o)
# 鏈結為可執行檔案
$(target):$(objs)
# @echo target:$@
# @echo objects:$^
[tab]$(cc) -o $@ $^
clean:
[tab]rm -rf $(target) $(objs)
# 連續動作,請清除再編譯鏈結,最後執行
exec:clean $(target)
[tab]@echo 開始執行
[tab]./$(target)
[tab]@echo 執行結束
# 編譯規則 $@代表目標檔案 $< 代表第乙個依賴檔案
%.o:%.c
[tab]$(cc) $(cflags) $(inc) -o $@ -c $<
4.具體說明
makefile定義標頭檔案的方法有兩種
【第一種】-d defines
【第二種】-d defines=condition
defs = -dtest_add -dtest_sub=1
為了說明問題,此處使用了兩種不同的寫法。此時兩處列印功能均被執行
cflags += $(defs)
追加到cflags中,此處需要強調cflags只是乙個變數,可以命名為任何合法的名稱,只要在編譯過程中引用該引數即可。
$(cc) $(cflags) $(inc) -o $@ -c $<
5.執行過程
【編譯和鏈結】
make clean && make
【控制台輸出】
rm -rf test test.o ./test-add/test-add.o ./test-sub/test-sub.o
gcc -wall -std=gnu99 -dtest_add -dtest_sub=1 -i./test-add -i./test-sub -o test.o -c test.c
gcc -wall -std=gnu99 -dtest_add -dtest_sub=1 -i./test-add -i./test-sub -o test-add/test-add.o -c test-add/test-add.c
gcc -wall -std=gnu99 -dtest_add -dtest_sub=1 -i./test-add -i./test-sub -o test-sub/test-sub.o -c test-sub/test-sub.c
gcc -o test test.o test-add/test-add.o test-sub/test-sub.o
從控制台的輸出可以看出,在編譯過程中加入了-d引數。
【執行】
a=3
b=2a+b=5
a-b=1
最終效果和預期完全相同,makefile得到的驗證。
6.總結
增加巨集定義的兩個方法 -d defines 和 -d defines=condition
巨集定義追加到cflag之後
makefile 增加巨集定義
0.前言 從學習c語言開始就慢慢開始接觸makefile,查閱了很多的makefile的資料但總感覺沒有真正掌握makefile,如果自己動手寫乙個makefile總覺得非常吃力。所以特意借助部落格總結makefile的相關知識,通過例子說明makefile的具體用法。例說makefile索引博文 ...
Make File符號說明
用途define 定義乙個 資料報 是用enddef做結尾,可以包含多行的命令。ifeq ifneq 條件判斷,可以搭配else使用,endif結尾。原型 ifeq arg1,arg2 ifdef ifndef 變數是否定義的條件判斷,可以搭配else使用,endif結尾。原型 ifdef var。...
makefile編寫說明
1.定義 makefile是通過制定規則來編譯程式的乙個指令碼而已。在linux中使用make命令來執行makefile檔案。2.命名 makefile或makefile,若是指定其他名稱。如 makefile.可以這樣使用make f makefile或make clean f makefile ...