Spec-Zone.ru › CMake 3.13

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. Если flex настроен на вывод файла заголовков, опция DEFINES_FILE может быть использована для указания его имени. Имя является псевдонимом, используемым для получения подробностей об этой пользовательской команде. Фактически, макрос определяет следующие переменные:

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}
 )
====================================================================

© 2000–2019 Kitware, Inc. and Contributors
Licensed under the BSD 3-clause License.
https://cmake.org/cmake/help/v3.13/module/FindFLEX.html

Spec-Zone.ru

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