最近在学习利用VTK三维编程,但是发现,在国内,相关的知识真的很少,在学习的过程中,遇到了很大的困难,所以就想着把我学到的一些有用的知识写出来,供以后的学习的人参考,我也是一个新手,有不到之处,希望读者不吝赐教。这就是我写这些的动机。以下的所有的所用的环境的操作系统是windows xp sp3.
一,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知道怎么使用这些文件,不用你自己操心,节省了我们很多的时间,为我们带来了很大的方便。