修改Makefile以生成程序集文件

问题描述 投票:0回答:1

我是make的新手,我无法将.asm输出添加到已经存在的makefile中。我想让makefile生成.asm文件(使用AVR-GCC -S)到所有.c文件。您能帮我解决吗?

    # AVR model
MMCU = atmega16
# Clock frequency
F_CPU = 16000000
# Programmer model
PROGRAMMER = usbasp
PROGRAMMER_PORT = usb
# Output file name
PROJECT = main
# Sources files
SOURCES = main.c\
                cross/drivers/internals/GPIO/GPIO.c \
                cross/drivers/internals/PPI/PPI8Bit.c \
                cross/drivers/internals/USART/USART_0.c \

CC = avr-gcc
ASM = avr-gcc
OBJCOPY = avr-objcopy
CDEFS = -DF_CPU=$(F_CPU)UL
CFLAGS = $(CDEFS)
CFLAGS += -mmcu=$(MMCU) -g -Os -Wall
OBJS = $(SOURCES:.c=.o)
ASMS = $(SOURCES:.c=.s)

$(PROJECT).hex: $(PROJECT).out
    $(OBJCOPY) -O ihex -R .eeprom $(PROJECT).out $(PROJECT).hex

$(PROJECT).out:  $(OBJS)
    $(CC)  $(CFLAGS) $^ -o $@ -lm
$.o:%.c
    $(CC) $(CFLAGS) $< -o $@
##???
$.s:%.c
    $(CC) $(CFLAGS) -S $< -o $@

asm: $(OBJS_S)

flash: $(PROJECT).hex
    avrdude -c $(PROGRAMMER) -P $(PROGRAMMER_PORT) -p $(MMCU) -U flash:w:$(PROJECT).hex

clean:
    rm -f $(OBJS)
    rm -f $(PROJECT).out
    rm -f $(PROJECT).hex

.PHONY: clean program_flash

谢谢

assembly makefile avr
1个回答
0
投票

[寻求帮助时,请始终提供make的版本,您键入的确切(剪切和粘贴)命令以及确切的问题的准确描述(如果合适,请剪切和粘贴输出)。说“我做不到”并不能帮助我们理解问题所在。

这些绝对不正确:

$.o:%.c
  ...
$.s:%.c

Pattern rules使用%both]两侧的:,如下所示:

%.o:%.c
  ...
%.s:%.c

第二,您将asm文件放入此变量:

ASMS = $(SOURCES:.c=.s)

但是您列出了一个完全不同的变量作为asm目标的先决条件:

asm: $(OBJS_S)

据我所知,从未定义此OBJS_S变量。

© www.soinside.com 2019 - 2024. All rights reserved.