首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >make file :未找到yacc命令并在安装bison后出现[y.tab.c]错误127

make file :未找到yacc命令并在安装bison后出现[y.tab.c]错误127
EN

Stack Overflow用户
提问于 2013-05-07 21:49:06
回答 2查看 9K关注 0票数 0

Toni Guttman有一个给定的r-tree代码(已经为我的家庭作业修改过了),但是,如果我更改了一个参数(节点的维度),那么"make“将导致以下错误:

代码语言:javascript
运行
复制
yacc y.spec
make: yacc:command not found
make: *** [y.tab.c] error 127 

我已经安装了bison和flex,并且"which yacc“显示了

代码语言:javascript
运行
复制
alias yacc='bison'
/usr/bin/bison

我应该怎么做才能解决这个问题?

这是"Makefile":

代码语言:javascript
运行
复制
# %W% %G%
# use flag -O for optimized code, slower compile
FLAGS=

SRC= main.c index.c newtid.c node.c rectangle.c \
    printstats.c clock.c y.spec allocate.c error.c\
    split.l.c \
    split.q.c \
    split.e.c

HEADERS= options.h macros.h index.h assert.h

ALL= $(SRC) $(HEADERS) split.l.h split.q.h split.e.h

OBJ= main.o index.o newtid.o node.o rectangle.o \
    printstats.o clock.o y.tab.o allocate.o error.o

OBJLIN= split.l.o
OBJQ= split.q.o
OBJEXP= split.e.o

$(OBJ): $(HEADERS)
$(OBJLIN): $(HEADERS) split.l.h
$(OBJQ): $(HEADERS) split.q.h
$(OBJEXP): $(HEADERS) split.e.h

# assembler chokes if graphics.c is compiled with -g option, do it without.
# graphics.o: graphics.c $(HEADERS)
#   cc -c graphics.c

# assembler chokes if y.tab.c is compiled with -g option, do it without.
# y.tab.o: y.tab.c $(HEADERS)
#   cc -c y.tab.c

.c.o: $(HEADERS)
    cc -c $(FLAGS) $*.c

linear: $(OBJ) $(OBJLIN)
    cc $(FLAGS) $(OBJ) $(OBJLIN) -lm -o linear

quad: $(OBJ) $(OBJQ)
    cc $(FLAGS) $(OBJ) $(OBJQ) -lm -o quad

exp: $(OBJ) $(OBJEXP)
    cc $(FLAGS) $(OBJ) $(OBJEXP) -lm -o exp

y.tab.c: y.spec $(HEADERS)
    yacc y.spec

edit:
    sccs edit $(SRC) $(HEADERS) split.l.h split.q.h split.o.h

unedit:
    sccs unedit $(ALL)
    rm -f tags

delta:
    sccs delta $(ALL)
    rm -f tags

get:
    sccs get $(ALL)

clean:
    rm -f *.o core y.tab.c tags

tags: $(SRC)
    ctags *.c

lint:
    rm -f lint.out
    lint *.c > lint.out
EN

回答 2

Stack Overflow用户

发布于 2013-05-07 22:04:08

正如您所看到的,您还没有安装yacc。在shell中更改别名也无济于事,因为尝试运行yacc命令的是make,而不是shell。您必须编辑您的makefile,并添加一行代码,如下所示:

代码语言:javascript
运行
复制
YACC = bison -y

( -y标志使野牛的行为像yacc一样)

由于您没有显示您的实际makefile,我们不能确定这是否会成功,但很有可能。

编辑:

在上面的makefile中,将对yacc的引用改为bison -y

您的makefile没有遵循许多最佳实践,但这是另一天的事情。

票数 2
EN

Stack Overflow用户

发布于 2014-10-21 10:37:25

手动添加此脚本/usr/bin/yacc只是一个包含以下内容的脚本:

代码语言:javascript
运行
复制
#! /bin/sh
exec '/usr/bin/bison' -y "$@"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16420756

复制
相关文章

相似问题

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