(avr-gcc)Makefile支持子目录

时间:2009-03-28 10:56:42

标签: embedded makefile avr subdirectory

我正在开发一个AVR项目,并且有多个文件夹包含我的代码。

我使用的makefile是Pat Deegan的“标准化AVR Makefile模板”。 它能够正确编译每个文件夹中的每个cpp文件,并生成正确的对象(.o)文件。

但是,链接器失败,因为它试图在子文件夹中找到.o文件(编译器将它们放在主文件夹中)。 这是我得到的错误的一个例子:

  

avr-gcc:subfolder / module.o:没有这样的文件或目录:***

     

[GrandCanyon.out]错误1

您可以帮我修改它,以便链接器和编译器放置并检查相同文件夹中的文件(.o)吗?

谢谢

你可以在这里获取makefile:http://electrons.psychogenic.com/articles/Makefile.tpl

2 个答案:

答案 0 :(得分:2)

问题是filter命令,它删除目录并只保留文件名(link)。因此,不要在一行中定义所有文件并执行:

#  C
CFILES=$(filter %.c, $(PRJSRC))
#  Assembly
ASMFILES=$(filter %.S, $(PRJSRC))

您需要手动定义每种类型的文件列表:

CCFILES = sub1/file1.c sub2/file2.c
ASMFILES = sub1/file1.asm sub3/file2.asm

答案 1 :(得分:1)

嗨,我只用C ++编写C语言中的avr MCU。所以我在CFLAGS

部分扩展了关于一行的makefile
CFLAGS=-I. $(INC) -g -mmcu=$(MCU) -O$(OPTLEVEL) \ 
    -fpack-struct -fshort-enums             \ 
    -funsigned-bitfields -funsigned-char    \ 
    -Wall -Wstrict-prototypes               \ 
    -o $(firstword $(filter %.o, $(<:.c=.o))) \
    -Wa,-ahlms=$(firstword $(filter %.lst, $(<:.c=.lst)))

当我在子目录中有源文件时,这对我有用。 我希望这会帮助你,而不是C ++