本章介绍在计算机系统上安装VTK。在Microsoft Windows上,可以安装预编译的vtk.exe,也可以从源码自行编译vtk软件。您可能希望了解系统架构,阅读会使编译过程更容易跟踪。如果遇到问题,可以联系vtkusers邮件列表。
VTK在许多不同的计算机平台上编译和运行。平台指的是操作系统、硬件配置和编译器的各种组合。由于可能存在大量的组合,VTK的可执行文件发布通常是不可行的。因此,要安装VTK,您必须编译并链接源代码以生成库和可执行文件。此处仅介绍Windows平台上C++版本的编译与开发。
在Windows下,有两种类型的VTK安装。一是可执行文件安装,它允许运行预编译的可执行文件。二是完整的源代码安装,需要编译VTK源代码(生成C++库)和VTK包装器代码(生成Java、Tcl和Python可执行文件)。在这两种类型的安装中,二进制安装要容易得多。源代码安装的优点是,您可以监控、调试和修改VTK代码。然而,即使您选择二进制安装,您仍然可以通过多种方式扩展VTK创建自己的类,使用运行时可编程过滤器,并在运行时用自己版本的类替换VTK类。
可执行文件安装
安装vtk.exe,运行安装程序VTK-X.X.X-win32.exe,它将显示一个安装GUI。安装程序文件名中的“X.X.X”表示用于编译该程序的VTK版本号。您也可以下载VTK源目录树和VTKData目录中相应的*.zip文件。当我们发布新版本的VTK时,我们会通过VTK.org上的链接提供下载页面。在vtkusers邮件列表上查看发布公告。
源码安装
要开发C++应用程序并扩展VTK,需要安装源代码。首先,您需要确保您的机器能够编译VTK源代码版本。您需要在计算机上安装一个C++编译器。本指南中的说明适用于VTK的Microsoft Visual Studio 2015或更高版本。我们还支持Borland C++编译器、Cygwin或MinGW下的gcc、NMake、Microsoft Visual C++free Edition。如果尚未安装C++编译器,必须先安装。
安装CMake. 要编译VTK,首先需要安装CMake。可以从http://www.cmake.org安装CMake安装包。
运行CMake.在安装了C++编译器、安装了CMake之后,就可以运行CMake了。要运行CMake,在“开始”菜单中的“程序”->“CMake”->“CMakeSetup”下应该有一个CMake条目。CMakeSetup.exe接口(图2-2)是一个简单的程序,允许您根据特定的机器和VTK所需的选项自定义编译。首先,您必须告诉CMakeSetup VTK的源代码目录,以及要将VTK二进制文件的目录。您可以使用浏览按钮或手动键入路径来指定这些目录。一旦选择了源目录和二进制目录,您应该单击Configure按钮。第一次单击配置按钮时,CMake将显示一个对话框,您可以从中选择用于编译VTK的生成系统。然后,CMakeSetup GUI将填充在CMake缓存中找到的变量和值列表。第一次运行时,所有变量都将显示为红色。红色表示缓存项是在上一个配置步骤中生成或更改的。
此时,您可以自定义VTK编译。例如,如果要启用VTK的Tcl包装功能,请在缓存值编辑器(cache values editor)中向下滚动到条目VTK_WRAP_TCL,然后单击该值将其从OFF切换到ON。之后,再次单击Configure按钮。这将导致大多数值变为灰色,任何新值都将显示为红色。如果您从二进制安装中安装了Tcl/Tk,任何新值则不应将NOFOUND作为值找到;如果需要,则必须使用CMake接口手动指定这些路径。要在CMake界面中设置任何值,请单击显示值的变量右侧。根据变量的类型,可能会有一个文件选择器、编辑框或下拉菜单,允许您编辑值。
VTK的一些重要的缓存值如下:
• BUILD_SHARED_LIBS —如果此布尔值设置为“是”,则将生成DLL或共享库。如果为否,则将编译静态库。默认为静态库。静态库在某种程度上更易于使用,因为在运行可执行文件时,它们不需要位于您的路径中。可执行文件将是自包含的。这对于基于VTK的应用程序的发布是首选。
• VTK_WRAP_TCL — 这决定了TCL包装器是否可用
• VTK_WRAP_PYTHON — 这决定了Python包装器是否可用
• VTK_WRAP_JAVA — 这决定了JAVA包装器是否可用
要获取CMake中任何变量的联机帮助,只需右键单击该值并选择“Help for Cache Entry”。大多数默认值应该是正确的。
继续单击Configure,直到不再有任何红色值,并且您对所有值都满意为止。此时,您可以单击“OK”按钮。这将导致CMake写出所选生成类型的生成文件。对于Microsoft,项目文件将位于您选择的二进制路径中。您可以选择Debug、Release、MinSizeRel(最小大小发布)和RelWithDebInfo(包含调试信息的发布)。您可以选择ALL_BUILD项目,并像编译任何其他Visual Studio项目一样对其进行编译。
编译VTK后,生成的所有库和可执行文件都将位于您指定给CMake的二进制目录中名为bin的子文件夹中(除非您更改了CMake中的EXECUTABLE_OUTPUT_PATH或LIBRARY_OUTPUT_PATH变量)。
(注意:不要使用MSVC++“Rebuild All”(全部编译)菜单选择来重编译源代码。这将删除所有CMakeLists.txt文件,这些文件将作为编译过程的一部分自动重新生成。MSVC随后将尝试重新加载这些文件,并将导致错误。相反,要重编译所有内容,请删除VTK二进制目录,重新运行CMake,然后执行正常编译。)
如果在编译VTK时启用了BUILD_SHARED_LIBS,客户端应用程序将需要在运行时定位并加载VTK DLL。您的应用程序可以通过多种不同的方式在运行时找到VTK DLL。每种方式都有利弊。最简单的方法是确保应用程序和VTK DLL存在于同一目录中。您可以将所有VTK DLL复制到应用程序的目录中,也可以使用自己应用程序的CMakeLists文件中的EXECUTABLE_OUTPUT_PATH将应用程序编译到VTK DLL编译的同一目录中。如果应用程序的可执行文件和VTK DLL存在于同一目录中,那么一切都应该正常工作。这些方法的“优点”是简单。缺点是:如果要复制VTK DLL,则需要确保在更新和重编译VTK时再次复制它们;如果您的应用程序的编译输出与VTK的编译输出混合在一起,那么在必要时可能很难确定哪个编译输出来自哪个项目。
另一种选择是修改PATH环境变量,以便应用程序可以找到VTK DLL,即使它们不在同一目录中。然而,在这个备选方案中,有几种方法可以完成任务。您可以设置一个命令提示符,其中仅在该命令提示符中修改路径,然后从那里启动应用程序,也可以更改用户的PATH环境变量或系统范围的PATH环境变量。建议更改用户或系统范围的PATH环境变量,除非您需要在同一台计算机上有多个不同的VTK版本。