FindBISON

查找 bison 可执行文件,并提供一个宏来生成自定义构建规则。

该模块定义了以下变量

BISON_FOUND

如果找到程序,则为 True。

BISON_EXECUTABLE

bison 程序的路径。

BISON_VERSION

bison 的版本。

可以使用标准的 CMake 语法指定所需的最低 bison 版本,例如 find_package(BISON 2.1.3)

如果找到 bison,该模块会定义宏

bison_target
bison_target(<Name> <YaccInput> <CodeOutput>
             [OPTIONS <options>...]
             [COMPILE_FLAGS <string>]
             [DEFINES_FILE <file>]
             [VERBOSE [<file>]]
             [REPORT_FILE <file>]
             )

它将创建一个自定义规则来生成解析器。<YaccInput> 是 yacc 文件的路径。<CodeOutput> 是 bison 生成的源文件的名称。 也可以生成头文件,其中包含标记列表。

在 3.14 版本中更改: CMP0088 设置为 NEW 时,bisonCMAKE_CURRENT_BINARY_DIR 目录中运行。

选项是

OPTIONS <options>...

在 4.0 版本中添加。

添加到 bison 命令行中的 分号分隔的列表 选项。

COMPILE_FLAGS <string>

自 4.0 版本起已弃用。

添加到 bison 命令行中的空格分隔的 bison 选项。;-列表 将不起作用。此选项已被弃用,建议使用 OPTIONS <options>...

DEFINES_FILE <file>

在 3.4 版本中添加。

指定要由 bison 生成的非默认头文件 <file>

VERBOSE [<file>]

告诉 bison 写入语法和解析器的报告文件。

自 3.7 版本起已弃用: 如果给定了 <file>,则指定报告文件复制到的路径。[<file>] 保留是为了向后兼容此模块。 使用 VERBOSE REPORT_FILE <file>

REPORT_FILE <file>

在 3.7 版本中添加。

指定非默认报告文件 <file> (如果生成)。

该宏定义了以下变量

BISON_<Name>_DEFINED

如果宏成功运行,则为 True。

BISON_<Name>_INPUT

输入源文件,<YaccInput> 的别名。

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 命令行中使用的选项。此变量已被弃用,建议使用 BISON_<Name>_OPTIONS 变量。

示例

find_package(BISON)
bison_target(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp
             DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/parser.h)
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()