常見的makefile寫法

1、目標名稱,擺脫手動設置目標名稱

TARGET = $(notdir $(CURDIR))
all:$(TARGET)
	CMD....
$(CURDIR) 表示Makfile當前目錄全路徑

$(notdir $(path)) 表示把path目錄去掉路徑名,只留當前目錄名
這樣就可以得到Makefile當前目錄名稱,用目錄名作爲目標程序名是一個不錯的選擇

2、使用include,把所有Makefile共享的設置包含進來

BASE_DIR = /root/DM36x
include $(BASE_DIR)/Rules.make

XDC_PATH = $(DMAI_INSTALL_DIR)/packages
DMAI_INSTALL_DIR在Rules.make中已經設置過,這樣,需要使用DMAI_INSTALL_DIR變量的時候只要include 這個Rules.make接可以了

3、遍歷遍歷所有特定的源文件

SOURCES = $(wildcard *.c)
HEADERS = $(wildcard *.h)
如果當前目錄先有 main.c  func.c  func.h 

這樣SOURCES變量就等於main.c  func.c

HEADERS變量就等於func.h

這樣就每次添加源文件後 就不需要重新修改makefile了

4、替換文件名稱

OBJFILES = $(SOURCES:%.c=%.o)
如果SOURCES等與3中的main.c和func.c

這樣OBJFILES就等於main.o func.o 

同樣擺脫了手動修改編譯的中間文件名

5、交叉編譯設置

VERBOSE = @
COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c
LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)

6、編譯

$(OBJFILES):	%.o: %.c $(HEADERS) 

	@echo Compiling $@ from $<..

	$(COMPILE.c)  -o $@ $<

7、

install:	$(if $(wildcard $(TARGET)), install_$(TARGET))
install_$(TARGET):
	@install -d $(EXEC_DIR)
	@install $(TARGET) $(EXEC_DIR)
	@install $(TARGET).txt $(EXEC_DIR)
	@echo
	@echo Installed $(TARGET) binaries to $(EXEC_DIR)..
先判斷當前目錄是否有$(TARGET),如果有,就執行僞目標install_$(TARGET),這個展開了就相當於install_app,如果$(TARGET)等於app的話




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章