FindBISON¶
查找 Bison 命令行解析器生成器,并提供一个 CMake 命令来生成使用 Bison 的自定义构建规则。
find_package(BISON [<version>] ...)
Bison 是一个解析器生成器,它取代了早期的 Yacc (Yet Another Compiler-Compiler)。在类 Unix 系统上,最常见的实现是 GNU Bison。在 Windows 上,如果安装了 Windows 兼容的 Bison,此模块会查找它。
结果变量¶
此模块定义了以下变量
BISON_FOUND
布尔值,指示是否找到(请求版本的)Bison。
BISON_VERSION
找到的 Bison 版本。
缓存变量¶
以下缓存变量也可以设置
BISON_EXECUTABLE
bison
命令行程序的路径。
命令¶
如果找到 bison
,此模块提供以下命令
- bison_target¶
创建一个自定义构建规则,用于使用 Bison 从 Yacc 文件生成解析器文件。
bison_target( <name> <input-yacc-file> <output-parser-file> [DEFINES_FILE <header>] [VERBOSE [<file>]] # The [<file>] argument is deprecated [REPORT_FILE <file>] [OPTIONS <options>...] [COMPILE_FLAGS <string>] # Deprecated )
3.14 版本中已更改: 当策略
CMP0088
设置为NEW
时,bison
在CMAKE_CURRENT_BINARY_DIR
目录中运行。<name>
用作此命令调用标识符的字符串。
<input-yacc-file>
输入 Yacc 源文件 (
.y
) 的路径。如果给定相对路径,它将被解释为相对于当前源目录 (CMAKE_CURRENT_SOURCE_DIR
)。<output-parser-file>
Bison 将生成的输出解析器文件的路径。如果给定相对路径,它将被解释为相对于当前 Bison 工作目录。
DEFINES_FILE <header>
3.4 版本新增。
默认情况下,Bison 可以生成一个包含令牌列表的头文件。此选项允许指定 Bison 将生成的自定义
<header>
文件。如果给定相对路径,它将被解释为相对于当前 Bison 工作目录。VERBOSE [<file>]
启用生成详细语法和解析器报告。默认情况下,报告文件在当前 Bison 工作目录中创建,并命名为
<output-parser-filename>.output
。<file>
自 3.7 版本起已弃用: 使用
VERBOSE REPORT_FILE <file>
。指定报告文件应复制到的路径。此参数保留用于向后兼容性,并且仅当
<output-parser-file>
指定为绝对路径时才有效。
REPORT_FILE <file>
3.7 版本中新增。
与
VERBOSE
结合使用,为报告输出<file>
指定自定义路径,覆盖默认位置。如果给定相对路径,它将被解释为相对于当前 Bison 工作目录。OPTIONS <options>...
4.0 版本新增。
添加到
bison
命令行的额外选项的 分号分隔列表。COMPILE_FLAGS <string>
自 4.0 版本起已弃用: 由
OPTIONS <options>...
取代。添加到
bison
命令行的空格分隔的额外选项字符串。分号分隔列表 将不起作用。
命令变量
此命令还定义以下变量
BISON_<name>_DEFINED
布尔值,指示此命令是否成功调用。
BISON_<name>_INPUT
输入源文件,
<input-yacc-file>
的别名。BISON_<name>_OUTPUT_SOURCE
bison
生成的输出解析器文件。BISON_<name>_OUTPUT_HEADER
如果存在,
bison
生成的头文件。BISON_<name>_OUTPUTS
bison
生成的文件列表,包括输出解析器文件、头文件和报告文件。BISON_<name>_OPTIONS
4.0 版本新增。
用于
bison
命令的命令行选项列表。BISON_<name>_COMPILE_FLAGS
自 4.0 版本起已弃用: 由
BISON_<name>_OPTIONS
变量取代,值相同。用于
bison
命令的命令行选项列表。
示例¶
示例:查找 Bison¶
查找 Bison
find_package(BISON)
查找 Bison 并指定最低版本
find_package(BISON 2.1.3)
查找 Bison 并使其成为必需(如果未找到 Bison,处理将停止并显示错误消息)
find_package(BISON 2.1.3 REQUIRED)
示例:生成解析器¶
查找 Bison 并添加输入 Yacc 源文件 parser.y
,以便在构建阶段由 Bison 处理为 parser.cpp
源文件和头文件 parser.h
find_package(BISON)
if(BISON_FOUND)
bison_target(MyParser parser.y parser.cpp DEFINES_FILE parser.h)
endif()
add_executable(Foo main.cpp ${BISON_MyParser_OUTPUTS})
示例:命令行选项¶
可以以列表形式传递添加到 bison
可执行文件的额外命令行选项。例如,添加 -Wall
选项以报告所有警告,以及 --no-lines
(-l
) 以不生成 #line
指令
find_package(BISON)
if(BISON_FOUND)
bison_target(MyParser parser.y parser.cpp OPTIONS -Wall --no-lines)
endif()
在 OPTIONS <options>...
参数中可以使用 生成器表达式
。例如,仅在 Debug
构建类型中添加 --debug
(-t
) 选项
find_package(BISON)
if(BISON_FOUND)
bison_target(MyParser parser.y parser.cpp OPTIONS $<$<CONFIG:Debug>:-t>)
endif()
另请参阅¶
FindFLEX
模块用于查找 Flex 扫描器生成器。