CMake不调用FLEX / BISON

时间:2019-01-22 13:06:31

标签: c++ cmake bison flex-lexer

我有以下CMake文件,它是一个较大项目的一部分(因此在其文件夹中,并由上层使用add_subdirectory(...)导入

find_package(BISON REQUIRED)
find_package(FLEX REQUIRED)

include_directories(${PROJECT_SOURCE_DIR}/include/Parser)
include_directories(${CMAKE_CURRENT_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

bison_target(XPathParser
        XPath.yy
        ${CMAKE_CURRENT_BINARY_DIR}/XPathParser.cpp
        DEFINES_FILE ${CMAKE_CURRENT_BINARY_DIR}/XPathParser.h)

flex_target(XPathScanner
        XPath.flex
        ${CMAKE_CURRENT_BINARY_DIR}/XPathScanner.cpp
        COMPILE_FLAGS "-Cm -B -L --c++ --nounistd")

add_flex_bison_dependency(XPathScanner XPathParser)

set_source_files_properties(${BISON_XPathParser_OUTPUTS}
                            ${FLEX_XPathScanner_OUTPUTS}
                            PROPERTIES
                            COMPILE_FLAGS -Wno-sign-compare
                            COMPILE_FLAGS -Wno-effc++)

add_library(xpath OBJECT
        ${BISON_Parser_OUTPUTS}
        ${FLEX_Lexer_OUTPUTS}
        ${CMAKE_CURRENT_LIST_DIR}/XPathParserDriver.cpp)

据我所知,此CMake应该执行FLEX和BISON,这将依次在实际C ++编译器调用之前生成C ++文件。

出于某些我无法理解的原因,这是不正确的。我试图清除CMake缓存并从头开始重新运行它。但是,CMake生成的文件中没有FLEX或BISON的迹象。

当然,CMake可以同时找到FLEX和BISON并正确设置bison_targetflex_target宏(我通过将它们与随机值混为一谈对其进行了测试:CMake生气并向我抛出错误)。

关于发生了什么以及我缺少什么的任何线索吗?

1 个答案:

答案 0 :(得分:3)

add_library中,添加BISON_Parser_OUTPUTSFLEX_Lexer_OUTPUTS依赖性。而是应该分别为BISON_XPathParser_OUTPUTSFLEX_XPathScanner_OUTPUTS(因为您给他们起了这样的名字)。