姓名:李勝偉 學(xué)號:19020100133 學(xué)院:電子工程學(xué)院
轉(zhuǎn)自:https://blog.csdn.net/zh8706/article/details/114030710
【嵌牛導(dǎo)讀】嵌入式開發(fā)(八):makefie文件
【嵌牛鼻子】嵌入式 開發(fā)
【嵌牛提問】嵌入式開發(fā)
【嵌牛正文】
makefie文件參數(shù)
-c 編譯階段使用,不做連接谷市。生成ojb目標(biāo)文件(.o)蛔垢。如果不加該選項(xiàng),直接完成編譯與連接迫悠,并且不生成過程文件
-o 指定輸出文件鹏漆,后面跟目標(biāo)文件名,編譯與連接階段均可用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
-g 生成調(diào)試信息
-MD 生成目標(biāo)文件的依賴關(guān)系,存放于.d文件中
-MP 生成目標(biāo)文件的依賴關(guān)系甫男,存放于.d文件中
舉例
$^ 所有依賴的名字且改,名字之間用空格隔開 $(F_EXE): $(SOURCES)
? ? $(CC) $(CFLAGS) $(CINCLUDES) $^ $(LDLIBS) $(LDFLAGS) -o $@
? ? $(STRIP) $(F_EXE)
$@ 目標(biāo)文件名
$< 第一個依賴的文件
all makefile文件默認(rèn)只有1個目標(biāo)验烧,當(dāng)有多個目標(biāo)時板驳,使用all指定最終的目標(biāo)
all: $(F_EXE)
$(OBJECTS): %.o:%.cpp
? ? $(CC) $(CFLAGS) -c $(CINCLUDES) $^ -o $@
$(F_EXE): $(SOURCES)
? ? $(CC) $(CFLAGS) $(CINCLUDES) $^ $(LDLIBS) $(LDFLAGS) -o $@
? ? $(STRIP) $(F_EXE)
makefile自動化語句
1.自動獲取到每個目錄
#獲取src目錄內(nèi)最大深度為3的所有子目錄路徑
SRC := src
ALLSRC? := $(shell find $(SRC) -maxdepth 3 -type d)
2. 自動獲取源文件及目標(biāo)文件
#查找每個SUB_DIRS目錄,獲取到每個.c碍拆,賦值給到SRC
SRC := $(foreach dir, $(SUB_DIRS), $(wildcard $(dir)/*.c))
#自動獲取到源文件對應(yīng)的.o文件
OBJ := $(SRC:%.c=%.o)
CPPSRC := $(foreach dir, $(SUB_DIRS), $(wildcard $(dir)/*.cpp))
CPPOBJ := $(CPPSRC:%.cpp=%.o)
3. 在每個頭文件目錄路徑名前加-I
CINCLUDES := $(patsubst %,-I%, $(INCLUDEDIRS:%/=%))
4. 每個庫文件目錄路徑名前加-L
CLIBS := $(patsubst %,-L%, $(LIBDIRS:%/=%))
5. 靜態(tài)(自動化)模式
下面代碼中的第1行若治,$(OBJ)表示取目標(biāo)名,%.o: %.c表示取目標(biāo)中.o后綴的文件替換為.c感混,作為依賴文件端幼。第2行的$<是指第1行中完成替換后的.c文件
$(OBJ): %.o: %.c
$(CC) -c $< -o $@? $(INC_FLAGS) $(CFLAGS)
以上代碼可簡寫為:
%.o: %.c
? ? $(CC) -c $< -o $@? $(INC_FLAGS) $(CFLAGS)
————————————————
版權(quán)聲明:本文為CSDN博主「夜風(fēng)里唱」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議弧满,轉(zhuǎn)載請附上原文出處鏈接及本聲明婆跑。
原文鏈接:https://blog.csdn.net/zh8706/article/details/114030710