制作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
我不明白为什么解析器。没有被正确的路径取代,我使用了自动变量
答案 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
目标找到它。