Как использовать библиотеки RediSearch из моего проекта C ++? - PullRequest
0 голосов
/ 12 февраля 2019

Я занимаюсь разработкой проекта на C ++, который использует RediSearch.Я хотел бы иметь возможность вызывать функции RediSearch в форме, аналогичной #include <redisearch/document.h> с использованием CMake, без необходимости изменять проект RediSearch.

Этот вопрос должен быть применим к использованию CMake с любым внешним проектом CMake, но всеЯ обнаружил, что он очень специфичен для определенного набора проектов или просто не работает.

Попытки

Я пытался использовать ExternalProject, например, в этот проект , используя файлы конфигурации и find_package(), как в в этом проекте , напрямую используя add_subdirectory и target_link_libraries, связываясь напрямую с папкой src / и т. д.

Я также попытался включитьследующие строки в моем CMakeLists.txt

set(RS_INCLUDE_DIR libs/RediSearch/src)

set(GCC_COVERAGE_COMPILE_FLAGS "-I${RS_INCLUDE_DIR} -Wall -g -fPIC -O0")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

include_directories(${RS_INCLUDE_DIR})

, но получаю следующую ошибку:

CMakeFiles/prjct.dir/src/main.cpp.o: In function `RedisModule_Init':
....
collect2: error: 1d returned 1 exit status
.... 

Результирующие ошибки включают, но не ограничиваются:

  • Невозможно найти пакет при использовании find_package (как описано в вышеупомянутых проектах) и появляется ошибка, такая как:
    • CMake Error at /opt/cmake-3.13.3-Linux-x86_64/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137
      Could NOT find RediSearch (missing: RediSearch_INCLUDE_DIR)
      Call Stack (most recent call first):
      /opt/cmake-3.13.3-Linux-x86_64/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
      cmake/FindRediSearch.cmake:27 (find_package_handle_standard_args)
      CMakeLists.txt:48 (find_package)
      
    
    
  • Если CMake не даетy ошибок, затем на make: redisearch/document.h: No such file or directory

Чтобы детализировать структуру моего проекта:

prjct
| src/
| | main.cpp
| include/
| | prjct/
| | | myheader.hpp
| libs/
| | RediSearch/     <- As git submodule
| cmake/
| | prjctConfig.cmake.in
| CMakeLists.txt

Я хочу, из любого src/ файла, такого как main.cpp,используйте RediSearch (или, если на то пошло, любой проект, который будет построен с помощью CMake) в форме #include <redisearch/document.h>.Я вообще не хочу изменять файлы или конфигурацию RediSearch - все должно выполняться через мой проект.

Примечание: я использую cmake версии 3.13.3

...