Проблема с связыванием OpenCV CLion (Cmake) - cmake сообщает о странной ошибке

Я не могу заставить свой CLion собрать проект из-за странной ошибки при сохранении моих CMakeLists и/или создании проекта: Error:Found package configuration file: /usr/share/opencv/OpenCVConfig.cmake but it set OpenCV_FOUND to FALSE so package "OpenCV" is considered to be NOT FOUND.

Исходный файл:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
    Mat image;
    image = imread( "lena.jpg", 1 );
    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

Мой файл CMakeLists.txt: cmake_minimum_required(VERSION 3.3) project(Test) find_package( OpenCV REQUIRED ) add_executable( Test main.cpp ) target_link_libraries( Test ${OpenCV_LIBS} )

$ pkg-config --cflags opencv -I/usr/include/opencv

$ pkg-config --libs opencv -L/lib64 -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -ltbb -lGL -lGLU -lrt -lpthread -lm -ldl

Дело в том, что когда я вручную cmake . & make (все тем же файлом CMakeLists) мой проект из консоли работает просто отлично, без ошибок.

Версия OpenCV: 2.4.11-1 (arch linux) CLion: последняя.

Отличие OpenCVConfig.cm от версии git: https://www.diffchecker. com/vtmmiu1w

Вывод ручной сборки:

[dobegor@dobegor-pc Test]$ cmake .
-- The C compiler identification is GNU 5.2.0
-- The CXX compiler identification is GNU 5.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/dobegor/ClionProjects/Test
[dobegor@dobegor-pc Test]$ make 
Scanning dependencies of target Test
[ 50%] Building CXX object CMakeFiles/Test.dir/main.cpp.o
[100%] Linking CXX executable Test
[100%] Built target Test

person 12sd    schedule 04.09.2015    source источник
comment
Я застрял, я перепробовал почти все возможное. Была аналогичная проблема здесь на SO, но она не была решена.   -  person 12sd    schedule 05.09.2015
comment
При сборке проекта вручную вы выполняете сборку в исходном коде (запускаете cmake из исходного каталога), не так ли? Это может конфликтовать со сборкой вне исходного кода, выполненной CLion.   -  person Tsyvarev    schedule 05.09.2015
comment
@Tsyvarev да, но я не могу понять, в чем разница между поиском пакетов CMake в исходном коде и вне исходного кода.   -  person 12sd    schedule 05.09.2015
comment
@Tsyvarev и я пытались очистить результаты сборки в исходном коде, оставив только исходный файл и CMakeLists, но сборка CLion дает сбой точно так же, а сборка в исходном коде работает нормально. Вот почему я назвал это странным.   -  person 12sd    schedule 05.09.2015
comment
Вероятно, CLion вызывает cmake с какими-то дополнительными параметрами. Какое значение переменной OpenCV_DIR в вашей (успешной) ручной сборке? Его можно найти в файле CMakeCache.txt.   -  person Tsyvarev    schedule 05.09.2015
comment
@Цыварев OpenCV_DIR:PATH=/usr/share/opencv   -  person 12sd    schedule 05.09.2015
comment
Ваш файл /usr/share/opencv/OpenCVConfig.cmake похож на этот: github.com/Itseez/opencv /blob/master/cmake/OpenCVConfig.cmake? Если да, то какой результат успешного вызова cmake? (Вы можете отредактировать свой вопрос, чтобы добавить этот вывод).   -  person Tsyvarev    schedule 05.09.2015
comment
@Tsyvarev добавил ссылку на diff версии git и моей, а также добавил вывод ручной сборки. Извините, нельзя размещать более двух ссылок, добавлены пробелы.   -  person 12sd    schedule 05.09.2015
comment
@Tsyvarev также пытался использовать конфиг .cmake из github, ошибка абсолютно такая же, и также жалуется на отсутствие совместимых двоичных файлов.   -  person 12sd    schedule 05.09.2015
comment
Ваш исходный OpenCVConfig.cmake устанавливает OpenCV_FOUND в false только в случае Android. В некотором смысле это коррелирует с отсутствием совместимых двоичных файлов с другими OpenCVConfig.cmake. Правильно ли настроен (установлен) ваш CLion для Linux? (Можете ли вы построить и выполнить простую программу с его помощью?)   -  person Tsyvarev    schedule 05.09.2015
comment
@Tsyvarev да, helloworlds и т. Д. Работают нормально.   -  person 12sd    schedule 05.09.2015
comment
Итак, я понятия не имею о происхождении этой ошибки. Вы можете добавить команды вывода (message, file(WRITE) и т. д.) в /usr/share/opencv/OpenCVConfig.cmake, чтобы увидеть, что на самом деле является причиной, по которой OpenCV_FOUND установлено значение false. Приятным фактом является то, что вы можете сравнить этот результат с результатом, полученным при успешной ручной сборке.   -  person Tsyvarev    schedule 05.09.2015
comment
@Tsyvarev Я нашел обходной путь (см. ответ). Спасибо за твою помощь!   -  person 12sd    schedule 05.09.2015


Ответы (1)


Я не знаю, что на самом деле произошло, но я добавил строку, которая вручную устанавливает OpenCV_FOUND в 1 в OpenCVConfig.cmake, и все работает нормально:

set(OpenCV_FOUND 1)

person 12sd    schedule 05.09.2015