【本节对应原书中的第9页至第10页】
这一章将详细介绍安装VTK的步骤。安装过程的难点依赖于若干因素。Windows平台下可先安装二进制文件vtk.exe,然后利用它可以运行Tcl脚本文件。使用Python和Java语言开发VTK应用程序时,可以链接VTK库到相应的应用程序中;而在其他非Windows平台下使用VTK时,则必须通过VTK源码来编译VTK(因为要保证VTK在不同平台下预编译文件的实时更新是一件工作量非常庞大的事情,所以我们力求让VTK在各种平台下的编译尽可能的简单)。如果你选择的是从源代码编译VTK,在多核处理器系统中可能只需花费半小时左右或者更快的时间;如果是内存有限的硬件系统,也许就要花费几个小时甚至更长的时间才能编译完成。另外,编译VTK所需时间的长短也取决于你要封装多少种解释性语言到VTK的C++内核中以及你的系统配置。
读者可以参考第三章“VTK系统架构”,这部分内容是关于VTK系统架构的概览,可能有助于你对接下来的编译过程的理解。如果在VTK的编译安装过程中遇到什么问题,读者可以在vtkusers邮件列表提问(参考第一章“其他资源”一节)。
2.1 概览
VTK可以在不同的计算机平台下编译和运行。对于不同的平台,我们必须要考虑不同的操作系统、硬件配置以及编译器等要素,由于这些要素的组合比较多,所以发布针对不同平台、编译环境等都可使用的VTK二进制版本的做法显然是不可取的。因此,建议通过VTK源代码来编译安装VTK,通过编译源代码生成VTK库文件以及可执行程序。
本章首先对CMake作一简要介绍,CMake是一个跨平台的工程构建工具,可用于各种操作系统配置编译环境。接着,本章内容根据不同类型的操作系统分为两个部分:Windows平台和UNIX平台的VTK安装(对于Macintosh OSX或Linux平台,可以参考UNIX平台的进行安装)。读者只需要选读相应的平台安装步骤说明进行VTK的编译安装。VTK不支持早期版本的Windows系统,如Windows 3.1等,同样也不支持版本老于OSX 10.2 (Jaguar) 的Macintosh操作系统。
2.2 CMake
CMake是一个开源的、跨平台的用于配置、管理工程构建过程的工具。简单地说,平台独立文件(CMakeLists.txt)描述了构建工程的一些细节以及所要依赖的库文件等。CMake运行时,它会根据所运行的操作系统以及编译器等环境创建本地编译文件。比如,在Windows平台下,使用Microsoft Visual Studio集成开发环境,CMake会自动生成项目(Solution)文件和工程(Project)文件。而在UNIX平台下,则是创建了makefile文件。通过这种方式,可以非常容易地在任何计算机平台下编译VTK,以及使用各种开发工具(如Editors, Debuggers, Profiles, Compilers等)。想进一步了解更多关于CMake的内容可以访问http://www.cmake.org,或者参考Kitware公司出版的《Mastering CMake》一书。最新版本的CMake可以从CMake网站下载。
运行CMake时,需要指定三方面的信息:使用何种编译器,源文件目录的路径和编译目录的路径。编译目录是指编译过程中产生的目标代码、库文件以及二进制文件等存放的位置。CMake会从源文件目录中读取最顶层的CMakeLists.txt文件,接着在编译目录中生成缓存文件CMakeCache.txt。值得注意的是,CMake可以很好地处理复杂的源文件目录结构,源文件目录树下的每个子目录里可以都放有一个CMakeLists.txt文件。
一旦这些基本的信息都设置好,用户就可以开始“配置”(Configure)。CMake会在这一步读取最顶层的CMakeLists.txt文件,以确定系统配置,定位系统资源以及遍历源文件目录中的每一层子目录。CMake运行时,会出现很多控制工程构建过程的CMake变量和标志(称为CMake的缓存条目“CMake Cache Entries”)。“配置”完成以后,这些条目会显示在CMake的GUI界面上,条目的显示风格可以通过CMake GUI上的视图选项进行切换。当改变某个条目的值时,要重新进行“配置”。直到所有的CMake条目都配置完成以后,就可以进入下一步,即“生成”(Generate)。“生成”阶段会根据指定的编译器生成项目文件、工程文件或者Makefiles文件。
接下来的两部分内容(Windows和UNIX)详细介绍了在不同平台下CMake的运行步骤。注意,上面提到的步骤对所有的平台都是适用的。CMake界面可能会依据不同的操作系统有所不同。但是CMake-gui从CMake 2.6开始及后续版本都是基于Qt的,所以在不同的平台下CMake界面都是大同小异的。建议选择安装CMake的预编译二进制文件,无须从CMake源文件中编译安装,除非你想要研究CMake的源代码。