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>]
            )

此巨集會建立自訂命令,以從 FlexInput 檔案產生 FlexOutput 檔案。Name 是用來取得此自訂命令詳細資訊的別名。如果指定 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 定義的 Token:Flex 產生的程式碼取決於 Bison 產生的標頭。此模組也定義一個巨集

ADD_FLEX_BISON_DEPENDENCY(FlexTarget BisonTarget)

此巨集會在掃描器和剖析器之間新增所需的相依性,其中 FlexTargetBisonTarget 分別是 FLEX_TARGETBISON_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})
====================================================================