FindFLEX
Find Fast Lexical Analyzer (Flex) executable and provides a macro to generate custom build rules
The module defines the following variables:
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
The minimum required version of flex can be specified using the standard syntax, e.g. find_package(FLEX 2.5.13)
If flex is found on the system, the module provides the macro:
FLEX_TARGET(Name FlexInput FlexOutput [COMPILE_FLAGS <string>] [DEFINES_FILE <string>] )
which creates a custom command to generate the FlexOutput
file from the FlexInput
file. If COMPILE_FLAGS
option is specified, the next parameter is added to the flex command line. If flex is configured to output a header file, the DEFINES_FILE
option may be used to specify its name. Name is an alias used to get details of this custom command. Indeed the macro defines the following variables:
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 scanners often use tokens defined by Bison: the code generated by Flex depends of the header generated by Bison. This module also defines a macro:
ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget)
which adds the required dependency between a scanner and a parser where FlexTarget
and BisonTarget
are the first parameters of respectively FLEX_TARGET
and BISON_TARGET
macros.
==================================================================== 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}) ====================================================================
© 2000–2020 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.17/module/FindFLEX.html