使用vpath时,Makefile无法找到文件

时间:2012-02-05 10:54:39

标签: makefile gnu-make

当我使用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有什么问题?

1 个答案:

答案 0 :(得分:4)

您应该使用automatic variables代替食谱中文件名的硬编码值:

main.o: main.c command.h
    ${CC} ${FLAG} $<

...

这允许Make插入vpath中找到的正确文件名:

  

当通过目录搜索在另一个目录中找到先决条件时,这不能改变规则的配方;他们将按照书面执行。因此,您必须小心编写配方,以便在make找到它的目录中查找先决条件。

     

这是通过$^等自动变量完成的(请参阅Automatic Variables)。例如,$^的值是规则的所有先决条件的列表,包括找到它们的目录的名称,$@的值是目标。