最近在學習利用VTK三維編程,可是發現,在國內,相關的知識真的不多,在學習的過程當中,遇到了很大的困難,因此就想着把我學到的一些有用的知識寫出來,供之後的學習的人蔘考,我也是一個新手,有不到之處,但願讀者不吝賜教。這就是我寫這些的動機。如下的全部的所用的環境的操做系統是windows xp sp3. 編程
一,cmake簡介: windows
cmake 便是cmake - Cross-Platform Makefile Generator.是一個跨平臺的安裝(編譯)工具,能夠用簡單的語句來描述全部平臺的安裝(編譯過程),可以輸出各類各樣的makefile或者project文件。 工具
用cmake生成工程的時候主要的依據是CMakeLists.txt文件,其是一種腳本文件,有很簡單的語法,cmake就是根據該文件的相關指示生成相應的工程的。 學習
二,用cmake生成visual studio 2010 MFC工程的步驟和方法 ui
1,首先用visual studio 2010新建一個MFC工程,能夠是基於對話框的或者是基於文檔的。 this
2,將生成的工程的目錄下的<工程名>.sln和<工程名>.sdf 刪除,PS:不刪除也沒有什麼問題的,我創建的是工程的名字是VtkMFC,多文檔的。 操作系統
3,編輯CMakeLists.txt 文件,就是一個文本文件。 code
#cmake版本的最低要求 orm
cmake_minimum_required(VERSION 2.8) ci
#生成工程的名字
PROJECT(VtkMFC)#查找TVK的安裝路徑
FIND_PACKAGE(VTK)
IF(NOT VTK_DIR)
MESSAGE(FATAL_ERROR "Please set VTK_DIR.")
ENDIF(NOT VTK_DIR)
INCLUDE(${VTK_USE_FILE})INCLUDE("${VTK_DIR}/GUISupport/MFC/VTKMFCSettings.cmake")
IF(VTK_MFC_DELAYLOAD_VTK_DLLS)
VTK_MFC_ADD_DELAYLOAD_FLAGS(CMAKE_EXE_LINKER_FLAGS
vtkMFC.dll
vtkRendering.dll
vtkIO.dll
vtkFiltering.dll
vtkCommon.dll
)
ENDIF(VTK_MFC_DELAYLOAD_VTK_DLLS)#設置工程的源代碼的變量,就是剛纔生成的所有的MFC工程的所有的源文件
SET( VtkMFC_SRCS
ClassView.h
ClassView.cpp
FileView.h
FileView.cpp
MainFrm.h
MainFrm.cpp
OutputWnd.h
OutputWnd.cpp
Readme.txt
Resource.h
stdafx.h
stdafx.cpp
targetver.h
ViewTree.cpp
ViewTree.h
VtkMFC.h
VtkMFC.cpp
VtkMFC.rc
VtkMFCDoc.h
VtkMFCDoc.cpp
VtkMFCView.h
VtkMFCView.cpp
PropertiesWnd.cpp
PropertiesWnd.h
)
ADD_EXECUTABLE(VtkMFC WIN32 ${VtkMFC_SRCS})
IF(VTK_MFC_EXTRA_LIBS)
TARGET_LINK_LIBRARIES(VtkMFC ${VTK_MFC_EXTRA_LIBS})
ENDIF(VTK_MFC_EXTRA_LIBS)
TARGET_LINK_LIBRARIES(VtkMFC vtkMFC vtkRendering vtkIO vtkFiltering vtkCommon)
4,將CMakeLists.txt文件放在 …\VtkMFC\VtkMFC下,並創建文件夾bin,用來放置未來生成的工程文件。
5,用cmake生成工程
(1)運行cmake-gui,設置where is the source code爲放置CMakeLists.txt文件的文件目錄下,設置where to build the binaries爲剛纔創建的文件夾bin
(2)點擊configure,設置Specify the generator for this project 爲visual studio 2010,而後finished
(3)等到在下面的狀態欄上顯示configured,再點擊generate,待到下面的狀態欄上顯示generated,此時你的VtkMFC工程已經生成了。
(4)打開生成的MFC工程,直接編譯,你就能夠看到就和原來直接用visual studio 2010 直接生成的同樣的一個空白的視圖。
(5)在代碼中你就可使用VTK相關的庫類了
其實CMakeLists.txt還有其餘的寫法,就是在每一個文件的下面就寫一個CMakeLists.txt文件,這時候在第一個CMakeLists.txt中要用子文件夾的指令。
PS:還有就是我想解釋下,爲何咱們要用cmake來生成project,而不是直接配置,要知道任何的工程都是能夠白手起家的。這是由於VTK的庫類不少,僅僅靠人工是不容易搭建起來的,再就是即便搭建起來也要不少的時間。把寶貴的時間都浪費在毫無心義的事情上是不明智的選擇。
PS:再就是我學習cmake的一點感悟,用cmake生成project就是將全部的源文件都一個不拉的加入將要生成工程的源文件變量中,cmake知道怎麼使用這些文件,不用你本身操心,節省了咱們不少的時間,爲咱們帶來了很大的方便。