当我使用make时,它会说
gcc -I./header -c -g main.c
gcc: error: main.c: No such file or directory
我的makefile在这里:
vpath %.c ./src
vpath %.h ./header
CC = gcc
FLAG = -I./header -c -g
objects = main.o a.o b.o
app: ${objects}
${CC} -o app ${objects}
main.o: main.c command.h
${CC} ${FLAG} main.c
a.o: a.c command.h
${CC} ${FLAG} a.c
b.o: b.c command.h
${CC} ${FLAG} b.c
clean:
-rm *.o app
.PHONY: clean
和文件存储如下:
.
|-- header
| `-- command.h
|-- Makefile
`-- src
|-- a.c
|-- b.c
`-- main.c
Makefile有什么问题?
答案 0 :(得分:4)
您应该使用automatic variables代替食谱中文件名的硬编码值:
main.o: main.c command.h
${CC} ${FLAG} $<
...
这允许Make插入vpath
中找到的正确文件名:
当通过目录搜索在另一个目录中找到先决条件时,这不能改变规则的配方;他们将按照书面执行。因此,您必须小心编写配方,以便在make找到它的目录中查找先决条件。
这是通过
$^
等自动变量完成的(请参阅Automatic Variables)。例如,$^
的值是规则的所有先决条件的列表,包括找到它们的目录的名称,$@
的值是目标。