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í:
- Configurar un proyecto OpenCV de c ++ con Cmake 2 respuestas
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:
- Compila OpenCV como bibliotecas compartidas / estáticas con el sistema de construcción cmake de OpenCV.
- 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.