使用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).*