2016-06-08 1 views
0

Ich versuche, Standard-OpenCV zur gleichen Zeit wie eine benutzerdefinierte Version in einem anderen Verzeichnis unter OS X installiert zu haben. Dabei habe ich festgestellt, dass der OpenCV-CMake die Verknüpfung fehlschlägt, wenn die Bibliotheken auf einem nicht installiert sind Standardpfad (dh anders als/usr/local). Ich war in der Lage, dies zu beheben, indem eine Linie zu OpenCVModule.cmake Zugabe:Wie kann ich eine Eigenschaft für OpenCV-dylib-Dateien mit CMake festlegen?

set_target_properties(${the_module} PROPERTIES OUTPUT_NAME "${the_module}${OPENCV_DLLVERSION}" DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" COMPILE_PDB_NAME "${the_module}${OPENCV_DLLVERSION}" COMPILE_PDB_NAME_DEBUG "${the_module}${OPENCV_DLLVERSION}${OPENCV_DEBUG_POSTFIX}" ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMPILE_PDB_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib ## <--- Added this line )

Ich versuche, diese Änderung des OpenCV-Projekt zurück beizutragen. Aber in dem Fall, in dem CMAKE_INSTALL_PREFIX auf "/ usr/local" eingestellt ist, sollte INSTALL_NAME_DIR nicht gesetzt werden. Ich habe versucht, indem eine if Aussage:

set_target_properties(${the_module} PROPERTIES OUTPUT_NAME "${the_module}${OPENCV_DLLVERSION}" DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" COMPILE_PDB_NAME "${the_module}${OPENCV_DLLVERSION}" COMPILE_PDB_NAME_DEBUG "${the_module}${OPENCV_DLLVERSION}${OPENCV_DEBUG_POSTFIX}" ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} COMPILE_PDB_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} LIBRARY_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} if(NOT ${CMAKE_INSTALL_PREFIX} STREQUAL "/usr/local") ## <--- this always evaluates to FALSE INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib endif() )

Ich habe keine Syntax gefunden, dass die if Anweisung true verursacht zu bewerten. Gibt es eine Möglichkeit, CMake auf INSTALL_NAME_DIR basierend auf dem Inhalt von CMAKE_INSTALL_PREFIX bedingt zu setzen?

Antwort

0

CMake-Befehle können nicht verschachtelt werden: Es gibt einfach keine Syntax dafür. Aber Sie können jeden Befehl unter „if“ Zweig ausführen:

if(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") 
    set_target_properties(${the_module} PROPERTIES 
     INSTALL_NAME_DIR ${CMAKE_INSTALL_PREFIX}/lib 
    ) 
endif() 

Beachten Sie auch, dass bevorzugte Art und Weise für Variablenwert vergleichen, in „if“ Klausel Variablennamen zu verwenden, anstatt es zu dereferencing. CMake wird feststellen, dass die Variable mit diesem Namen existiert und es automatisch dereferenziert. Dieses Verhalten wird unter documentation für den Befehl "if" beschrieben.

Verwandte Themen