關於makefile的使用

    使用make管理器很簡單,只需要在make後面加上目標名就可以創建目標文件,如果直接鍵入make就會默認建立第一個目標。

    此外,make還有豐富的命令行選項,可以完成各種不同的功能,下表3.17列出了常用的make命令行選項:

    3.17                                                        make的命令行選項

命令格式

含義

-c dir

讀入指定目錄的makefile

-f file

讀入當前目錄下的file文件作爲makefile

-i

忽略所有的命令執行錯誤

-I dir

指定被包含的makefile的所在目錄

-n

只打印要執行的命令行,但不執行命令

-p

顯示make變量數據庫和隱式規則

-s

在執行命令時不顯示命令

-w

如果make在執行過程中改變目錄,則打印當前目錄

 

    在這裏makefile已經基本看的差不多了,我們就可以來對下面的makefile進行一下分析看看自己的makefile到底學的如果和了,具體的makefile如下:

  1. ###############################################################################
  2. # Makefile for the project cdcmega
  3. ###############################################################################
  4. ## General Flags
  5. PROJECT = cdcmega
  6. #MCU = atmega8
  7. MCU = atmega32
  8. #MCU = atmega88
  9. #MCU = atmega168
  10. CLK = 12000000UL
  11. #CLK = 15000000UL
  12. #CLK = 16000000UL
  13. #CLK = 20000000UL
  14. ## Enables UART receiver interrupt for high speed transfer (!mega8)
  15. INTERRUPT = 0
  16. TARGET = $(PROJECT).elf
  17. CC = avr-gcc.exe
  18. ## Options common to compile, link and assembly rules
  19. COMMON = -mmcu=$(MCU) -DF_CPU=$(CLK) -DUART_RXINT=$(INTERRUPT)
  20. ## Compile options common for all C compilation units.
  21. CFLAGS = $(COMMON)
  22. CFLAGS += -Wall -O3 -fsigned-char
  23. ## Assembly specific flags
  24. ASMFLAGS = $(COMMON)
  25. ASMFLAGS += -x assembler-with-cpp -Wa,
  26. ## Linker flags
  27. LDFLAGS = $(COMMON)
  28. LDFLAGS +=  -Wl,-Map=$(PROJECT).map
  29. ## Intel Hex file production flags
  30. HEX_FLASH_FLAGS = -R .eeprom
  31. ## Include Directories
  32. INCLUDES = -I"." -I"../usbdrv" -I".." 
  33. ## Objects that must be built in order to link
  34. OBJECTS = usbdrv.o usbdrvasm.o oddebug.o uart-asm.o uart.o sw-uart-asm.o sw-uart.o main.o
  35. ## Objects explicitly added by the user
  36. LINKONLYOBJECTS = 
  37. ## Build
  38. all: $(TARGET) $(PROJECT).hex $(PROJECT).lss size
  39. ## Compile
  40. usbdrv.o: ../usbdrv/usbdrv.c
  41.     $(CC) $(INCLUDES) $(CFLAGS) -c  $<
  42. usbdrvasm.o: ../usbdrv/usbdrvasm.S
  43.     $(CC) $(INCLUDES) $(ASMFLAGS) -c  $<
  44. oddebug.o: ../usbdrv/oddebug.c
  45.     $(CC) $(INCLUDES) $(CFLAGS) -c  $<
  46. uart-asm.o: ../uart-asm.S
  47.     $(CC) $(INCLUDES) $(ASMFLAGS) -c  $<
  48. uart.o: ../uart.c
  49.     $(CC) $(INCLUDES) $(CFLAGS) -c  $<
  50. sw-uart-asm.o: ../sw-uart-asm.S
  51.     $(CC) $(INCLUDES) $(ASMFLAGS) -c  $<
  52. sw-uart.o: ../sw-uart.c
  53.     $(CC) $(INCLUDES) $(CFLAGS) -c  $<
  54. main.o: ../main.c
  55.     $(CC) $(INCLUDES) $(CFLAGS) -c  $<
  56. ##Link
  57. $(TARGET): $(OBJECTS)
  58.      $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
  59. %.hex: $(TARGET)
  60.     avr-objcopy -O ihex $(HEX_FLASH_FLAGS)  $< $@
  61. %.lss: $(TARGET)
  62.     avr-objdump -h -S $< > $@
  63. size: ${TARGET}
  64.     @echo
  65.     @avr-size -C --mcu=${MCU} ${TARGET}
  66. ## Clean target
  67. .PHONY: clean
  68. clean:
  69.     -rm -rf $(OBJECTS) $(PROJECT).*
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章