Скомпилируйте и свяжите OpenCV с моим проектом в моем основном CMakeLists.txt - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в cmake.У меня есть проект, который использует DLIB и OpenCV.Они определяются как подмодули, которые находятся в папке third_party.Я хочу связать их с моим основным проектом, который является 'узлом' с cmake, но я не смог достичь.Я делюсь своим деревом проектов.Я сделал с помощью методов find_package (OpenCV) и target_link_libraries (узел распознавания $ {OPENCV_LIBS}), но мне нужно скомпилировать из исходного кода без установки чего-либо.Наконец, я просто хочу написать 'cmake.&& make '

.
├── CMakeLists.txt
├── node
│   ├── build.sh
│   ├── CMakeLists.txt
│   ├── configure.sh
│   ├── findfacestask.cpp
│   ├── findfacestask.h
│   ├── main.cpp
│   ├── matrixwrapper.h
│   ├── poolcontext.cpp
│   ├── poolcontext.h
│   ├── recognition.dat
│   ├── recognizefacetask.cpp
│   ├── recognizefacetask.h
│   ├── runscript
│   ├── sp.dat
│   ├── task.cpp
│   ├── task.h
│   ├── unhandledexception.cpp
│   ├── unhandledexception.h
│   ├── webcamfeed.cpp
│   ├── webcamfeed.h
│   ├── wrapper.cpp
│   └── wrapper.h
└── third_party
    ├── dlib
    │   ├── appveyor.yml
    │   ├── CMakeLists.txt
    │   ├── dlib
    │   ├── docs
    │   ├── examples
    │   ├── MANIFEST.in
    │   ├── python_examples
    │   ├── README.md
    │   ├── setup.py
    │   └── tools
    └── opencv
        ├── 3rdparty
        ├── apps
        ├── cmake
        ├── CMakeLists.txt
        ├── CONTRIBUTING.md
        ├── data
        ├── doc
        ├── include
        ├── LICENSE
        ├── modules
        ├── platforms
        ├── README.md
        └── samples

Содержимое моего топа CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)

set (CMAKE_CXX_STANDARD 11)

add_subdirectory(node)
add_subdirectory(third_party/dlib)
add_subdirectory(third_party/opencv)

Содержимое узла / CMakeLists.txt

cmake_minimum_required(VERSION 2.8.12)
project(recognition-node)

set(CMAKE_AUTOMOC ON)

find_package(Qt5Widgets REQUIRED)

add_executable(recognition-node main.cpp  
            webcamfeed.cpp 
            poolcontext.cpp 
            unhandledexception.cpp
            task.cpp
            findfacestask.cpp
            wrapper.cpp
            recognizefacetask.cpp)

target_link_libraries(recognition-node Qt5::Widgets)
target_link_libraries(recognition-node dlib::dlib)
target_link_libraries(recognition-node opencv::core)

Выдает ошибку в' makeэтап, который является:

/home/arnes/workspace/recognition-node/node/poolcontext.h:10:28: fatal error: 
opencv2/core.hpp: No such file or directory

1 Ответ

0 голосов
/ 23 мая 2018

Поскольку вы настаиваете на сохранении 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 по системе (илилокально, если вы не являетесь администратором), когда вам действительно нужно его использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...