将项目转换为qt5并将未定义的引用转换为`vt for qt5和cmake

时间:2016-03-03 23:53:06

标签: c++ linker cmake qt5

我一直致力于将Windows qt4项目转换为使用qt5和cmake。我得到了我认为接近完成的内容然后我一直变得很奇怪"未定义的参考错误"来自链接器。但我似乎无法让它们消失。 包含的是cmake文件。我是cmake和qt的新手。谢谢你的帮助。

cmake_minimum_required(VERSION 3.0.0)

project(JF-Cut)


include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#elseif(COMPILER_SUPPORTS_CXX0X)
#   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()


set(FIND_GLM ./FindGLM.cmake)

# Find the QtWidgets library
find_package(OpenCL REQUIRED)
find_package(OpenGL REQUIRED)
#find_package(GLM REQUIRED)
#include_directories(${GLM_INCLUDE_DIRS})
#link_directories(${GLM_LIBRARY_DIRS})
#add_definitions(${GLM_DEFINITIONS})

find_package(Qt5 COMPONENTS Core Gui
            OpenGL Xml Declarative
            Widgets 
            REQUIRED
            )
find_package(GLEW REQUIRED )
find_package(Boost COMPONENTS system)

#FIND_PATH(GLM_INCLUDE_DIR /usr/include)

# Interoperation with clogs
option(CLOGS " use clogs algorithms " OFF)
if (CLOGS)
  find_path(CLOGS_INCLUDE clogs/clogs.h)
  find_library(CLOGS_LIB clogs)
  include_directories(${CLOGS_INCLUDE})
  add_definitions(-DHAVE_CLOGS)
endif()

#set(CMAKE_AUTOMOC ON)
#SET(CMAKE_AUTOUIC ON)

add_definitions(-DUNICODE
                -DQT_LARGEFILE_SUPPORT
                -D__CL_ENABLE_EXCEPTIONS
                -D__CL_ENABLE_DEBUG_
                -DQT_CORE_LIB
                -DQT_GUI_LIB
                -DQT_DLL
                -DQT_XML_LIB
                -DNOMINMAX
                )

SET(CMAKE_INCLUDE_CURRENT_DIR ON)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

set(SOURCE
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCMain.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.cpp

)
set(HEADERS
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.h
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/cl/cl_stacktrace.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_msvc.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_gcc.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QError.h
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QStructure.h
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h
  ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.h
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_bfs_block.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_capacity.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_cut.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_excessflow.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_flow.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_tag.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_count_block.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_global_relabel.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_histogram.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_kmeans.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel_fast.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_feature.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_preint.cl
)

Set (UI_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCPanel.ui
    ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCVisualizer.ui
    )


QT5_WRAP_CPP(QGCPanel_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h )
qt5_wrap_ui(QGCPanel_ui_moc  ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCPanel.ui)

QT5_WRAP_CPP(QGCVisualizer_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h)
qt5_wrap_ui(QGCVisualizer_ui_moc  ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCVisualizer.ui)


QT5_WRAP_CPP(QGCWidget_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h )
QT5_WRAP_CPP(QTransferFunction1D_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h )
QT5_WRAP_CPP(QProfile_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h )
QT5_WRAP_CPP(QHoverPoints_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h )

QT5_WRAP_CPP(QCommon_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h )


add_library(QGCPanel
            ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.cpp
            ${QGCPanel_ui_moc})
target_link_libraries(QGCPanel Qt5::Widgets ${QGCPanel_hdr_moc} ${QCommon_hdr_moc})

add_library(QGCVisualizer
            ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.cpp
            ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp
            ${QGCVisualizer_ui_moc} ${QGCPanel_ui_moc}
            )
target_link_libraries(QGCVisualizer
                        Qt5::Widgets
                        Qt5::Core
                        ${QGCVisualizer_hdr_moc}
                        ${QGCPanel_hdr_moc}
                        ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h
                        ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h
                        ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h
                        )

add_library(QGCWidget
            ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.cpp)
target_link_libraries(QGCWidget Qt5::Widgets ${QGCWidget_hdr_moc})

add_library(QTransferFunction1D
           ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.cpp)
target_link_libraries(QTransferFunction1D  Qt5::Widgets ${QTransferFunction1D_hdr_moc})

add_library(QProfile
            ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.cpp)
target_link_libraries(QProfile  Qt5::Widgets ${QProfile_hdr_moc})

add_library(QHoverPoints
            ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.cpp)
target_link_libraries(QHoverPoints  Qt5::Widgets ${QHoverPoints_hdr_moc})

add_library(QCommon
            ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp)
target_link_libraries(QCommon  Qt5::Widgets Qt5::Core ${QCommon_hdr_moc})


include_directories(${Boost_INCLUDE_DIR}
                    ${OpenCL_INCLUDE_DIRS}
                    ${CLOGS_INCLUDE}
                    ${OPENGL_INCLUDE_DIRS} 
                    ${GLUT_INCLUDE_DIRS}
                    $(GLEW_INCLUDE_DIRS)
                    )
add_executable(test_build
                ${SOURCE} ${HEADERS}
                ${QGCVisualizer_ui_moc}
                ${QGCPanel_ui_moc}
                )
target_link_libraries(test_build
  Qt5::Widgets  Qt5::Xml Qt5::Core Qt5::Gui Qt5::OpenGL
  Qt5::Xml Qt5::Declarative
  ${GLM_INCLUDE_DIR} ${Boost_LIBRARIES}  ${OpenCL_LIBRARIES}
  ${QGCVisualizer} ${QGCPanel} ${QGCSetting} ${QGCWidget}
  ${QTransferFunction1D}  ${QProfile} ${QHoverPoints}  ${QCommon}
  ${CLOGS_LIB}/libclogs.so ${OPENGL_LIBRARIES} ${GLUT_LIBRARY}
  dl ${GLEW_LIBRARIES}
  )

这是编译器正在进行的命令。

[ 94%] Linking CXX executable test_build
/home/sansomk/anaconda/bin/cmake -E cmake_link_script CMakeFiles/test_build.dir/link.txt --verbose=1
/usr/bin/c++    -std=c++11   CMakeFiles/test_build.dir/3rdParty/bench/mfi.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCMain.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCSetting.cpp.o CMakeFiles/test_build.dir/infrastructures/QSetting.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCVisualizer.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o CMakeFiles/test_build.dir/infrastructures/QProfile.cpp.o CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o CMakeFiles/test_build.dir/templates/QCommon.cpp.o CMakeFiles/test_build.dir/utilities/QIO.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityCL.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityConsole.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityData.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityGL.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityMath.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityUI.cpp.o  -o test_build -rdynamic /opt/Qt/5.5/gcc_64/lib/libQt5OpenGL.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Xml.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Declarative.so.5.5.1 -lboost_system -lOpenCL /home/sansomk/code/cuda/clogs-install/lib/libclogs.so -lGLU /usr/lib/nvidia-352/libGL.so -ldl -lGLEW /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Script.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5.5.1 -Wl,-rpath,/opt/Qt/5.5/gcc_64/lib:/home/sansomk/code/cuda/clogs-install/lib:/usr/lib/nvidia-352 
CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o: In function `QGCPanel::QGCPanel(QWidget*)':
QGCPanel.cpp:(.text+0x1d3): undefined reference to `vtable for QGCPanel'
QGCPanel.cpp:(.text+0x1e5): undefined reference to `vtable for QGCPanel'
CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o: In function `QGCPanel::~QGCPanel()':
QGCPanel.cpp:(.text+0x339): undefined reference to `vtable for QGCPanel'
QGCPanel.cpp:(.text+0x34b): undefined reference to `vtable for QGCPanel'
CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o: In function `QList<QProfile*> QObject::findChildren<QProfile*>(QString const&, QFlags<Qt::FindChildOption>) const':
QGCPanel.cpp:(.text._ZNK7QObject12findChildrenIP8QProfileEE5QListIT_ERK7QString6QFlagsIN2Qt15FindChildOptionEE[_ZNK7QObject12findChildrenIP8QProfileEE5QListIT_ERK7QString6QFlagsIN2Qt15FindChildOptionEE]+0x3c): undefined reference to `QProfile::staticMetaObject'
CMakeFiles/test_build.dir/Graph_Cut/QGCVisualizer.cpp.o: In function `QGCVisualizer::QGCVisualizer(QWidget*)':
QGCVisualizer.cpp:(.text+0x1d3): undefined reference to `vtable for QGCVisualizer'
QGCVisualizer.cpp:(.text+0x1e5): undefined reference to `vtable for QGCVisualizer'
CMakeFiles/test_build.dir/Graph_Cut/QGCVisualizer.cpp.o: In function `QGCVisualizer::~QGCVisualizer()':
QGCVisualizer.cpp:(.text+0x25d): undefined reference to `vtable for QGCVisualizer'
QGCVisualizer.cpp:(.text+0x26f): undefined reference to `vtable for QGCVisualizer'
CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o: In function `QGCWidget::QGCWidget(QWidget*)':
QGCWidget.cpp:(.text+0x535): undefined reference to `vtable for QGCWidget'
QGCWidget.cpp:(.text+0x547): undefined reference to `vtable for QGCWidget'
CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o: In function `QGCWidget::~QGCWidget()':
QGCWidget.cpp:(.text+0x1f62): undefined reference to `vtable for QGCWidget'
QGCWidget.cpp:(.text+0x1f74): undefined reference to `vtable for QGCWidget'
CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o: In function `QGCWidget::initData(std::string const&)':
QGCWidget.cpp:(.text+0x3f40): undefined reference to `QGCWidget::signalPartitionInitialized(unsigned long, float*)'
QGCWidget.cpp:(.text+0x3f75): undefined reference to `QGCWidget::signalHistogramInitialized(unsigned long, float*)'
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::QHoverPoints(QWidget*, QHoverPoints::PointShape)':
QHoverPoints.cpp:(.text+0x58): undefined reference to `vtable for QHoverPoints'
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::eventFilter(QObject*, QEvent*)':
QHoverPoints.cpp:(.text+0x70b): undefined reference to `QHoverPoints::signalPointsChanged()'
QHoverPoints.cpp:(.text+0xc46): undefined reference to `QHoverPoints::signalPointsChanged()'
QHoverPoints.cpp:(.text+0xd25): undefined reference to `QHoverPoints::signalPointsChanged()'
QHoverPoints.cpp:(.text+0xe03): undefined reference to `QHoverPoints::signalPointsChanged()'
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::firePointChange()':
QHoverPoints.cpp:(.text+0x21bd): undefined reference to `QHoverPoints::signalPointsChanged(QPolygonF)'
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::load(std::string const&, QSize const&)':
QHoverPoints.cpp:(.text+0x2a62): undefined reference to `QHoverPoints::signalPointsChanged()'
CMakeFiles/test_build.dir/infrastructures/QProfile.cpp.o: In function `QProfile::QProfile(QWidget*)':
QProfile.cpp:(.text+0x43): undefined reference to `vtable for QProfile'
QProfile.cpp:(.text+0x55): undefined reference to `vtable for QProfile'
CMakeFiles/test_build.dir/infrastructures/QProfile.cpp.o: In function `QProfile::~QProfile()':
QProfile.cpp:(.text+0x575): undefined reference to `vtable for QProfile'
QProfile.cpp:(.text+0x587): undefined reference to `vtable for QProfile'
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::QTransferFunction1D(QWidget*)':
QTransferFunction1D.cpp:(.text+0x1d5): undefined reference to `vtable for QTransferFunction1D'
QTransferFunction1D.cpp:(.text+0x1e7): undefined reference to `vtable for QTransferFunction1D'
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::resizeEvent(QResizeEvent*)':
QTransferFunction1D.cpp:(.text+0x1364): undefined reference to `QTransferFunction1D::signalControlPointsChanged()'
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::showEvent(QShowEvent*)':
QTransferFunction1D.cpp:(.text+0x138e): undefined reference to `QTransferFunction1D::signalControlPointsChanged()'
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::slotUpdateTransferFunction()':
QTransferFunction1D.cpp:(.text+0x1558): undefined reference to `QTransferFunction1D::signalControlPointsChanged()'
CMakeFiles/test_build.dir/templates/QCommon.cpp.o: In function `QCommon::QCommon()':
QCommon.cpp:(.text+0x3b): undefined reference to `vtable for QCommon'
QCommon.cpp:(.text+0x4d): undefined reference to `vtable for QCommon'
CMakeFiles/test_build.dir/templates/QCommon.cpp.o: In function `QCommon::QCommon(QWidget*, QFlags<Qt::WindowType>)':
QCommon.cpp:(.text+0xf6): undefined reference to `vtable for QCommon'
QCommon.cpp:(.text+0x108): undefined reference to `vtable for QCommon'
CMakeFiles/test_build.dir/templates/QCommon.cpp.o: In function `QCommon::~QCommon()':
QCommon.cpp:(.text+0x181): undefined reference to `vtable for QCommon'
CMakeFiles/test_build.dir/templates/QCommon.cpp.o:QCommon.cpp:(.text+0x193): more undefined references to `vtable for QCommon' follow
collect2: error: ld returned 1 exit status
make[2]: *** [test_build] Error 1
make[2]: Leaving directory `/home/sansomk/code/cuda/JF-Cut/src/build'
make[1]: *** [CMakeFiles/test_build.dir/all] Error 2
make[1]: Leaving directory `/home/sansomk/code/cuda/JF-Cut/src/build'
make: *** [all] Error 2

1 个答案:

答案 0 :(得分:0)

我想我明白了。我通过创建目标链接库使事情变得复杂。我的代码运行不正常,但它是一个开始。我改为附加生成的moc和ui文件。

cmake_minimum_required(VERSION 3.0.0)

project(JF-Cut)


include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#elseif(COMPILER_SUPPORTS_CXX0X)
#   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
else()
        message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()


set(FIND_GLM ./FindGLM.cmake)

# Find the QtWidgets library
find_package(OpenCL REQUIRED)
find_package(OpenGL REQUIRED)
#find_package(GLM REQUIRED)
#include_directories(${GLM_INCLUDE_DIRS})
#link_directories(${GLM_LIBRARY_DIRS})
#add_definitions(${GLM_DEFINITIONS})

find_package(Qt5 COMPONENTS Core Gui
            OpenGL Xml Declarative
            Widgets 
            REQUIRED
            )
find_package(GLEW REQUIRED )
find_package(Boost COMPONENTS system)

#FIND_PATH(GLM_INCLUDE_DIR /usr/include)

# Interoperation with clogs
option(CLOGS " use clogs algorithms " OFF)
if (CLOGS)
  find_path(CLOGS_INCLUDE clogs/clogs.h)
  find_library(CLOGS_LIB clogs)
  include_directories(${CLOGS_INCLUDE})
  add_definitions(-DHAVE_CLOGS)
endif()

#set(CMAKE_AUTOMOC ON)
#SET(CMAKE_AUTOUIC ON)

add_definitions(-DUNICODE
                -DQT_LARGEFILE_SUPPORT
                -D__CL_ENABLE_EXCEPTIONS
                -D__CL_ENABLE_DEBUG_
                -DQT_CORE_LIB
                -DQT_GUI_LIB
                -DQT_DLL
                -DQT_XML_LIB
                -DNOMINMAX
                )

SET(CMAKE_INCLUDE_CURRENT_DIR ON)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

set(SOURCE
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCMain.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.cpp
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.cpp

)
set(HEADERS
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.h
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/cl/cl_stacktrace.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_msvc.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_gcc.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QError.h
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.hpp
  ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QStructure.h
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h
  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h
  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h
  ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.h
  ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.h
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_bfs_block.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_capacity.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_cut.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_excessflow.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_flow.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_tag.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_count_block.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_global_relabel.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_histogram.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_kmeans.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel_fast.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_feature.cl
  ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_preint.cl
)


QT5_WRAP_CPP(QGCPanel_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h )
qt5_wrap_ui(QGCPanel_ui_moc  ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCPanel.ui)

QT5_WRAP_CPP(QGCVisualizer_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h)
qt5_wrap_ui(QGCVisualizer_ui_moc  ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCVisualizer.ui)

QT5_WRAP_CPP(QGCWidget_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h )
QT5_WRAP_CPP(QTransferFunction1D_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h )
QT5_WRAP_CPP(QProfile_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h )
QT5_WRAP_CPP(QHoverPoints_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h )
QT5_WRAP_CPP(QCommon_hdr_moc  ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h )

LIST(APPEND SOURCE ${QGCPanel_hdr_moc} ${QCommon_hdr_moc}
    ${QGCVisualizer_ui_moc} ${QGCPanel_ui_moc}
    ${QGCVisualizer_hdr_moc} ${QGCPanel_hdr_moc}
    ${QGCWidget_hdr_moc}  ${QTransferFunction1D_hdr_moc}
    ${QProfile_hdr_moc} ${QHoverPoints_hdr_moc}
    ${QCommon_hdr_moc}
    )

include_directories(${Boost_INCLUDE_DIR}
                    ${OpenCL_INCLUDE_DIRS}
                    ${CLOGS_INCLUDE}
                    ${OPENGL_INCLUDE_DIRS} 
                    ${GLUT_INCLUDE_DIRS}
                    $(GLEW_INCLUDE_DIRS)
                    )

add_executable(test_build
                ${SOURCE} ${HEADERS}
                )
target_link_libraries(test_build
  Qt5::Widgets  Qt5::Xml Qt5::Core Qt5::Gui Qt5::OpenGL
  Qt5::Xml Qt5::Declarative
  ${GLM_INCLUDE_DIR} ${Boost_LIBRARIES}  ${OpenCL_LIBRARIES}
  ${CLOGS_LIB}/libclogs.so ${OPENGL_LIBRARIES} ${GLUT_LIBRARY}
  dl ${GLEW_LIBRARIES}
  )