如何使用CMake将RealSense2/OpenCV源代码包含到编译中? 短版

如何使用CMake将RealSense2/OpenCV源代码包含到编译中? 短版,opencv,visual-c++,cmake,realsense,Opencv,Visual C++,Cmake,Realsense,我想将OpenCV和librealsense2的(未编译的)源文件与CMake捆绑在一起,这样我就可以在RPi上交叉编译(或者根本不编译),但我对CMake是新手,不知道如何编译 add_executable (CMakeRealSense "CMakeRealSense.cpp" "CMakeRealSense.h") include_directories(opencv libs/opencv-master/include) include_dire

我想将OpenCV和librealsense2的(未编译的)源文件与CMake捆绑在一起,这样我就可以在RPi上交叉编译(或者根本不编译),但我对CMake是新手,不知道如何编译

add_executable (CMakeRealSense "CMakeRealSense.cpp" "CMakeRealSense.h")

include_directories(opencv libs/opencv-master/include)
include_directories(realsense2 libs/librealsense-master/include)
这会产生一系列与RS文件本身相关的错误(X未在作用域上声明)

长版本 我目前正试图为Intel RealSense摄像头d435编写一个程序。我正在使用两个库。OpenCV和librealsense2(相机的实际库)。我首先使用VCPKG来加载包,这在我的本地机器上是可行的,但我无法在RPI3上正确编译它。我决定将源文件与项目捆绑在一起是个好主意,但我无法让它工作。我犯了一个又一个错误

编辑1 当我在本地windows计算机上编译时,出现错误
无法打开include文件:“opencv2/opencv_modules.hpp”:没有这样的文件或目录
。而且,在我的pi上,它给出了一系列与RealSense文件本身相关的错误(没有全部检查,其中780个)

编辑3 正如@squareskittles所指出的那样。我修复了与本地windows版本相关的问题,但对于pi,我仍然存在新错误的问题

据我所知,错误表明它在文件夹
tools
src
examples
中找不到
opengl\u config.cmake
文件夹(
examples
将被删除,所以问题不大)。最后一个错误是

CMake Error at libs/librealsense-master/CMake/install_config.cmake:4 (add_custom_target):
  add_custom_target cannot create target "uninstall" because another target
  with the same name already exists.  The existing target is a custom target
  created in source directory
  "/home/pi/.vs/CMakeRealSense/d6128cea-ef93-4c7b-83bb-89ee6315963f/src/libs/opencv-master".
  See documentation for policy CMP0002 for more details.
编辑4 因此,我首先添加了包含安装配置的cmake文件夹,第二个错误似乎是
librealsense
opencv
在卸载配置中具有相同的名称。是否可以安全地更改卸载的
add\u custom\u target
,而不影响cmake构建过程的其余部分

编辑5 它成功地编译了realsense2库(据我所知),但无法打开
opencv2/core.hpp
源文件。不知道为什么它找不到它

编辑6
所以我做了更多的挖掘,opencv使用一个头文件来检查您使用的模块。我不知道如何做到这一点,但我会做更多的挖掘来找出

如果你想在你的CMake项目中直接包含OpenCV和RealSense2源代码,你应该使用命令告诉CMake查看每个目录。请确保在每个其他源存储库中提供顶级CMakeLists.txt文件的路径,否则它们将无法完全配置:

add_subdirectory(libs/opencv-master)
add_subdirectory(libs/librealsense-master)
稍后在CMakeLists.txt文件中,您需要使用这些子存储库中定义的CMake变量和目标,以便将这些库中的每个库包含在您的可执行文件中。例如:

# Define your CMake executable target.
add_executable(CMakeRealSense CMakeRealSense.cpp CMakeRealSense.h)

# Link the OpenCV components and RealSense targets to your executable target.
target_link_libraries(CMakeRealSense PRIVATE opencv_core realsense2)

您可能还必须链接其他OpenCV组件,如
OpenCV\u imgproc
OpenCV\u dnn
OpenCV\u imgcodecs
OpenCV\u videoio
OpenCV\u highgui
,等等,这取决于您使用的OpenCV功能。

欢迎使用堆栈溢出!我想你要找的命令是
add_subdirectory()
,告诉CMake进入每个
opencv
realsense2
目录,并对它们进行配置。@squareskittles这已经解决了windows编译的问题(非常感谢btw),但还没有解决pi版本的问题,我将编辑这篇文章以反映这一点。我们讨论了与在项目中包含OpenCV源代码相关的一些问题(和修复)。我以前看过这篇文章,但在阅读时我感到困惑。可能是我对它缺乏经验。我试着再看一眼,这可能是我需要的,但还没有解决。我仍然有编辑中描述的相同错误3@Autism这是在您自己的源代码树中包含这些外部库的缺点之一,您可能会遇到命名冲突。您必须重命名其中一个自定义目标(将其重命名为类似于
opencv\u uninstall
)并重新生成。此外,如果缺少头文件,则可能必须手动添加指向缺少头文件的路径:
target\u include\u目录(cmakeralsense PRIVATE libs/opencv master/modules/core/include)
错误已更改,无法将
opencv2/opencv\u module.hpp
包含在
opencv.hpp
中。但是谢谢你一路指导我!