Как я могу просто включить opencv ВНУТРИ мой проект с CMake - PullRequest
0 голосов
/ 23 декабря 2019

Я бы хотел использовать opencv внутри папки моего проекта, потому что другие мои коллеги не все работают на одной платформе (Linux, Windows). Поэтому, чтобы упростить клонирование и компиляцию проекта, я хотел бы только сделать клон git и запустить компиляцию, чтобы иметь возможность работать над проектом. (без использования переменной окружения, чтобы быть полностью независимым)

Как и в случае с другими библиотеками (glfw), я просто добавил разархивированную папку в папку с зависимостями. Затем я добавил операторы add_subdirectory и target_link_libraries.

Затем я получаю небольшую ошибку, которую не могу решить.

Информация о моем проекте ниже

1. Структура папок проекта

project
│   README.md
|   CMakeLists.txt                (my CMakeLists project)    
└───dependencies
│   └───opencv-4.1.2
│       │   CMakeLists.txt        (the original opencv CMakeLists (untouched))
│       │   ...
└───src
    │   main.cpp

2. Содержимое моего CMakeLists

cmake_minimum_required(VERSION 3.15)
project(OpTests)

set(CMAKE_CXX_STANDARD 17)

add_subdirectory(dependencies/opencv-4.1.2)

add_executable(OpTests src/main.cpp)
target_link_libraries(OpTests opencv_core opencv_highgui opencv_imgproc opencv_videoio)

3. Содержание main.cpp

#include <iostream>
#include <opencv2/opencv.hpp>

int main() {
    std::cout << CV_VERSION << std::endl;
    cv::Mat M(2,2, CV_8UC3, cv::Scalar(0,0,255));
    std::cout << "M = " << std::endl << " " << M << std::endl << std::endl;
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

4. Ошибка

°
°
°
-- 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jeremy/CLionProjects/OpTests/cmake-build-debug
[  3%] Built target ittnotify
[  9%] Built target ippiw
[ 18%] Built target libjasper
[ 45%] Built target libwebp
[ 69%] Built target opencv_core
[ 90%] Built target opencv_imgproc
[ 93%] Built target opencv_imgcodecs
[ 96%] Built target opencv_videoio
[100%] Built target opencv_highgui
Scanning dependencies of target OpTests
[100%] Linking CXX executable bin/OpTests
CMakeFiles/OpTests.dir/src/main.cpp.o: In function `cv::String::~String()':
/usr/include/opencv2/core/cvstd.hpp:664: undefined reference to `cv::String::deallocate()'
CMakeFiles/OpTests.dir/src/main.cpp.o: In function `cv::String::operator=(cv::String const&)':
/usr/include/opencv2/core/cvstd.hpp:672: undefined reference to `cv::String::deallocate()'
collect2: error: ld returned 1 exit status
CMakeFiles/OpTests.dir/build.make:88: recipe for target 'bin/OpTests' failed
make[3]: *** [bin/OpTests] Error 1
CMakeFiles/Makefile2:81: recipe for target 'CMakeFiles/OpTests.dir/all' failed
make[2]: *** [CMakeFiles/OpTests.dir/all] Error 2
CMakeFiles/Makefile2:88: recipe for target 'CMakeFiles/OpTests.dir/rule' failed
make[1]: *** [CMakeFiles/OpTests.dir/rule] Error 2
Makefile:186: recipe for target 'OpTests' failed
make: *** [OpTests] Error 2

Итак 3 вопроса:

Что я сделал не так? И можно ли просто исправить это без 100 строк CMakeLists?

Это плохая практика?

Заранее спасибо

Прекрасный день

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