如何控制Bison生成的头文件保护宏?避免暴露绝对路径
解决Bison生成头文件保护宏暴露绝对路径的问题
针对你使用Bison 3.8.2遇到的头文件保护宏包含绝对路径的问题,有两种直接的解决方式:
1. 命令行参数自定义宏名
Bison 3.7及以上版本支持--header-guards参数,允许你直接指定头文件保护宏的名称,完全替代默认的基于绝对路径的宏。
比如生成名为parser.h的头文件时,执行:
bison --header=parser.h --header-guards=MY_PROJECT_PARSER_H parser.y
生成的头文件开头会变成:
#ifndef MY_PROJECT_PARSER_H #define MY_PROJECT_PARSER_H // ... 其余代码 #endif /* MY_PROJECT_PARSER_H */
如果是在Makefile中调用Bison,修改规则如下:
parser.h parser.c: parser.y bison --header=parser.h --header-guards=MY_PROJECT_PARSER_H --output=parser.c parser.y
2. 在Bison源码中声明宏名
你也可以直接在.y文件的开头添加%header_guards声明,无需修改命令行参数:
%header_guards "MY_PROJECT_PARSER_H" %{ // 你的前置代码 %} // ... 语法规则
这样Bison生成头文件时会自动使用你指定的宏名,不会包含任何绝对路径信息。
另外,如果你不需要自动生成的头文件保护,也可以用--no-header-guards参数禁用,之后手动在生成的头文件中添加自定义保护,但这种方式需要额外维护,不如前两种方便。
内容的提问来源于stack exchange,提问作者Szabolcs
相关产品推荐
相关产品推荐

