我正在开发一个利用 RediSearch 的 C++ 项目。我希望能够以类似于#include <redisearch/document.h>
使用 CMake 的形式调用 RediSearch 函数,而无需更改 RediSearch 项目。
这个问题应该适用于将 CMake 与任何外部 CMake 项目一起使用,但我发现的只是特定于一组项目或根本不起作用。
尝试
我尝试在这个项目中使用ExternalProject
,例如在这个项目中使用配置文件和find_package()
在这个项目中,直接使用add_subdirectory
and 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
)中以#include <redisearch/document.h>
. 我根本不想更改 RediSearch 文件或配置 - 一切都应该通过我的项目进行。
注意:我使用的是 cmake 版本 3.13.3