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