Как использовать библиотеки 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