2014-03-23 7 views
7

ich relativ neu bin cmake und nach Tagen des Kämpfens nicht das Folgende herausfinden konnte:Verknüpfung opencv Bibliotheken enthalten als externes Projekt über Cmake

ich ein Projekt, das auf opencv abhängt (was a cmake-Projekt selbst) und ich möchte opencv-Bibliotheken statisch verknüpfen. Was ich tue, ist ich eine Kopie opencv Quellcode in meinem Projekt haben und schließen sie in meine CMakeLists.txt über

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} 
) 

Alle schön gebaut und wo ich Problem ist, dass ich nicht sicher, wo die opencv bestimmen kann, Bibliotheken werden sein. Z.B. auf Linux/Mac gibt es in ${MY_OPENCV_INSTALL_DIR}/lib und als libopencv_core.a genannt, während auf 32-Bit-Windows mit VS 2012 die Libs sind in ${MY_OPENCV_INSTALL_DIR}/lib/x86/vc11/staticlib und für die Debug-Konfiguration der Libs wie opencv_core247d.lib genannt installiert.

So ist die Frage, kann ich eine Liste aller von der OpenCV Build (und der Wurzel Ordner lib) und verknüpfen sie über so etwas wie target_link_libraries(mylib opencv_core ...) hergestellten Bibliotheken irgendwie erhalten?

Vielleicht etwas falsch oder overcomplicated ich tue. Also, was ich im Grunde will, ist, meinen eingebetteten opencv Quellbaum statisch zu kompilieren und gegen seine Bibliotheken in einer "plattformübergreifenden" Weise zu verlinken.

Alle Hinweise sind sehr willkommen! Vielen Dank!

+2

Ich würde diese Frage ein Duplikat nicht berücksichtigen; Diese Frage bezieht sich auf „eine Kopie von opencv Quellcode in meinem Projekt und füge ihn in mein CMakeLists.txt“ hat, ist die zugehörige Betrogene über das System installiert OpenCV – moof2k

Antwort

10

Die beste Lösung cmake mit OpenCV-Projekt zu verwenden ist:

  1. Compile OpenCV als shared/statische Bibliotheken mit cmake Build-System OpenCV.
  2. In Ihrem Projekt CMakeLists.txt

Zum Beispiel (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}) 

Es Quer Plattformen funktioniert.

+1

Dank mit! Es hat mir schon ziemlich gute Einblicke gegeben. Ich frage mich nur, wie ich das gleiche erreichen kann, ohne OpenCV als separaten Schritt zu kompilieren, sondern alles in ein CMake-Projekt zu integrieren? Vielen Dank! – Vyacheslav

+0

Wenn Sie das gesamte OpenCV-Projekt in Ihr Projektverzeichnis kopieren. Zum Beispiel: /opencv, dass Sie nur opencv in Ihrem CMakeLists.txt umfassen könnte: add_subdirectory (opencv), dann könnte man target_link_libraries (mylib opencv_core) direkt als opencv Module sind Teile Ihres Projekts. – maxint

+0

Danke, ich werde es noch einmal versuchen. Ich erinnere mich, dass ich tatsächlich damit angefangen habe, aber dann aus Gründen, die ich nicht mehr kenne, gescheitert bin. Danke für deine Hilfe! – Vyacheslav

Verwandte Themen