02-VTK编译安装
2、VTK编译安装
学习VTK最好是从下载VTK源码,然后自己编译开始。编译VTK是很简单的一件事情,最重要的是把准备工作做好。本章将会详细演示如何编译安装VTK。
2.1 编译VTK的准备工作
首先,你的计算机必须安装了VisualStudio 2008。如果采用其他集成开发环境(IDE)的,也必须先安装对应的IDE工具。编译64位版本的VTK之前,在安装Visual Studio 2008的时候,需要安装相应的64位组件。
其次,安装CMake。CMake下载地址:http://www.cmake.org/cmake/resources/software.html。Windows平台下只要下载文件cmake-2.8.6-win32-x86.exe即可。安装完CMake以后,运行界面如图2.1所示。
如果你在这之前没有听说过CMake,也不知道CMake如何使用,先不要着急。假如你实在比较急的话,可以先去Google或者百度一下CMake到底是个什么东西。
接着,如果你想自己编译VTK类库的帮助文档的话,还需要安装Doxygen工具。这一步不是必须的。
2.2 编译VTK的详细步骤
将下载到的VTK源码文件vtk-5.10.0.zip解压到某个磁盘下,比如,解压到D:\Toolkits\VTK\VTK-5.10。然后,建立一个空的文件夹,叫什么名字无所谓,只要不含有中文即可(为了让文件名看起来规整统一,新建的文件夹命名为VTK-5.10-bin,完整的路径为:D:\Toolkits\VTK\VTK-5.10-bin)。接着解压下载的vtkdata-5.10.0.zip文件,比如解压到:D:\Toolkits\VTK\VTKData (如果你没有下载vtkdata-5.10.0.zip文件,这一步也可以跳过)。
BUILD_EXAMPLES —默认是关闭的,如果打开这个选项,则会编译VTK例子,同时VTK编译所需的时间也较长,占用的磁盘空间也较大。对于初学者来说,建议把这个选项打开。
BUILD_SHARED_LIBS —默认是关闭的,意味着VTK是静态编译;如果打开这个选项,则是动态编译。
BUILD_TESTING —默认是打开的,表示会编译VTK的测试程序。VTK里每个类都有对应的程序文件对该类进行测试,对于初学者而言,可以关闭掉这个选项,后续如有需要,可以再打开此选项。
CMAKE_INSTALL_PREFIX —这个选项表示VTK的安装路径,默认的路径是:C:/Program Files/VTK。该选项的值可不作更改,按默认值即可。
VTK_USE_QT —是否使用Qt。在这个系列里,我们使用Qt作为GUI开发工具,所以勾上该选项。
BUILD_DOCUMENTATION —默认是关闭的,如果打开这个选项,则会编译VTK帮助文档,由于这个文档VTK已提供下载,所以可以不选。
定制每个选项的值以后,按“Configure”按钮,继续配置,CMake界面如图2.4所示。
由于在前一步里勾选了VTK_USE_GUISUPPORT,所以Configure以后会有新的红色选项VTK_USE_MFC出现,如果确定要使用MFC,需要把这个选项再次勾上。
图2.6打开VTK.sln后的界面,根据CMake的选项不同,该项目所包含的工程数目也不相同。该图显示的选择编译Example,没有选择编译Testing,一共有118个工程。
至此,就成功地编译并安装好了VTK。如果在编译安装VTK的过程中出现什么问题,可以在VTK users邮件列表上提问。
2.3 创建一个简单的VTK程序
在2.2一节里,我们详细讲解了如何编译、安装VTK,那么如何测试VTK到底有没有正确地安装,或者说怎么使用我们在前面编译出来的VTK函数库呢?
首先我们需要写一个CMakeLists.txt文件。前面的内容我们已经接触了CMake,也用CMake来配置过VTK工程,下面我们先看看CMake的介绍。
2.3.1 什么是CMake?
对于每个使用VTK的开发人员来说,必须认识的一个工具就是CMake,CMake的产生与发展也与VTK息息相关。以下一段内容摘自维基百科,主要是关于CMake的历史:
“CMake是为了解决美国国家医学图书馆出资的Visible Human Project项目下的 Insight Segmentation andRegistration Toolkit (ITK)软件的跨平台构建的需求而创造出来的,其设计受到了Ken Martin开发的pcmaker的影响。pcmaker 当初则是为了支援Visualization Toolkit (VTK)这个开源的三维图形和视觉系统才出现的,现在VTK也采用了CMake。”
从以上关于CMake的介绍可以知道,CMake其实就是一个跨平台的工程构建工具,可以根据不同的平台生成与平台相关的工程配置文件,比如Windows平台采用Visual Studio,则可以生成*.dsw/*.sln等项目文件。利用CMake可以管理大型的项目,VTK就是使用了CMake作为项目管理工具。同时CMake也简化了工程构建过程,只要给工程里的每个目录都写一个CMakeLists.txt,就可以生成出该工程的编译文件。CMake支持in-place构建(也就是生成的二进制文件跟源文件在同一个目录)和out-of-place构建(编译链接生成的二进制文件和源文件分别在不同的目录,前面我们讲VTK编译过程时就是采用这种构建方式)两种工程构建方式。
CMake有自己的语言和语法,用CMake对工程进行管理的过程,就是编写CMakeLists.txt脚本文件的过程,原则上要求工程里的每一个目录都包含一个同名的文件,而且这个文件的名字只能是:CMakeLists.txt。假如写成cmakelists.txt,由于Windows不区别文件名大小写,所以可以通过;但如果在别的平台,如Ubuntu,用CMake构建工程时就会提示找不到CMakeLists.txt,所以建议,不管在哪个平台下,都使用CMakeLists.txt这个文件名,注意大小写。
2.3.2 写一个简单的CMakeLists.txt脚本文件
为了测试是否成功安装了VTK,我们可以建立一个简单的VTK工程进行试验。本书里提到的所有示例都是用CMake进行管理,因此需要先写一个CMakeLists.txt文件。同样先新建一个文件夹(为便于本教程后续示例工程文件的管理,我们在前面VTK的安装目录里新建一个名为Examples的文件夹,Examples文件夹里存放本教程里提到的所有程序示例,每个程序示例的命名风格为XXX_ProjectName,XXX表示示例所在的章节编号,ProjectName为工程的名字,比如以下测试示例命名为:2.3.2_TestVTKInstall,在本教程完整的路径为:D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall,接下来的内容,你可以暂时不要急着问为什么,先按照描述步骤一步一步跟着试做一遍,后面的内容会逐行代码地解释,所以暂时你先“知其然”,后续的内容会让你“知其所以然”)。
然后在该目录下新建一个名为CMakeLists.txt的记事本文件。输入内容为:
cmake_minimum_required(VERSION2.8)
project(TestVTKInstall)
find_package(VTKREQUIRED)
include(${VTK_USE_FILE})
add_executable(${PROJECT_NAME}TestVTKInstall.cpp)
target_link_libraries(${PROJECT_NAME}vtkRendering vtkCommon)
接着在2.3.2_TestVTKInstall目录下新建一个cpp文件,名字名为TestVTKInstall.cpp,输入内容为:
#include"vtkRenderWindow.h"
#include"vtkSmartPointer.h"
intmain()
{
vtkSmartPointer<vtkRenderWindow> renWin= vtkSmartPointer<vtkRenderWindow>::New();
renWin->Render();
std::cin.get();
return 0;
}
也就是在D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall目录下有两个文件,分别为CMakeLists.txt和TestVTKInstall.cpp。打开CMake程序,在CMake的“Where is the source code”一栏输入路径:D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall,在“Where to build the binaries”一栏输入路径:D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall\bin,接着按“Configure”按钮,CMake会弹出图2.8的对话框。
图2.8CMake询问是否创建不存在的路径
选择“Yes”,然后再选择我们准备采用的编译环境“Visual Studio 2008Win64”,CMake开始配置工程。这个工程非常小,很快就配置完成,接着在CMake界面上会出现一些红色的选项,如果没有勾选“Advance”视图,默认显示出来的选项只有两项,分别是:CMAKE_INSTALL_PREFIX以及VTK_DIR,前一个选项我们已经知道是什么意思,VTK_DIR这个选项就是指向编译的VTK目录,即D:/Toolkits/VTK/VTK-5.10-bin,准确地说,这个路径就是VTKConfig.cmake文件所在的完整路径。对于CMAKE_INSTALL_PREFIX这个选项默认的值都是C:\Program Files\XXX (XXX指的就是你在CMakeLists.txt里的project(XXX)命令里填写的工程名字)。对于VTK_DIR,一般情况下,在你编译完VTK以后,用CMake配置VTK的工程时,会自动找到这个路径,如果CMake找不到,或者找到的不是你想要的VTK版本(假如你的计算机已经编译多个版本的VTK时),可以通过“Browse Build…”按钮选择需要的VTK编译路径,或者直接输入该路径。
设置完选项的值以后,再次“Configure”,直到没有红色的选项出现,最后“Generate”。完成以后打开在“Whereto build the binaries”一栏指定的路径D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall\bin,生成的文件如图2.9所示。
图2.9用CMake构建TestVTKInstall工程所生成的文件
打开我们熟悉的*.sln文件,即TestVTKInstall.sln,按键盘F7键开始编译工程,完成以后按F5运行,如果没有其他意外,会弹出图2.10的对话框。
图2.10Executable For Debug Session对话框
对于不熟悉VisualStudio 2008的初学者而言,会以为这是一种错误,其实只是项目默认的启动工程没有生成可执行文件而已。右击“Solution Explorer”里的“TestVTKInstall”工程,然后选择“Set as StartUp project”,再次F5,运行界面如图2.11所示。靠前的是VTK窗口,靠后的是控制台窗口,用CMake构建的工程,默认的都是带控制台窗口的,方便输出调试信息。
如果到这里,你的程序的运行结果也跟图2.11的类似,说明你的计算机已经成功安装了VTK。
图2.11示例2.3.2_TestVTKInstall运行界面
2.3.3 CMake的几个常用命令
为便于描述,我们把2.3.2节里的CMakeLists.txt的内容再列出来,并标上行号:
1: cmake_minimum_required(VERSION 2.8)
2: project(TestVTKInstall)
3: find_package(VTK REQUIRED)
4: include(${VTK_USE_FILE})
5: add_executable(${PROJECT_NAME} TestVTKInstall.cpp)
6: target_link_libraries(${PROJECT_NAME} vtkRendering vtkCommon)
第1行用到的CMake命令cmake_minimum_required,该命令完整的形式为:
cmake_minimum_required(VERSION
major[.minor[.patch[.tweak]]]
[FATAL_ERROR])
命令说明:用于指定构建工程时所需的CMake版本要求。参数VERSION,必须的关键字,且为大写,(注:CMake的命令名是不区分大小写的,为了统一描述,本书里所有的CMake命令都以小写书写,但是CMake命令的参数关键字,如VERSION,要求必须大写。)第二个参数为指定CMake的版本号,CMake最新的版本是2.8.10,2012年11月7日发布。第三个参数为可选参数,且为内置的关键字“FATAL_ERROR”。如果构建工程所用的CMake版本没有达到要求,配置过程就会弹出图2.12所示的错误提示信息,终止工程构建过程。
图2.12CMake构建工程时的错误提示信息
第2行,project命令。完整语法格式为:
project(projectname[CXX] [C] [Java])
用该命令指定工程名称,可指定工程支持的语言,支持语言的参数为可选。默认支持C\C++。该命令还隐含两个CMake变量:<projectname>_BINARY_DIR以及<projectname>_SOURCE_DIR,在这个例子里就是TestVTKInstall_BINARY_DIR以及TestVTKInstall_SOURCE_DIR。同时CMake也预定义了PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR变量,他们的值分别跟<projectname>_BINARY_DIR与<projectname>_SOURCE_DIR一致。为了统一起见,以后直接使用PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR分别表示工程的编译路径和源码路径,即这个例子里的“D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall\bin”和“D:\Toolkits\VTK\Examples\2.3.2_TestVTKInstall”,因为这样即使修改了工程名称,也不会影响这两个变量。
project命令的第一个参数还隐含了另外一个变量:PROJECT_NAME,我们在第5、6行分别引用了这个变量:${PROJECT_NAME}。注意:CMake使用“${变量}”的形式来获取该变量的值,也就是说,在这个例子里,${PROJECT_NAME}就相当于工程名:“TestVTKInstall”。
第3行find_package命令,完整语法格式为:
find_package( <package>
[version]
[EXACT]
[QUIET]
[[REQUIRED|COMPONENTS][components...]]
[NO_POLICY_SCOPE])
find_package命令用于搜索并加载外部工程,隐含的变量为<package>_FOUND,用于标示是否搜索到所需的工程。参数[REQUIRED]表示所要搜索的外部工程对本工程来说是必须的,如果没有搜索到,CMake会终止整个工程构建过程。对VTK为例,find_package命令搜索的就是VTK的配置文件VTKConfig.cmake。我们在VTK附带的例子目录里的CMakeLists.txt有以下的CMake脚本语句:
(摘自VTK-5.10\Examples\Tutorial\Step1\Cxx\CMakeListx.txt):
find_package(VTKREQUIRED)
if(NOTVTK_USE_RENDERING)
message(FATAL_ERROR"Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
endif(NOTVTK_USE_RENDERING)
其实这四行脚本的作用跟第3行实现的功能是一模一样的。关于find_package命令其他参数的意义可以参考CMake帮助文件(CMake安装目录下的doc文件夹下有文档文件)。
第4行include命令,完整的语法为:
include( <file|module>
[OPTIONAL]
[RESULT_VARIABLE<VAR>]
[NO_POLICY_SCOPE])
指定载入一个文件或者模块,如果指定的是模块,那么将在CMAKE_MODULE_PATH中搜索这个模块并载入,在本例中,指定的是VTK模块,则会在CMAKE_MODULE_PATH中搜索VTK模块并载入,变量CMAKE_MODULE_PATH指的是搜索CMake模块的目录,安装安CMake以后,在CMake的安装目录下(本机是安装在C:\Program Files (x86)\CMake 2.8\)可以找到CMake已经定义的模块,路径为:C:\Program Files (x86)\CMake2.8\share\cmake-2.8\Modules,在该目录下,有FindVTK.cmake文件。在这个文件里我们发现就有变量VTK_USE_FILE的说明信息。
VTK编译目录(D:/Toolkits/VTK/VTK-5.10-bin/)下的VTKConfig.cmake文件里我们可以看到变量VTK_USE_FILE定义为:
#The location of the UseVTK.cmake file.
SET(VTK_USE_FILE"D:/Toolkits/VTK/VTK-5.10-bin/UseVTK.cmake")
换言之,include (${VTK_USE_FILE})命令就是包含UseVTK.cmake文件。
set (projectname_srcsource1.cpp source2.cpp source3.cpp)
add_executable(projectname ${projectname_src})
add_executable(projectname source1.cpp source2.cpp source3.cpp)
第6行target_link_libraries命令,完整语法为:
target_link_libraries(<target>
[[debug|optimized|general]<item>] ...)
可能这个时候,你会问:为什么就知道要链接vtkRendering.lib这个文件呢?
如果你好奇心比较强的话,在VTKConfig.cmake这个文件里(用记事本打开),可以找到以下语句:
2.3.4 一个简单的VTK工程
回头再看看TestVTKInstall.cpp里的代码,同样标上行号:
示例2.3.2_TestVTKInstall |
1: #include"vtkRenderWindow.h"
2: #include"vtkSmartPointer.h"
3: int main()
4: {
5: vtkSmartPointer<vtkRenderWindow> renWin =vtkSmartPointer<vtkRenderWindow>::New();
6: renWin->Render();
7:
8: std::cin.get();
9: return 0;
10: }
第1、2行,包含头文件,因为要用到VTK里的vtkRenderWindow和vtkSmartPointer两个类,所以包含相应的头文件。VTK对类的命名都是以小写的vtk开头,每个类的关键字的首字母大写。
第5行,用智能指针定义了一个类型为vtkRenderWindow的对象,这是VTK的类实例化对象的基本方法。因为VTK里每个类的构造函数都定义为保护成员,因此你不能够用以下的语句来定义一个VTK对象:
vtkClassExampleinstance; //vtkClassExample这个类当然是不存在的,只是说明问题而已
要不然会提示如下的错误:
errorC2248: vtkClassExample:: vtkClassExample: cannot access protected memberdeclared in class vtkClassExample
所以,要构造VTK的对象可以用第5行的方法,或者用以下的方法:
vtkRenderWindow*renWin = vtkRenderWindow::New();
至于为什么,后面的内容会让你再“知其所以然”。
第6行,调用vtkRenderWindow里的方法显示并渲染VTK窗口。
第8行,没有其他特别的意义,只不过是让程序暂停下来,等待接受用户的输入,目的是想让你看看VTK窗口到底是长什么样子,你可以把它注释掉,看看它会不会一闪而过。
这个程序非常简单,就一个VTK窗口,其他什么也没有。但它确实是一个VTK的工程,至少使用了两个VTK类,调用了一个VTK的方法。在后面的章节里,你还会经常与这个窗口打交道。
2.4 本章小结
这章一开始我们为安装VTK作了非常充分的准备工作,了解了在编译安装VTK之前需要先安装哪些软件。然后,我们一步一步地演示了如何编译VTK,这个过程还是非常简单的。最后,安装完VTK,我们通过一个非常简单的VTK小程序——显示一个VTK窗口,来测试VTK是否成功安装。通过这个小程序,我们学习了CMakeLists.txt脚本的写法,并掌握了6个CMake命令,分别是:cmake_minimum_required、project、find_package、include、add_executable和target_link_libraries。
2.5 本章参考资料
[1]静态编译与动态编译:http://cau99.blog.51cto.com/1855224/358797
[2]CMake介绍:http://en.wikipedia.org/wiki/CMake
[3]CMake实践:http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf
==========欢迎转载,转载时请保留该声明信息==========
版权归@东灵工作室所有,更多信息请访问东灵工作室
教程系列导航:http://blog.csdn.net/www_doling_net/article/details/8763686
================================================
02-VTK编译安装相关推荐
- debian编译mysql_MySQL数据库之Debian 6.02下编译安装 MySQL 5.5的方法
本文主要向大家介绍了MySQL数据库之Debian 6.02下编译安装 MySQL 5.5的方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 环境 : Debian 6.02 ...
- 【转】VTK + QT + VS 编译安装配置
VTK Vtk,(visualization toolkit)是一个开源的免费软件系统,主要用于三维计算机图形学.图像处理和可视化.Vtk是在面向对象原理的基础上设计和实现的,它的内核是用C++构建的 ...
- rpm、yum、编译安装轻松管理centos7程序包
程序包管理器之RPM 一.rpm是什么 RPM 是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的.RPM ...
- CentOS6.3编译安装Nginx1.4.7 + MySQL5.5.25a + PHP5.3.28
2019独角兽企业重金招聘Python工程师标准>>> [准备工作] 01 #在编译安装lnmp之前,首先先卸载已存在的rpm包. 02 rpm -e httpd 03 rpm -e ...
- CentOS 6.4下编译安装MySQL 5.6.14
概述: CentOS 6.4下通过yum安装的MySQL是5.1版的,比较老,所以就想通过源代码安装高版本的5.6.14. 正文: 一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server ...
- mysql 单实例部署_MySQL 5.5单实例 编译安装
1.建立MySQL账号 首先以root登录到Linux,然后执行如下命令创建MySQL组及用户[root@loveyu home]# groupadd mysql [root@loveyu home] ...
- linux系统软件包分类,Linux软件包管理和编译安装
软件包介绍 开源软件最初只提供了.tar.gz的打包的源码文件,用户必须自已编译每个想在GNU/Linux上运行的软件.用户急需系统能提供一种更加便利的方法来管理这些软件,当Debian诞生时,这样一 ...
- CentOS 下安装编译安装MeMcached
下载最新的 memcached http://www.memcached.org/ 1.4.15 # tar -xvf memcached-1.4.15.tar.gz cd memcached-1.4 ...
- CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境
什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/Perl/Python组合成的动态Web应用程序和服务器,它是一组Web应用程序的基础 ...
最新文章
- 最新!全球学术排名出炉:21所中国大学位居世界100强
- android 检查网络连接状态实现步骤
- CentOS 7 快速部署 ELK
- Jackson 注解 -- 忽略空字段
- tryLock尝试获取锁
- 潢川高中2021高考成绩查询,潢川高中2020年秋季学期高一期中考试成绩分析
- 2020中国教育行业生存实录
- Golang程序性能分析(二)在Echo和Gin框架中使用pprof
- 确认了!华为P30 Pro包装盒曝光:后置四摄+水滴屏
- c语言case语句块,JavaScript使用Switch语句来选择将要执行的代码块
- AI人才有多贵?年薪三五十万美元起步,高校教授大量投身工业界
- bilibili缓存文件在哪里_Android——bilibili缓存视频合并教程[2.1]
- mac安装xbox驱动
- 银行卡号每输四位加空格,及银行卡的识别(此银行卡号是那个银行)
- (出海必备)Android三方登录之Google登录
- Android高德地图试用
- 淘宝去IOE,淘宝的量子恒道和数据魔方
- docker安装_使用docker在带有SSL的Nginx反向代理后面部署Quarkus或任何基于Java的微服务...
- 2021.03.30【2021省赛】模拟 比赛总结
- 【LaTeX应用】画个复杂的二叉树
热门文章
- 求一个容器的最值的索引_殊途同归——从一道经典的多元最值问题说开
- 项目管理ppt_「PPT」几近满分的项目管理PPT干货
- linux df是否分区,Linux中df命令查询磁盘信息和fdisk命令分区的用法
- mysql临时表是什么意思_来谈谈MySQL的临时表,到底是个什么东西,以及怎么样产生的...
- mysql innerdb 索引_mysql innodb索引原理
- odbc java 驱动程序_Java访问数据库程序,提示[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序错误...
- 倍福ads通讯软件_软件定义汽车“性感”吗?东软睿驰有自己的答案
- 自定义cell中自定义的button的点击事件
- (七)Servlet过滤器
- [lua]判断nginx收到的是否json