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
时,bison
在 CMAKE_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()