2012-02-05 79 views
3

當我使用使生成文件時無法找到文件,它說使用VPATH

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有什麼問題?

回答

3

你應該在配方使用automatic variables而不是硬編碼值的文件名:

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

... 

這樣做插入在vpath找到了正確的文件名:

當前提發現在另一個目錄中通過目錄搜索,這不能改變規則的配方;他們將按照書面執行。因此,您必須小心編寫配方,以便在make所在的目錄中查找先決條件。

這是通過自動變量完成的,如$^(請參閱Automatic Variables)。例如,$^的值是規則的所有先決條件的列表,包括找到它們的目錄的名稱,目標值爲[email protected]

+0

非常感謝! – madper 2012-02-05 11:42:30

+0

@madper,不客氣! – 2012-02-05 11:44:49