簡單實用的Makefile
阿新 • • 發佈:2020-07-19
第一種:
# 目錄樹結構如: # . # ├── exec # ├── exec.c # ├── fork # ├── fork.c # ├── Makefile # 對於自己做的一些小練習,用這樣的Makefile非常方便 SRC = $(wildcard *.c) TARGETS = $(patsubst %.c, %, $(SRC)) # get targets name without .c CC = cc all: $(TARGETS) %: %.c $(CC) $< -o $@ .PHONY: clean clean: rm -rf $(TARGETS)
第二種:
# 目錄樹如下: # . # ├── h # │ ├── main.h # │ └── print.h # ├── makefile # ├── output # │ └── a.out.1.0.0 # └── src # ├── main.c # ├── main.o # ├── print.c # └── print.o # makefile - enterprise version VERSION = 1.0.0 #版本號 TARGET = a.out #生成的可執行檔名 SOURCE= $(wildcard src/*.c) #各個原始檔 OBJ = $(patsubst %.c, %.o, $(SOURCE)) #對應的各中間檔案.o INCLUDES = -I ./h #標頭檔案的包含路徑 CFLAGS = -Wall -c #gcc編譯選項 DEBUG = -D HELLO #debug選項:-D後加程式中的#ifdef SYMBOL,相當於定義了該符號 #LIBS = #庫檔案路徑 CC = cc #定義CC $(TARGET): $(OBJ) #目標檔案依賴 @mkdir -p ./output #建立目錄但不回顯 $(CC) $(OBJ) -o ./output/$(TARGET).$(VERSION) #可執行檔名後跟版本號,便於區分版本 %.o: %.c #中間檔案依賴,這裡%符的使用:對於所有的n個xx.c,有相應的xx.o,相當於展開為n個依賴關係,這種寫法很簡潔 $(CC) $(INCLUDES) $(DEBUG) $(CFLAGS) $< -o $@ #$<代表依賴列表的第一個檔案,$@代表目標檔案 .PHONY: clean clean: -rm -rf $(TARGET) $(OBJ) ./output/*