2

我正在开发一个利用 RediSearch 的 C++ 项目。我希望能够以类似于#include <redisearch/document.h>使用 CMake 的形式调用 RediSearch 函数,而无需更改 RediSearch 项目。

这个问题应该适用于将 CMake 与任何外部 CMake 项目一起使用,但我发现的只是特定于一组项目或根本不起作用。

尝试

我尝试在这个项目中使用ExternalProject,例如在这个项目中使用配置文件和find_package()这个项目中,直接使用add_subdirectoryand 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

4

0 回答 0