今天在Linux系統下撰寫了一個C程式,由于頭檔案和C檔案很多而且在不同的檔案夾內,導致每次用gcc的時候很麻煩,需要寫一大行并且還要注意順序,使得每次寫的時候很費勁,而Makefile書寫好后在除錯的時候就方便多了!
原gcc命令:
由于a檔案夾中的.c檔案依賴b檔案夾中的.c檔案,而demo.c依賴a和b檔案夾中的c,而且需要鏈接多執行緒庫 -ldl pthread ,
命令:gcc ../a/b/*.c ../a/*.c ./demo.c -o app -ldl pthread
對應的Makefile:
target = app target :生成可執行檔案的名字
CC = gcc CC :將關鍵字gcc重命名
CFLAGS = -ldl -lpthread CFLAGS : 重命名鏈接多執行緒庫
OBJ1 = $(patsubst %.c,%.o,$(shell ls ../a/b/*.c)) OBJ1 :b檔案夾中的.c檔案轉化成.o檔案
注:patsubst 替換通配符 后面是shell命令
OBJ2 = $(patsubst %.c,%.o,$(shell ls ../a/*.c)) OBJ2 :a檔案夾中的.c檔案轉化成.o檔案
OBJ3 = $(patsubst %.c,%.o,$(shell ls ./demo.c)) OBJ3 :demo.c檔案轉化成.o檔案
OBJS = $(OBJ1) $(OBJ2) $(OBJ3) 將OBJ1 ,OBJ2 ,OBJ3 用空格連接到OBJS
$(target):$(OBJS)
$(CC) $(OBJS) -o $(target) $(CFLAGS) 將.o檔案編譯成可執行檔案,并命名為target變數的名字 app
同時加上鏈接多執行緒庫(代碼中沒有多執行緒 可以不加)
%.o:%.c
$(CC) -c $< -o $@ 將所有的.c編譯成.o
clean:
rm -rf $(OBJS) clean:洗掉所有.o檔案
all:
@echo $(OBJS) all:列印所有.o檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/169222.html
標籤:C
