爲了可以鞏固以前的學習,這裏用一個小項目來完成變量和函數的總結。
bash
需求以下:
ide
一、 自動生成target文件夾存放可執行文件
函數
二、 自動生成objs文件夾存放編譯生成的目標文件
學習
三、 支持調試版本的編譯選項
ui
四、 考慮代碼的擴展性
調試
#使用的命令 CC := gcc MKDIR := mkdir RM := rm -rf #目標文件夾 DIR_OBJS := objs DIR_TARGET := target #輔助變量 DIRS := $(DIR_OBJS) $(DIR_TARGET) #目標 TARGET := $(DIR_TARGET)/hello-makefile.out #源文件, 經過使用預約義函數獲取 SRCS := $(wildcard *.c) #main.c const.c fun.c #根據源文件,獲取目標文件,而後,將目標文件放到文件夾下 OBJS := $(SRCS:.c=.o) #main.o const.o fun.o OBJS := $(addprefix $(DIR_OBJS)/, $(OBJS)) #objs/main.o objs/const.o objs/fun.o #定義僞目標 .PHONY : rebuild clean all #定義最終規則 $(TARGET) : $(DIRS) $(OBJS) $(CC) -o $@ $(OBJS) @echo "Target File ==> $@" #建立文件夾 $(DIRS): $(MKDIR) $@ #根據目錄完成模式替換,這裏的.o文件都應該在objs文件夾下,所以 $(DIR_OBJS)/%.o : %.c $(CC) -o $@ -c $^ rebuild : clean all all: $(TARGET) clean : $(RM) $(DIRS)
上面是不考慮調試的代碼,運行結果以下
blog
下面增長編譯選項功能
get
將這部分代碼修改便可it
$(DIR_OBJS)/%.o : %.c $(CC) -o $@ -c $^ $(DIR_OBJS)/%.o : %.c ifeq ($(DEBUG), true) $(CC) -o $@ -g -c $^ else $(CC) -o $@ -c $^ endif
交流QQ羣:199546072編譯