FindFLEX
Исполняемый файл быстрой лексической анализатор (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>]
)
который создаёт пользовательскую команду для генерации файла FlexOutput из файла FlexInput. Имя является псевдонимом, используемым для получения подробностей об этой пользовательской команде. Если указан параметр 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})
====================================================================
© 2000–2021 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.20/module/FindFLEX.html