1

我制作制作文件没有什么问题,这是代码:

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

我不明白为什么 parser.o 没有被正确的路径替换,我使用了自动变量

4

1 回答 1

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

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

您告诉 makeparser.o在当前目录中创建一个文件。

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

然后该ar命令找不到它。

VPATH是为了寻找先决条件。如果已经存在,那么 make 会为我相信obj/parser.o的目标找到它。all

请参阅如何不使用 VPATH

于 2015-01-23T18:20:38.543 回答