Как использовать библиотеки RediSearch из моего проекта C++?

Я разрабатываю проект на 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 не выдает никаких ошибок, то на 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

0 ответов

Другие вопросы по тегам