Переопределить значение по умолчанию FIND_PACKAGE - PullRequest
0 голосов
/ 13 марта 2019

Я делаю программу, которая использует Flex ++.CMake имеет значение по умолчанию FindFLEX, которое отлично работает для Linux.Однако при попытке создать проект под Windows я сталкиваюсь с несколькими проблемами.

Прежде всего, для этого требуется определенный путь для исполняемого файла Flex.Хорошо, так:

if (WIN32)
    set(BISON_FLEX_PATH c:/msys64/usr/bin)
    set(BISON_EXECUTABLE ${BISON_FLEX_PATH}/bisonc++.exe)
    set(FLEX_EXECUTABLE ${BISON_FLEX_PATH}/flex++.exe)
endif (WIN32)

Тогда я получаю:

  string sub-command REGEX, mode REPLACE failed to compile regex
  "^.*flex++(.exe)?"? (version )?([0-9]+[^ ]*)( .*)?$".

FindFLEX.cmake:

get_filename_component(FLEX_EXE_NAME_WE "${FLEX_EXECUTABLE}" NAME_WE)
get_filename_component(FLEX_EXE_EXT "${FLEX_EXECUTABLE}" EXT)
string(REGEX REPLACE "^.*${FLEX_EXE_NAME_WE}(${FLEX_EXE_EXT})?\"? (version )?([0-9]+[^ ]*)( .*)?$" "\\3"
                FLEX_VERSION "${FLEX_version_output}")

Хорошо, похоже, "++" интерпретируется какквантор регулярных выражений.Давайте сделаем обходной путь: скопируйте этот модуль и немного измените его:

get_filename_component(FLEX_EXE_NAME_WE_RAW "${FLEX_EXECUTABLE}" NAME_WE)
# cut "++" or "c++" for flex++ & flexc++
string(REGEX REPLACE "c?\\+\\+" "" FLEX_EXE_NAME_WE "${FLEX_EXE_NAME_WE_RAW}")
get_filename_component(FLEX_EXE_EXT "${FLEX_EXECUTABLE}" EXT)
string(REGEX REPLACE "^.*${FLEX_EXE_NAME_WE}(${FLEX_EXE_EXT})?\"? (version )?([0-9]+[^ ]*)( .*)?$" "\\3"
                FLEX_VERSION "${FLEX_version_output}")

Похоже, что сработает, однако ...

CMake Error at cmake/FindFLEX.cmake:220 (include):
  include could not find load file:
    path_to_my_modified_module/cmake/FindPackageHandleStandardArgs.cmake

Как я могу заставить его работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...