我正在开发一个利用RediSearch的C ++项目。我希望能够使用CMake以类似于#include <redisearch/document.h>
的形式调用RediSearch函数,而不必更改RediSearch项目。
这个问题应该适用于将CMake与任何外部CMake项目一起使用,但是我发现的内容仅针对特定的一组项目,或者根本行不通。
我尝试使用ExternalProject
,例如在this project中使用配置文件,并尝试使用find_package()
在this project中,直接使用add_subdirectory
和{{1 }},直接链接到src /文件夹,等等。
我也尝试过在我的CMakeLists.txt中添加以下行
target_link_libraries
但收到以下错误:
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)
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构建的任何项目)。我根本不想更改RediSearch文件或配置-一切都应该通过我的项目进行。
注意:我正在使用cmake版本3.13.3