歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux的通用makefile模板

Linux的通用makefile模板

日期:2017/2/28 16:20:23   编辑:Linux教程

# 下面的變量可以在shell 的環境變量裡面指定。
# 也可以象下面這樣在 Makefile 裡面指定。
# CC=gcc # 編譯器
# CFLAGS=-Wall -Werror -g # 編譯器參數
# LD=gcc # 連接器參數
# LDFLAGS= $(LIBS) -lpthread # 連接器參數
# DEPENDFLAG=-MM # 生成依賴關系文件的參數
# INCLUDES=-Idir1 -Idir2 # 指明包含外部頭文件的目錄
# LIBS=-la -lb -lc # 指明引用外部的庫文件

CFLAGS:=$(CFLAGS) $(INCLUDES)
LDFLAGS:=$(LDFLAGS) $(LIBS)


#指明項目中,包含源程序的所有的子目錄。
SRCDIRS=.
#指明最終生成的可執行文件的名稱
PROGRAMS=test.exe


#下面的部分一般不用改動
#從所有子目錄中得到源代碼的列表
SRCS=$(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))


#得到源代碼對應的目標文件的列表
OBJS=$(SRCS:.c=.o)

#得到源代碼對應的依賴關系文件的列表
#依賴關系文件就是一個目標文件依賴於
#哪些頭文件和源程序,依賴關系是自動
#生成的,並且用include語句包含在Makefile中
DEPENDS=$(SRCS:.c=.d)


#指明默認目標是生成最終可執行文件。
all: $(PROGRAM)


#生成依賴關系文件
%.d:%.c
$(CC) $(DEPENDFLAG) $(CFLAGS) $< |\
sed "s?\\(.*\\):?$(basename $<).o $(basename $<).d :?g" \
> $@ || $(RM) $@

$(PROGRAMS): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(filter %.o ,$+)


# 包含入依賴關系文件
include $(DEPENDS)


# 刪除生成的中間文件
clean:
rm $(OBJS) $(DEPENDS) $(PROGRAMS)

Copyright © Linux教程網 All Rights Reserved