Я делаю программу, которая использует 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
Как я могу заставить его работать?