Embedded (avr gcc)对子目录的Makefile支持

Embedded (avr gcc)对子目录的Makefile支持,embedded,makefile,avr,subdirectory,Embedded,Makefile,Avr,Subdirectory,我正在从事一个AVR项目,有多个文件夹包含我的代码 我使用的makefile是Pat Deegan的“标准化AVR makefile模板”。 它能够正确编译每个文件夹中的每个cpp文件,并生成正确的对象(.o)文件 但是,链接器失败,因为它试图在子文件夹中查找to.o文件(编译器将它们放在主文件夹中)。 这是我得到的一个错误示例: avr gcc:子文件夹/module.o:没有这样的文件或目录make:*** [GrandCanyon.out]错误1 你能帮我修改一下吗?这样链接器和编译器就可

我正在从事一个AVR项目,有多个文件夹包含我的代码

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

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

avr gcc:子文件夹/module.o:没有这样的文件或目录make:***

[GrandCanyon.out]错误1

你能帮我修改一下吗?这样链接器和编译器就可以在同一个文件夹中放置和检查文件(.o)

多谢各位


您可以在此处获得makefile:

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

#  C
CFILES=$(filter %.c, $(PRJSRC))
#  Assembly
ASMFILES=$(filter %.S, $(PRJSRC))
您需要为每种类型手动定义文件列表:

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

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

#  C
CFILES=$(filter %.c, $(PRJSRC))
#  Assembly
ASMFILES=$(filter %.S, $(PRJSRC))
您需要为每种类型手动定义文件列表:

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

<>我在C中编程AVR MCU,而不是C++。所以我在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)))
CFLAGS=-I.$(INC)-g-mmcu=$(MCU)-O$(OPTLEVEL)\
-fpack struct-fshort枚举\
-funsigned位字段-funsigned字符\
-墙壁-严格的原型\

($Po.%.O,$(< P>)我在C中编程AVR MCU,而不是C++。所以我在一段中扩展了一个行的CFAG < /P>文件
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)))
CFLAGS=-I.$(INC)-g-mmcu=$(MCU)-O$(OPTLEVEL)\
-fpack struct-fshort枚举\
-funsigned位字段-funsigned字符\
-墙壁-严格的原型\

-o$(firstword$(filter%.o,$)(看起来好像OP已从此站点中消失。看起来好像OP已从此站点中消失。