c++ - 如何使用我的 C++ 项目中的 RediSearch 库?
问题描述
我正在开发一个利用 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
解决方案
推荐阅读
- sql-server - Scala,Play 框架,Slick:db join query with filter on enumeration field
- angular - 访问没有扩展名的静态文件时防止 Angular 运行
- flutter - 自定义 TextInputFormatter
- r - 在具有分类变量的 r 输出中使用 lm() 的多元线性回归不完整?
- sql-server - 在两个 SQL Server 表中插入/更新数据
- wordpress - 添加到购物车按钮将我带到产品页面
- r - 根据具有多个值的其他列中的值创建新列
- google-apps-script - 谷歌脚本中的 range.uncheck() 不起作用
- r - 添加 leftcols 后,Hetstats 正在从森林图中消失
- google-sheets - 谷歌表格,arrayformula 只返回一次值