Я занимаюсь разработкой проекта на 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 не дает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