Spec-Zone.ru › CMake 3.20

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API