使用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如下:
- ###############################################################################
- # Makefile for the project cdcmega
- ###############################################################################
- ## General Flags
- PROJECT = cdcmega
- #MCU = atmega8
- MCU = atmega32
- #MCU = atmega88
- #MCU = atmega168
- CLK = 12000000UL
- #CLK = 15000000UL
- #CLK = 16000000UL
- #CLK = 20000000UL
- ## Enables UART receiver interrupt for high speed transfer (!mega8)
- INTERRUPT = 0
- TARGET = $(PROJECT).elf
- CC = avr-gcc.exe
- ## Options common to compile, link and assembly rules
- COMMON = -mmcu=$(MCU) -DF_CPU=$(CLK) -DUART_RXINT=$(INTERRUPT)
- ## Compile options common for all C compilation units.
- CFLAGS = $(COMMON)
- CFLAGS += -Wall -O3 -fsigned-char
- ## Assembly specific flags
- ASMFLAGS = $(COMMON)
- ASMFLAGS += -x assembler-with-cpp -Wa,
- ## Linker flags
- LDFLAGS = $(COMMON)
- LDFLAGS += -Wl,-Map=$(PROJECT).map
- ## Intel Hex file production flags
- HEX_FLASH_FLAGS = -R .eeprom
- ## Include Directories
- INCLUDES = -I"." -I"../usbdrv" -I".."
- ## Objects that must be built in order to link
- OBJECTS = usbdrv.o usbdrvasm.o oddebug.o uart-asm.o uart.o sw-uart-asm.o sw-uart.o main.o
- ## Objects explicitly added by the user
- LINKONLYOBJECTS =
- ## Build
- all: $(TARGET) $(PROJECT).hex $(PROJECT).lss size
- ## Compile
- usbdrv.o: ../usbdrv/usbdrv.c
- $(CC) $(INCLUDES) $(CFLAGS) -c $<
- usbdrvasm.o: ../usbdrv/usbdrvasm.S
- $(CC) $(INCLUDES) $(ASMFLAGS) -c $<
- oddebug.o: ../usbdrv/oddebug.c
- $(CC) $(INCLUDES) $(CFLAGS) -c $<
- uart-asm.o: ../uart-asm.S
- $(CC) $(INCLUDES) $(ASMFLAGS) -c $<
- uart.o: ../uart.c
- $(CC) $(INCLUDES) $(CFLAGS) -c $<
- sw-uart-asm.o: ../sw-uart-asm.S
- $(CC) $(INCLUDES) $(ASMFLAGS) -c $<
- sw-uart.o: ../sw-uart.c
- $(CC) $(INCLUDES) $(CFLAGS) -c $<
- main.o: ../main.c
- $(CC) $(INCLUDES) $(CFLAGS) -c $<
- ##Link
- $(TARGET): $(OBJECTS)
- $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET)
- %.hex: $(TARGET)
- avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@
- %.lss: $(TARGET)
- avr-objdump -h -S $< > $@
- size: ${TARGET}
- @echo
- @avr-size -C --mcu=${MCU} ${TARGET}
- ## Clean target
- .PHONY: clean
- clean:
- -rm -rf $(OBJECTS) $(PROJECT).*