FLEX/BISON在不同的文件夹中生成location.hh,position.hh,stack.hh

FLEX/BISON generate location.hh, position.hh, stack.hh in different folder

本文关键字:hh location stack position 文件夹 BISON FLEX      更新时间:2023-10-16

>我有这样的文件夹结构

include/
src/
| parser.yy
| scanner.ll

src/CMakeLists.txt

SET(BisonOutput ${CMAKE_SOURCE_DIR}/src/_parser.cpp)
IF(BISON_FOUND)
ADD_CUSTOM_COMMAND(
OUTPUT ${BisonOutput}
COMMAND ${BISON_EXECUTABLE}
--defines=${CMAKE_SOURCE_DIR}/include/_parser.hpp
--output=${BisonOutput}
${CMAKE_SOURCE_DIR}/src/parser.yy
COMMENT "Generating parser"
)
ENDIF()
SET(FlexOutput ${CMAKE_SOURCE_DIR}/src/_scanner.cpp)
IF(FLEX_FOUND)
ADD_CUSTOM_COMMAND(
OUTPUT ${FlexOutput}
COMMAND ${FLEX_EXECUTABLE}
--outfile=${FlexOutput}
${CMAKE_SOURCE_DIR}/src/scanner.ll
COMMENT "Generating scanner"
)
ENDIF()

但是,文件位置.hh,position.hh和stack.hh是在src目录中生成的。是否可以以某种方式指定我希望在include目录中生成这些文件?

我正在使用野牛 3.0.4 和 Flex 2.6.4

我不确定Bison/Flex是否允许您在单独的位置生成它们,但是一旦生成它们,您就可以使用CMake将它们复制到include目录中。添加另一个带有PRE_BUILDadd_custom_command调用,以确保在构建目标之前复制它们:

ADD_CUSTOM_COMMAND(
TARGET MyTarget PRE_BUILD
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/locations.hh ${CMAKE_SOURCE_DIR}/include
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/position.hh ${CMAKE_SOURCE_DIR}/include
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/src/stack.hh ${CMAKE_SOURCE_DIR}/include
)