使文件vpath不替换

时间:2015-01-23 18:12:02

标签: makefile vpath

制作make文件时遇到的问题很少,这就是代码:

SHELL = /bin/sh

CC := gcc
CFLAGS := -Wall
VPATH = src:obj

HEADERS := parser.h
dirs = out obj

%.o : mkdirs %.c $(HEADERS)
    $(CC) -c $(word 2,$^) -o obj/$@ 

all : parser.o
    ar cr out/libsip.a $<  

clean : 
    rm -f -r $(dirs)

mkdirs :
    mkdir -p $(dirs)

当我尝试执行make时会收到此错误:

mkdir -p out obj
gcc -c src/parser.c -o obj/parser.o 
ar cr out/libsip.a parser.o
file parser.o not found

我不明白为什么解析器。没有被正确的路径取代,我使用了自动变量

1 个答案:

答案 0 :(得分:1)

%.o : mkdirs %.c $(HEADERS)
    $(CC) -c $(word 2,$^) -o obj/$@ 

all : parser.o
    ar cr out/libsip.a $<

您告诉make在当前目录中创建parser.o文件。

然后,您的%.o规则会在obj目录中创建该文件,而不是当前目录。

然后ar命令无法找到它。

VPATH用于查找先决条件。如果obj/parser.o已经存在,那么make会为我认为的all目标找到它。

请参阅How Not to Use VPATH