標籤:blog http os 使用 ar strong 檔案 div art
原文地址:blog.csdn.net/ghostyu/article/details/7755177
1、目標名稱,擺脫手動設定目標名稱
[cpp] view plaincopy
- TARGET = $(notdir $(CURDIR))
- all:$(TARGET)
- CMD....
$(CURDIR) 表示Makfile目前的目錄全路徑
$(notdir $(path)) 表示把path目錄去掉路徑名,只留目前的目錄名
這樣就可以得到Makefile目前的目錄名稱,用目錄名作為目標程式名是一個不錯的選擇
2、使用include,把所有Makefile共用的設定包含進來
[cpp] view plaincopy
- BASE_DIR = /root/DM36x
- include $(BASE_DIR)/Rules.make
-
- XDC_PATH = $(DMAI_INSTALL_DIR)/packages
[cpp] view plaincopy
- DMAI_INSTALL_DIR在Rules.make中已經設定過,這樣,需要使用DMAI_INSTALL_DIR變數的時候只要include 這個Rules.make接可以了
3、遍曆遍曆所有特定的源檔案
[cpp] view plaincopy
- SOURCES = $(wildcard *.c)
- HEADERS = $(wildcard *.h)
如果目前的目錄先有 main.c func.c func.h
這樣SOURCES變數就等於main.c func.c
HEADERS變數就等於func.h
這樣就每次添加源檔案後 就不需要重新修改makefile了
4、替換檔案名稱
[cpp] view plaincopy
- OBJFILES = $(SOURCES:%.c=%.o)
如果SOURCES等與3中的main.c和func.c
這樣OBJFILES就等於main.o func.o
同樣擺脫了手動修改編譯的中間檔案名稱
5、交叉編譯設定
[cpp] view plaincopy
- VERBOSE = @
- COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c
- LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)
6、編譯
[cpp] view plaincopy
- $(OBJFILES): %.o: %.c $(HEADERS)
-
- @echo Compiling [email protected] from $<..
-
- $(COMPILE.c) -o [email protected] $<
7、
[cpp] view plaincopy
- 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的話
常見makefile寫法