1. 程式人生 > >cmake生成利用VTK庫類的visual studio 2010 MFC工程

cmake生成利用VTK庫類的visual studio 2010 MFC工程

一,cmake簡介:

cmake 即是cmake - Cross-Platform Makefile Generator.是一個跨平臺的安裝(編譯)工具,可以用簡單的語句來描述所有平臺的安裝(編譯過程),能夠輸出各種各樣的makefile或者project檔案。

用cmake生成工程的時候主要的依據是CMakeLists.txt檔案,其是一種指令碼檔案,有很簡單的語法,cmake就是根據該檔案的相關指示生成相應的工程的。

二,用cmake生成visual studio 2010 MFC工程的步驟和方法

1,首先用visual studio 2010新建一個MFC工程,可以是基於對話方塊的或者是基於文件的。

2,將生成的工程的目錄下的<工程名>.sln和<工程名>.sdf 刪除,PS:不刪除也沒有什麼問題的,我建立的是工程的名字是VtkMFC,多文件的。

3,編輯CMakeLists.txt 檔案,就是一個文字檔案。

#cmake版本的最低要求

cmake_minimum_required(VERSION 2.8)

#生成工程的名字 
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知道怎麼使用這些檔案,不用你自己操心,節省了我們很多的時間,為我們帶來了很大的方便