0

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

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

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

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

[GrandCanyon.out] 错误 1

你能帮我修改它,以便链接器和编译器将文件(.o)放在同一个文件夹中并检查它们吗?

谢谢

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

4

2 回答 2

2

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

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

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

CCFILES = sub1/file1.c sub2/file2.c
ASMFILES = sub1/file1.asm sub3/file2.asm
于 2009-03-30T13:42:46.627 回答
1

嗨,我只在 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)))

当我在子目录中有源文件时,这对我有用。我希望这对您有所帮助,尽管这不适用于 C++

于 2011-07-26T21:08:25.987 回答