首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake未调用FLEX/BISON

CMake未调用FLEX/BISON
EN

Stack Overflow用户
提问于 2019-01-22 21:06:31
回答 1查看 409关注 0票数 3

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

代码语言:javascript
复制
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应该在实际的C++编译器调用之前执行FLEX和BISON,这反过来会生成C++文件。

出于某种超出我理解的原因,这不是真的。我尝试清除CMake缓存并从头开始重新运行它;但是,在CMake生成的文件中仍然没有任何迹象表明FLEX或BISON。

当然,CMake可以找到FLEX和BISON,并正确地设置bison_targetflex_target宏(我通过添加随机值对其进行了测试: CMake很生气,并抛给我一个错误)。

有什么线索是怎么回事吗?我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 21:12:50

add_library中,您可以添加BISON_Parser_OUTPUTSFLEX_Lexer_OUTPUTS依赖项。相反,它应该分别是BISON_XPathParser_OUTPUTSFLEX_XPathScanner_OUTPUTS (因为您给了它们这样的名称)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54308989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档