CMake 未调用 FLEX/BISON
CMake not invoking FLEX/BISON
我有以下 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_target
和 flex_target
宏(我通过添加随机值来测试它们:CMake 生气并抛出一个错误).
关于发生了什么以及我遗漏了什么的任何线索?
在 add_library
中,您添加 BISON_Parser_OUTPUTS
和 FLEX_Lexer_OUTPUTS
依赖项。相反,它应该分别是 BISON_XPathParser_OUTPUTS
和 FLEX_XPathScanner_OUTPUTS
(因为你给了他们这样的名字)。
我有以下 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_target
和 flex_target
宏(我通过添加随机值来测试它们:CMake 生气并抛出一个错误).
关于发生了什么以及我遗漏了什么的任何线索?
在 add_library
中,您添加 BISON_Parser_OUTPUTS
和 FLEX_Lexer_OUTPUTS
依赖项。相反,它应该分别是 BISON_XPathParser_OUTPUTS
和 FLEX_XPathScanner_OUTPUTS
(因为你给了他们这样的名字)。