1. 程式人生 > 實用技巧 >簡單實用的Makefile

簡單實用的Makefile

第一種:

# 目錄樹結構如:
# .
# ├── 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/*