Ads 468x60px

##EasyReadMore##

16 3月, 2017

Makefile 範例教學

下面的範例只要改 lib 引用,C file 的路徑就好了

  1. # MQTT = true   
  2. LDFLAGS = -pthread -lrt -llogAg  
  3. ifdef MQTT  
  4.     LDFLAGS += -lmosquitto # 将值追加到变量的尾端。  
  5. endif  
  6.   
  7. ifeq ($(TARGET_PREFIX),i586-wrs-linux-)  
  8.     LDFLAGS += -ljson-c  
  9. else  
  10.     LDFLAGS += -ljson  
  11. endif  
  12.  
  13. #detect compiler  
  14. CC ?= gcc  
  15. AR ?= ar  
  16. # 只有在该变量为空时才设置值。  
  17.  
  18. #取出當前目錄名稱當輸出名稱  
  19. TARGET = $(notdir $(shell pwd))  
  20. DIR_OBJ = .  
  21. DIR_SRC = $(DIR_OBJ)/src  
  22. DIR_INC = $(DIR_OBJ)/include  
  23. DIR_LIB = $(DIR_OBJ)/lib  
  24. EQUAL = "======="  
  25.  
  26. #-g -Wall -O3 可當一組來解釋,g 是指加入除錯資訊,給gdb用,Wall 是秀所有警告訊息,O3 第三級的優化。  
  27. # CFLAGS = -g -Wall -O3   
  28. # wildcard 函數用來在Makefile 中,替換Bash 的萬用字元。  
  29. SRCS := $(wildcard ${DIR_SRC}/*.c  ${DIR_SRC}/*/*.c)  
  30. #下面的例子將文件名"xcc bar.c",替換成"xco bar.o"。  
  31. OBJS = $(patsubst %.c,%.o, ${SRCS})   
  32.   
  33. .PHONY: all  
  34. all: $(TARGET)  
  35.     @echo $(EQUAL) "Build" $< "SUCCESS" $(EQUAL) #$< 指代第一個前置條件。 指的是 $(TARGET)  
  36.   
  37. .PHONY: $(TARGET)  
  38. $(TARGET):  
  39.     @echo $(EQUAL) "Build" $@ $(EQUAL)  #$@指代當前目標  
  40.     $(CC) $(CFLAGS) ${SRCS} -o $@ $(LDFLAGS) -L $(DIR_LIB) -I $(DIR_INC)  
  41.  
  42. #如果當前目錄中,正好有一個文件叫做clean,那麼這個命令不會執行。因為Make發現clean文件已經存在,就認為沒有必要重新構建了,就不會執行指定的rm命令。  
  43. .PHONY: clean  
  44. clean:  
  45.     rm -f $(TARGET) $(OBJS) #OBJS 在上面有先把檔案展開 比 *.c 再搜尋一次還快  
  46.     find . -type f -name "*.d" -exec rm -rf {} \;  
  47.  
  48. #@ 不列印命令 

Make 命令教程- 阮一峰的網絡日誌 - https://goo.gl/vIT9NK


0 意見:

張貼留言

 
Blogger Templates