You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile执行Bison时出现POSIX Yacc不支持特性的警告问题

问题解决:Makefile中Bison执行产生POSIX兼容警告

问题场景

现有如下Makefile:

CC = gcc
CFLAGS = -Wall -Wno-yacc
BISON = /usr/bin/bison

OBJ = pasc200.tab.c lex.yy.c hashtbl.o semantic.o types.o ast.o

pasc200: lex.yy.c pasc200.tab.c pasc200.tab.h hashtbl.o semantic.o types.o
    $(CC) $(CFLAGS) $(OBJ) -o $@ -lm

pasc200.tab.c pasc200.tab.h: pasc200.y semantic.o types.o ast.o
    @echo "Running Bison: $(BISON)"
    $(BISON) -v -d pasc200.y

lex.yy.c: pasc200.l pasc200.tab.h semantic.o types.o
    flex pasc200.l

semantic.o: types.h hashtbl.h semantic.c semantic.h
    $(CC) $(CFLAGS) -o semantic.o -g -c semantic.c

hashtbl.o: types.h hashtbl.c hashtbl.h
    $(CC) $(CFLAGS) -o hashtbl.o -g -c hashtbl.c

types.o: hashtbl.h types.c types.h
    $(CC) $(CFLAGS) -o types.o -g -c types.c

ast.o: ast.h ast.c types.h types.o
    $(CC) $(CFLAGS) -o ast.o -g -c ast.c

.PHONY: clean
clean:
    rm -f *.o
    rm -f *.tab.*
    rm -f *.yy.c
    rm -f *.output

执行make pasc200时,出现如下警告:

pasc200.y:23.1-7: warning: POSIX Yacc does not support %define [-Wyacc]
   23 | %define parse.error verbose
      | ^~~~~~~

pasc200.y:148.2-7: warning: POSIX Yacc does not support %empty [-Wyacc]
  148 | |%empty ;                               ...
      |  ^~~~~~

直接运行/usr/bin/bison pasc200.y时无此警告,仅修改Makefile中的Bison命令为$(BISON) pasc200.y会丢失-d参数,无法生成.tab.h文件导致后续编译失败。

问题原因

Makefile中调用Bison时使用了-v参数,该参数会触发Bison的POSIX Yacc兼容检查逻辑,输出这类兼容性警告;而直接运行/usr/bin/bison pasc200.y时未添加任何参数,默认不会启用该检查,因此无警告。另外,CFLAGS中的-Wno-yacc是传递给GCC的编译选项,对Bison无效。

解决方法

方法1:关闭Bison的POSIX兼容警告

修改Makefile中Bison的执行命令,添加-Wno-yacc选项:

$(BISON) -v -d -Wno-yacc pasc200.y

该选项会直接关闭Bison的POSIX Yacc兼容警告,同时保留-v(生成verbose分析文件)和-d(生成头文件)的功能。

方法2:移除不必要的-v参数

如果不需要Bison生成的pasc200.output分析文件,可以直接去掉-v参数,这样也会避免触发兼容警告:

$(BISON) -d pasc200.y

内容的提问来源于stack exchange,提问作者Dimitris Kakatsos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 14:35:28