CMake не вызывает FLEX / BISON - PullRequest
       15

CMake не вызывает FLEX / BISON

0 голосов
/ 22 января 2019

У меня есть следующий файл 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 злится и выдает мне ошибку).

Есть какая-нибудь подсказка о том, что происходит и чего мне не хватает?

1 Ответ

0 голосов
/ 22 января 2019

В add_library вы добавляете зависимости BISON_Parser_OUTPUTS и FLEX_Lexer_OUTPUTS.Вместо этого оно должно быть BISON_XPathParser_OUTPUTS и FLEX_XPathScanner_OUTPUTS соответственно (поскольку вы дали им такие имена).

...