使用Cmake搭建Qt+VTK工程(順便推薦超好Cmake入門教程一本)

組內的項目要從MFC+OpenGL向Qt+VTK遷移。最近的任務是先把一個小模塊進行嘗試性遷移。


配置環境過程中發現Qt+VTK的項目配置起來十分麻煩,於是google之,發現使用CMake這個工具可以大大簡化我們的配置過程。可惜我從沒接觸過Cmake,於是再次google之,發現搜索到的相關教程都很是簡陋,不繫統也不實用。後來在機緣巧合之下找到了一份《Cmake 實踐》(http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf),真是一本很好的快速入門教程,在此感謝作者。


花幾分鐘快速過一下,基本就可以動手了。結合網上的代碼片段,我終於寫出了自己的第一個Cmake腳本——可以把Qt和VTK結合起來,同時也展示瞭如何使用Cmake引入第三方庫。腳本貼在這裏供大家參考:

# This script help you to generate a project which combines VTK and Qt
# Author: Wei Wang
# Date: 2012/2/18

cmake_minimum_required(VERSION 2.8)
 
PROJECT(LayoutProto)
 
FIND_PACKAGE(VTK)
INCLUDE(${VTK_USE_FILE}) # include UseVTK.cmake
 
FIND_PACKAGE(Qt4 REQUIRED)
INCLUDE(${QT_USE_FILE})  # include UseQt4.cmake
 
# support for out-of-source build
INCLUDE_DIRECTORIES(
  ${CMAKE_CURRENT_BINARY_DIR} #this is where ui_SimpleViewUI.h is generated
  ${CMAKE_CURRENT_SOURCE_DIR}
)
 
# Set your files and resources here

# 1. Set path for each kind of files
SET(SourceFilesPath ${PROJECT_SOURCE_DIR}/src)
SET(UIFilesPath ${PROJECT_SOURCE_DIR}/ui)
SET(HeadersFilesPath ${PROJECT_SOURCE_DIR}/inc)

# 2. Add items into current project
SET(SourceFiles main.cpp mainwindow.cpp AutoNDE2DPanel.cpp rawdatapanel.cpp)
SET(UIFiles mainwindow.ui)
SET(HeadersFiles mainwindow.h AutoNDE2DPanel.h rawdatapanel.h)

# 3. Concatenate items and their paths
FOREACH(SrcFile ${SourceFiles})
    SET(SimpleViewSrcs ${SimpleViewSrcs} ${SourceFilesPath}/${SrcFile})
ENDFOREACH(SrcFile)
#MESSAGE(STATUS "Files: " ${SimpleViewSrcs})

FOREACH(UIFile ${UIFiles})
    SET(SimpleViewUI ${SimpleViewUI} ${UIFilesPath}/${UIFile})
ENDFOREACH(UIFile)
#MESSAGE(STATUS "UIFlie: " ${SimpleViewUI})

FOREACH(HeaderFile ${HeadersFiles})
    SET(SimpleViewHeaders ${SimpleViewHeaders} ${HeadersFilesPath}/${HeaderFile})
ENDFOREACH(HeaderFile)
#MESSAGE(STATUS "Headers: " ${SimpleViewHeaders})

# Wrap items to pass them to qmake
QT4_WRAP_UI(UISrcs ${SimpleViewUI})
QT4_WRAP_CPP(MOCSrcs ${SimpleViewHeaders} )
 
SOURCE_GROUP("Resources" FILES
  ${SimpleViewUI}
)
 
SOURCE_GROUP("Generated" FILES
  ${UISrcs}
  ${MOCSrcs}
)
 
# Construct an executable
ADD_EXECUTABLE( LayoutProto ${SimpleViewSrcs} ${UISrcs} ${MOCSrcs})

# Link VTK libs and Qt libs to the executable
TARGET_LINK_LIBRARIES( LayoutProto QVTK )

# Add some 3rd party libs
SET(RDTiffUtilLibPath_Release ${PROJECT_SOURCE_DIR}/lib/release)
SET(RDTiffUtilLibPath_Debug ${PROJECT_SOURCE_DIR}/lib/debug)

SET(RDTiffUtilLib_Release recutil.lib rdtutil.lib rdtiff.lib)
SET(RDTiffUtilLib_Debug recutil.lib rdtutil.lib rdtiff.lib)

# For release mode
FOREACH(LibName ${RDTiffUtilLib_Release})
    TARGET_LINK_LIBRARIES( LayoutProto optimized ${RDTiffUtilLibPath_Release}/${LibName})
ENDFOREACH(LibName)

# For debug mode
FOREACH(LibName ${RDTiffUtilLib_Debug})
    TARGET_LINK_LIBRARIES( LayoutProto debug ${RDTiffUtilLibPath_Debug}/${LibName})
ENDFOREACH(LibName)

我在Cmake方面也還是菜鳥,以上代碼僅僅是達到能用的地步而已,缺點肯定是很多了,請各位高手多多指點!
發佈了35 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章