首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使文件vpath不被替换

使文件vpath不被替换
EN

Stack Overflow用户
提问于 2015-01-24 02:12:02
回答 1查看 260关注 0票数 1

我做一个make文件没什么问题,这是代码:

代码语言:javascript
复制
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时,我得到了这个错误:

代码语言:javascript
复制
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没有替换为正确的路径,我使用了自动变量

EN

回答 1

Stack Overflow用户

发布于 2015-01-24 02:20:39

代码语言:javascript
复制
%.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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28116125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档