【问题标题】:How to include QGLVIEWER in CMAKE for Qt5如何在 Qt5 的 CMAKE 中包含 QGLVIEWER
【发布时间】:2019-06-08 22:10:57
【问题描述】:

我将 CMAKE 设置为包含 Qt5 项目的 QGLViewer。但是,一旦我尝试编译项目,CMAKE 就会停止并出现以下错误:

CMake 错误:此项目中使用了以下变量,但它们设置为 NOTFOUND。 请设置它们或确保它们在 CMake 文件中正确设置和测试: QGLVIEWER_LIBRARY 由目录 /home/emanuele/sfm 中的目标“sfm”链接

QGLViewer 位于以下路径:usr/include/QGLViewer,从这个打印屏幕可以看到:

这是我在 CMAKE 上设置路径的方式:

此外,我发现this source 有助于理解如何声明库。 this post 也有助于为我指出正确的路线,但仍然无法正常工作。

在导致问题的最重要的 CMAKE 部分下方:

cmake_minimum_required(VERSION 3.11)
project(sfm)

########### options ###############
SET(USE_QT TRUE CACHE BOOL)
########### END options ###########

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -g")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g")
set(CMAKE_INCLUDE_CURRENT_DIR ON)

########### OpenMP ################
find_package(OpenMP)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
########### END OpenMP ############

########### OpenCV ################
set (OpenCV_DIR /home/emanuele/opencv/build)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
list(APPEND LINK_LIBRARIES ${OpenCV_LIBS})
########### END OpenCV ############

########### Qt 5 ##################
IF (USE_QT)
  ADD_DEFINITIONS("-DUSE_QT")
  find_package(Qt5Widgets REQUIRED)
  find_package(Qt5Xml REQUIRED)
  find_package(Qt5OpenGL REQUIRED)

  include_directories(${Qt5Widgets_INCLUDE_DIRS}
      ${Qt5Xml_INCLUDE_DIRS}
      ${Qt5OpenGL_INCLUDE_DIRS}
  )
  list(APPEND LINK_LIBRARIES Qt5::Widgets Qt5::Xml Qt5::OpenGL)
  set(CMAKE_AUTOMOC ON)
  set(CMAKE_AUTOUIC ON)

  include_directories(src/ui/mainwindow src/ui/widgets)

  find_package(OpenGL REQUIRED)
  find_library(QGLVIEWER_LIBRARY
      NAMES qglviewer-qt5 qglviewer QGLViewer QGLViewer2)
  list(APPEND LINK_LIBRARIES ${QGLVIEWER_LIBRARY}  ${OPENGL_LIBRARIES})
ENDIF (USE_QT)
########### END Qt 5 ##############

########### sources ###############
file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")
add_executable(sfm ${SOURCE_FILES})
########### END sources ###########

########### headers ###############
include_directories(src)
########### END headers ###########

########### link libraries ########
target_link_libraries(sfm ${LINK_LIBRARIES})
########### END link libraries ####

我希望 CMAKE 能够编译,但我的实际结果显示在下面的打印屏幕中,让我无法继续前进:

【问题讨论】:

    标签: c++11 cmake qt5


    【解决方案1】:

    您应该在 CMAKE_PREFIX_PATH 变量中设置 qglviewer 库的路径

    或者您可以将其集成为新目标,使用 qglviewer tar gz 存档作为输入:

    set(QGLVIEWER_FILES ${CMAKE_BINARY_DIR}/libQGLViewer-2.7.1/QGLViewer/qglviewer.h)
    
    get_target_property (QT_QMAKE_EXECUTABLE Qt5::qmake IMPORTED_LOCATION)
    
    add_custom_command(OUTPUT ${QGLVIEWER_FILES}
      COMMAND  tar xzf "${CMAKE_CURRENT_SOURCE_DIR}/libQGLViewer-2.7.1.tar.gz" --strip 1
      COMMAND ${QT_QMAKE_EXECUTABLE} -o QMakefile 
      COMMAND make -f QMakefile 
    #  COMMAND ${CMAKE_COMMAND} -E touch ${LIBFOO_TAR_HEADERS}
      WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/libQGLViewer-2.7.1"
      DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/libQGLViewer-2.7.1.tar.gz"
      COMMENT "Unpacking libQGLViewer-2.7.1.tar.gz"
      VERBATIM
    )
    
    add_custom_target(qglviewer_untar DEPENDS ${QGLVIEWER_FILES})
    
    add_library(qglviewer SHARED IMPORTED)
    add_dependencies(qglviewer qglviewer_untar)
    
    # link qglviewer
    set_target_properties(qglviewer PROPERTIES
                          IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/libQGLViewer-2.7.1/QGLViewer/libQGLViewer-qt5.so"
                          INTERFACE_INCLUDE_DIRECTORIES "${CMAKE_CURRENT_BINARY_DIR}/libQGLViewer-2.7.1")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 2019-11-05
      相关资源
      最近更新 更多