tutorial script create course c++ opencv cmake static-linking

c++ - create - cmake script tutorial



vincular las bibliotecas de Opencv incluidas como un proyecto externo a través de cmake (1)

Esta pregunta ya tiene una respuesta aquí:

Soy relativamente nuevo en cmake y después de días de dificultades no pude entender lo siguiente:

Tengo un proyecto que depende de opencv (que es un proyecto de cmake en sí mismo) y quiero vincular estáticamente las bibliotecas de OpenCV. Lo que estoy haciendo es tener una copia del código fuente de opencv en mi proyecto e incluirlo en mi CMakeLists.txt a través de

ExternalProject_Add(my_copy_of_opencv_project CMAKE_ARGS -D BUILD_SHARED_LIBS=NO ... CMAKE_INSTALL_PREFIX=${MY_OPENCV_INSTALL_DIR} SOURCE_DIR ${PATH_TO_OPENCV_SRCS} )

Todo construido muy bien y donde tengo un problema es que no puedo determinar de manera confiable dónde estarán las bibliotecas de opencv. Por ejemplo, en linux / mac hay en ${MY_OPENCV_INSTALL_DIR}/lib y se nombran como libopencv_core.a mientras que en Windows de 32 bits con VS 2012 instalado las libs están en ${MY_OPENCV_INSTALL_DIR}/lib/x86/vc11/staticlib y para el Configuración de depuración las libs nombradas como opencv_core247d.lib .

Entonces, la pregunta es, ¿puedo de alguna manera obtener una lista de todas las bibliotecas producidas por la compilación de OpenCV (y la carpeta raíz de lib) y vincularlas a través de algo como target_link_libraries(mylib opencv_core ...) ?

Tal vez estoy haciendo algo mal o muy complicado. Entonces, básicamente lo que quiero es compilar mi árbol fuente incrustado opencv de forma estática y vincularlo con sus bibliotecas de forma "cross-plaformish".

¡Cualquier apuntador es muy apreciado! ¡Gracias!


La mejor solución para usar cmake con el proyecto OpenCV es:

  1. Compila OpenCV como bibliotecas compartidas / estáticas con el sistema de construcción cmake de OpenCV.
  2. En el proyecto CMakeLists.txt

Por ejemplo (CMakeLists.txt):

project(test_project) if(WIN32) set(OpenCV_DIR "d:/libs/opencv-2.4.8/build") else() set(OpenCV_DIR "/usr/lib/opencv") endif() find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(test main.cpp) target_link_libraries(test ${OpenCV_LIBS})

Funciona en plataformas cruzadas.