我正在开展一项学术研究,实施新的搜索算法,基于Fast-Downward,一个实现多个Search Algorithms和许多搜索域和问题的c ++开源。还安装了Lab,一个管理编译和运行脚本的Python包。
最近我尝试将OpenCV库包含在其ML算法中,以便将这些算法集成到我的搜索算法中。
但是我在FD项目中包含一些lib时鼓励了一些问题,并且无法用FD编译OpenCV。
项目层次结构:
fast_downward
| -- benchmarks
| -- experiments
| -- lab
| -- misc
| -- src
| | -- preprocess
| | -- search
| | -- translate
| | -- VAL
| | -- ML
ML目录是我想要编译的新子目录。
编译尝试:
src/CMakeLists.txt
下的:
include(ML/CMakeLists.txt)
add_subdirectory(ML)
但编译失败。
说实话,我从未尝试过编辑CMake
文件,而且我也不了解策略以及如何做到这一点。
所以,我的问题是如何在我的主项目中集成OpenCV包/子文件夹(在我的项目中称为ML)?
修改
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
答案 0 :(得分:2)
您不应该include(ML/CMakeLists.txt)
,add_subdirectory(ML)
应该在src/CMakeLists.txt
内。{
现在,我们通常可以有两种情况:
这两种情况需要以稍微不同的方式处理。
我们假设OpenCV安装在系统的某个位置。然后在src/ML/CMakeLists.txt
中,您应该有以下几行:
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(test ${YOUR_SOURCES} ${YOUR_HEADERS})
target_link_libraries(test ${OpenCV_LIBS})
这是为了生成可执行文件,但是如果要生成库,则应该使用add_library(...)
而不是add_executable(...)
。如果您需要OpenCV中的特定组件,您应该使用find_package(OpenCV REQUIRED COMPONENTS core imgproc ...)
来询问它,当然还可以参考OpenCV文档。请注意,您的CMake可能会在没有FindOpenCV.cmake
脚本的情况下发货,因此您可能无法使用find_package(OpenCV)
。在这种情况下,您需要从网上抓取一个。另请参考其来源,因为它可能会定义包含包含和库的不同变量,这意味着可能会使用target_link_libraries(test ${OpenCV_LIBS})
而不是使用target_link_libraries(test ${OpenCV_LIBRARIES})
。
在这种情况下,我想你在系统的某个目录中有OpenCV包/源;在这种情况下你需要构建OpenCV,apt-get不会为你做的工作。在src/ML/CMakeLists.txt
中,您将拥有类似
ExternalProject_Add(my_opencv
CMAKE_ARGS -D BUILD_SHARED_LIBS=NO ...
CMAKE_INSTALL_PREFIX=${MY_OPENCV_INSTALLATION_DIR}
SOURCE_DIR ${PATH_TO_OPENCV_SRCS}
)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(test ${YOUR_SOURCES} ${YOUR_HEADERS})
target_link_libraries(test ${OpenCV_LIBS})
值得咨询的来源是:
OpenCV intro: cmake
linking opencv libraries included as an external project via cmake
Configuring an c++ OpenCV project with Cmake
Could not find module FindOpenCV.cmake ( Error in configuration process)
CMake and OpenCV 3.0
sample FindOpenCV.cmake