Поскольку вы настаиваете на сохранении opencv в дереве своего проекта
Это более простой способ, но я просто хочу, чтобы это делалось таким образом.
Вотрешение, которое точно работает с вашим деревом проектов, которое вы разместили в вопросе, и с opencv-3.4.1 .Для простоты я буду пренебрегать dlib
библиотекой и Qt
зависимостью, так как у вас с этим не было никаких проблем.
Root CMakeLists.txt
должен иметь следующее содержимое:
cmake_minimum_required(VERSION 2.8.11) # or anything higher, if you wish
project(recognition-node CXX)
add_subdirectory(node)
CMakeLists.txt
в каталоге node
должно иметь следующее содержимое:
add_subdirectory(third_party)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g") # or any other additional flags
# at this point you can add find_package(Qt5Widgets REQUIRED) and later link your binary against Qt5::widgets as well
add_executable(myExec main.cpp
# and put here all the other source files of your project ...
)
# for linking libs I have put additionally highgui and imgproc to check the solution against OpenCV official sample
target_link_libraries(myExec opencv_core opencv_highgui opencv_imgproc)
target_include_directories(myExec PUBLIC
third_party/opencv/modules/calib3d/include
third_party/opencv/modules/core/include
third_party/opencv/modules/cudaarithm/include
third_party/opencv/modules/cudabgsegm/include
third_party/opencv/modules/cudacodec/include
third_party/opencv/modules/cudafeatures2d/include
third_party/opencv/modules/cudafilters/include
third_party/opencv/modules/cudaimgproc/include
third_party/opencv/modules/cudalegacy/include
third_party/opencv/modules/cudaobjdetect/include
third_party/opencv/modules/cudaoptflow/include
third_party/opencv/modules/cudastereo/include
third_party/opencv/modules/cudawarping/include
third_party/opencv/modules/cudev/include
third_party/opencv/modules/dnn/include
third_party/opencv/modules/features2d/include
third_party/opencv/modules/flann/include
third_party/opencv/modules/highgui/include
third_party/opencv/modules/imgcodecs/include
third_party/opencv/modules/imgproc/include
third_party/opencv/modules/ml/include
third_party/opencv/modules/objdetect/include
third_party/opencv/modules/photo/include
third_party/opencv/modules/shape/include
third_party/opencv/modules/stitching/include
third_party/opencv/modules/superres/include
third_party/opencv/modules/ts/include
third_party/opencv/modules/video/include
third_party/opencv/modules/videoio/include
third_party/opencv/modules/videostab/include
third_party/opencv/modules/viz/include
third_party/opencv/modules/world/include
)
CMakeLists.txt
в third_party
должно содержать только:
add_subdirectory(opencv)
# add_subdirectory(dlib) # if you will use dlib, of course also add dlib
Образец Iиспользуется для проверки сборки contours2.cpp (просто скопируйте и вставьте содержимое в main.cpp
).
Однако я все еще считаю, что использовать это решение - ужасная идея.
- OpenCv требует очень много времени для компиляции
- Вы должны вручную добавить включаемые каталоги (вы можете использовать некоторые макрогенераторы, но обычно это выглядит еще более безобразно)
- в вашей системе сборки у вас есть много целей (более 300), которые вам на самом деле не нужны, включая
install
target
Итак, моя рекомендация: если вы хотите, используйте этурешение для научных целей, но просто скомпилируйте и установите OpenCv по системе (илилокально, если вы не являетесь администратором), когда вам действительно нужно его использовать.