繁体   English   中英

修改 Makefile 以生成装配文件

[英]Modifying Makefile to produce assembly files

我是 make 的新手,我无法将 .asm 输出添加到现有的 makefile 中。 我想让 makefile 为所有 .c 文件生成 .asm 文件(使用 AVR-GCC -S)。 你能帮我弄清楚吗?

    # 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

谢谢

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

这些肯定是不对的:

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

模式规则使用%两侧: ,就像这样:

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

其次,您将 asm 文件放入此变量中:

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

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

asm: $(OBJS_S)

据我所知,这个OBJS_S变量从未定义过。

在编译 C/C++ 文件(或任何其他语言)时,GCC 总是生成中间汇编代码。 这保存在某个 tmp 目录中(除非您使用 -pipe)。 如果您希望 GCC 将此中间程序集保存在 .s 文件中,则有选项-save-temps (除了中间程序集,这还将预处理源保存在 .i (C) 和 .ii (C++) 中)。 您可以添加包含 C/C++ 代码的附加注释来指导您; -fverbose-asm使用-fverbose-asm 在您使用 LTO ( -flto ) 等的情况下,新的编译器版本只会将 lto 乱码写入程序集(由 lto 编译器在链接时拾取)。 为了在这种情况下保存汇编代码,请添加-ffat-lto-objects 但是请注意,当您使用 -flto(它调用将 lto 乱码编译为 asm 的 lto 编译器)链接时,这不是最终的 asm。 可以在某些 ltrans 转储中使用 -save-temps 看到最终的 asm。 您还可以使用-save-temps=obj-save-temps=src将中间文件保存在您的目标文件附近。 您的源文件(以防万一)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM