【问题标题】:CMake not invoking FLEX/BISONCMake 不调用 FLEX/BISON
【发布时间】:2019-06-15 23:10:52
【问题描述】:

我有以下 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 生气并抛出错误)。

关于发生了什么以及我错过了什么的任何线索?

【问题讨论】:

  • 如果您重新开始(基本上删除构建目录并重新运行cmake)并进行详细构建,是否会给出任何提示?在调试或跟踪模式下运行 CMake(iwth --debug-output--trace 标志)如何告诉你什么?

标签: c++ cmake bison flex-lexer


【解决方案1】:

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

【讨论】:

  • 天哪。我不知道我花了多少时间没有注意到它。我检查了很多次!
猜你喜欢
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 2021-02-09
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多