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_EXECUTABLEbison命令行程序的路径。
命令¶
如果找到 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_SOURCEbison生成的输出解析器文件。BISON_<name>_OUTPUT_HEADER如果存在,则由
bison生成的头文件。BISON_<name>_OUTPUTSbison生成的文件列表,包括输出解析器文件、头文件和报告文件。BISON_<name>_OPTIONS4.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()
另请参阅¶
查找 Flex 扫描器生成器的
FindFLEX模块。