FindFLEX¶
查找 Fast Lexical Analyzer (Flex) 可执行文件并提供一个宏用于生成自定义构建规则
该模块定义了以下变量
FLEX_FOUND - True is flex executable is found
FLEX_EXECUTABLE - the path to the flex executable
FLEX_VERSION - the version of flex
FLEX_LIBRARIES - The flex libraries
FLEX_INCLUDE_DIRS - The path to the flex headers
flex 的所需最低版本可以使用标准语法指定,例如 find_package(FLEX 2.5.13)
如果在系统中找到了 flex,则该模块提供宏
FLEX_TARGET(Name FlexInput FlexOutput
[COMPILE_FLAGS <string>]
[DEFINES_FILE <string>]
)
该宏创建一个自定义命令以从 FlexInput
文件生成 FlexOutput
文件。名称用于获取此自定义命令的详细信息。如果指定了 COMPILE_FLAGS
选项,则将下一个参数添加到 flex 命令行中。
3.5 版本添加: 如果 flex 配置为输出头文件,则可以DEFINES_FILE
选项来指定其名称。
3.17 版本修改: 当 CMP0098
设置为 NEW
时,flex
在 CMAKE_CURRENT_BINARY_DIR
目录中运行。
该宏定义了以下变量
FLEX_${Name}_DEFINED - true is the macro ran successfully
FLEX_${Name}_OUTPUTS - the source file generated by the custom rule, an
alias for FlexOutput
FLEX_${Name}_INPUT - the flex source file, an alias for ${FlexInput}
FLEX_${Name}_OUTPUT_HEADER - the header flex output, if any.
Flex 扫描仪经常使用 Bison 定义的代号:Flex 生成的代码依赖于 Bison 生成的头文件。此模块还定义了一个宏
ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget)
该宏添加了扫描仪和解析器之间的必需依赖,其中 FlexTarget
和 BisonTarget
分别是 FLEX_TARGET
和 BISON_TARGET
宏的第一个参数。
====================================================================
Example:
find_package(BISON)
find_package(FLEX)
BISON_TARGET(MyParser parser.y ${CMAKE_CURRENT_BINARY_DIR}/parser.cpp)
FLEX_TARGET(MyScanner lexer.l ${CMAKE_CURRENT_BINARY_DIR}/lexer.cpp)
ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
add_executable(Foo
Foo.cc
${BISON_MyParser_OUTPUTS}
${FLEX_MyScanner_OUTPUTS}
)
target_link_libraries(Foo ${FLEX_LIBRARIES})
====================================================================