这是系列文章的第1/7篇
1. VS2013-Qt5.5.1-动态编译-VTK7.0.0
2.VS2013-MPI v7-静态编译-Boost1.6.1
3.VS2013-编译-Qhull2015.2
4.VS2013-编译-FLANN1.8.4
5.VS2013-编译-Eigen3.2.8
6.OpenNI2.2.0.33下载和安装
7. VS2013-Qt5.5.1-VTK7.0.0-Boost1.6.1-Qhull2015.2-FLANN1.8.4-Eigen3.2.8-OpenNI2.2.0.33-动态编译-PCL1.8.0
此次编译VTK7.0.0,采用VS2013,在X64下编译debug和release两个版本,所依赖的Qt版本是5.5.1(msvc2013_64).
01
前期准备·
一、下载VTK
1.从VTK官网下载源码包(https://www.vtk.org/download/),本文下载的是VTK-7.0.0.zip.
两个压缩文件内容应该是一样的,只不过zip是全平台通用(windows也能解压),tar.gz是linux下通用的压缩文件格式(windows下安装解压软件后也能解压).
2.解压VTK,本文解压到下列路径:
二、下载CMake
1.从CMake官网下载CMake(https://cmake.org/download/),本文下载的是cmake-3.5.2-win32-x86.zip.
2.解压CMake,本文解压到下列路径:
三、下载Qt
从Qt官网下载并安装Qt5.5.1 for vs2013(https://www.qt.io/download), Online Installer或者Offline Installer都可以.它们俩是对Qt的完全安装(包括源码),如果只需要源代码,该页面也提供了下载,自行寻找.
本文安装到下列路径:
注意: 如果电脑中安装了多个版本的Qt,最好只把需要依赖的Qt版本加入环境变量.否则CMake会自动搜索,并自动设置目录,如果目录不是期望的,手动改很烦.
本文把Qt加入了环境变量,即path = D:\Qt\5.5.1\5.5\msvc2013_64\bin;
总之,CMake会自动在电脑中搜索并设置很多东西,如果你想引导CMake的自动搜索,最好的办法就是添加环境变量.还有一种方法是CMake界面,在执行Configure前,手动Add Entry.
02
编译VTK
Setp1
打开cmake-gui.exe,它位于cmake-3.5.2-win32-x86\bin目录下.
Step2
1.设置源码路径(就是包含"CMakeLists.txt"的路径):
你源码解压至哪里,就设置哪里.如图:
2.设置构建路径:
CMake会在该路径下,生成solution(针对VS),打开sln就可以编译出结果,所有编译结果都在该目录下.如图:
Step3
勾选CMake界面上的Grouped和Advanced, Grouped是对配置分组,Advanced是显示高级配置.这两个复选框,什么时候点击都可以.
Step4
点击Configure.
CMake要求选择编译器,根据实际需求选择即可,本文选择如下,然后CMake开始生成配置.
Step5
等待CMake把配置生成完毕后,就需要对CMake自动生成的配置进行修改.所有红色显示的配置,都是需要用户确认的配置或者有问题的配置,在默认配置上进行如下修改:
1.BUILD_SHARED_LIBS 选中,构建动态库版本,即既有lib,又有dll.
2.VTK_Group_Qt 选中,使用Qt.
3.CMAKE_INSTALL_PREFIX 修改为D:/VTK/ 7.0.0/msvc2013_64
这个目录可以自行指定,当VTK编译完成后,安装时,会将VTK安装到指定的目录,强烈建议修改此目录.
4.
INSTALL_BIN_DIR 修改为D:/VTK/7.0.0/msvc2013_64/bin
INSTALL_INC_DIR 修改为D:/VTK/7.0.0/msvc2013_64/include
INSTALL_LIB_DIR 修改为D:/VTK/7.0.0/msvc2013_64/lib
INSTALL_MAN_DIR 修改为D:/VTK/7.0.0/msvc2013_64/share/man
INSTALL_PKGCONFIG_DIR 修改为D:/VTK/7.0.0/msvc2013_64/share/pkgconfig
上面配置修改完后,点击Configure,会报错,点ok即可.
Step6
VTK_QT_VERSION 修改为5
修改完之后, 点击Configure.
Step7
下面7项,如果环境变量正确,应该自动填好了,不需要修改.
QT_QMAKE_EXECUTABLE 修改为D:/Qt/5.5.1/5.5/msvc2013_64/bin/qmake.exe
Qt5_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5
Qt5Core_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Core
Qt5Gui_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Gui
Qt5Sql_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Sql
Qt5UiPlugin_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5UiPlu
gin
Qt5Widgets_DIR 修改为D:/Qt/5.5.1/5.5/msvc2013_64/lib/CMake/Qt5Widgets
直接点击Configure.
Step8
点击Add Entry
Name:CMAKE_DEBUG_POSTFIX
Type:STRING
Value:d
Description:可以为空
如下图:
这样可以让debug版本编译出二进制文件,带有后缀d.以便和release版本编译出的二进制文件相区分.强烈建议这么做.
添加之后,点击Configure.
Step9
如果还有配置是红色,点击Configure,直到没有配置为红色.
之后点击Generate.
Step10
生成完成之后,CMake就可以关了.找到构建目录下的\GUISupport\Qt\PluginInstall.cmake文件,打开它,把第五行:
SET(VTK_INSTALL_QT_PLUGIN_FILE"QVTKWidgetPlugin.dll")
修改为:
IF(BUILD_TYPE MATCHES Debug)
SET(VTK_INSTALL_QT_PLUGIN_FILE "QVTKWidgetPlugind.dll")
ELSE()
SET(VTK_INSTALL_QT_PLUGIN_FILE "QVTKWidgetPlugin.dll")
ENDIF()
然后保存,并关闭文件.
不修改,debug下install报错,但如果你能理解编译过程,并看懂错误,这个错误其实没什么大不了.
同样是为了区分D版和R版的dll.D版带有后缀d.
Step11
用VS打开构建目录下的VTK.sln解决方案.
等待IDE解析,解析完成后,状态栏会显示就绪.解析过程比较耗时,耐心等待VS解析完成.
当然,可以不用等待解析完成,直接构建.
*如果装有VX等插件,建议打开VTK.sln之前禁用VX插件,否则解析可能会很慢,VS可能卡死.
Step12
确保ALL_BUILD为启动项目(如果没出问题,它应该就是启动项目).
选择ALL_BUILD项目,点击生成
编译过程比较耗时,具体时间,取决于电脑性能(主要是CPU,然后是硬盘).
Step13
Step12生成成功之后,就可以安装VTK了,右击INSTALL项目,选择仅生成INSTALL.然后就开始安装VTK了,安装完成,就可以在之前设置的prefix目录下看到安装之后的VTK.
Step14
如果Step12-13生成的是debug版本,切换成release,重复12-13即可生成并安装release版本.
*建议,要么只安装R版;要么先安装D版,再安装R版.因为后安装的版本,会覆盖同名的文件.
注意
CMake的generate依赖编译器默认设置,对VS2013来说.如果你之前对全局属性表做过设置,建议恢复原状,否则可能出现莫名其妙的错误.禁用语言扩展必须为否.如图:
编译器设置恢复默认,最简单的办法,就是把自定义的属性页全部移除,VS自带属性页全部恢复默认.
VTK安装目录分析
注意:下面说明,在没有编译test时成立,编译了test后dll,lib,pdb数量会多出一些.
[bin]文件夹中,D/R版本各有109个dll和2个exe.
dll一一对应,但内容不一样.
exe同名,但内容不一样.
[lib]文件夹中,D/R版本各有109个动态lib和1个静态lib.
vtksqlite-7.0.lib和vtksqlite-7.0d.lib是静态库,没有dll,也没有为它生成pdb.
lib一一对应,但内容不一样.
[lib]文件夹中,有个CMake文件夹,D/R版本的内容完全一样.
除了VTKTargets-debug.CMake和VTKTargets-release.CMake.
[include]文件夹中,D/R版本的内容完全一样.
CMake文件夹中,D/R版本的内容完全一样.
plugins文件中,D/R版本都有一个designer文件夹,各有一个dll.
dll一一对应,但内容不一样.Qt设计师真正需要的是R版本dll.
share文件中,D/R版本的内容完全一样.
install在复制内容时,如果检测到同名且内容一样的文件,直接跳过,不复制;
检测到同名但内容不一样的文件,覆盖;
未检测到同名文件,复制.
install不会复制pdb文件,如果需要pdb,则只能手动复制.
D版本生成的pdb中,除了那109个dll对应的pdb,还有额外的6个pdb,分别是
lproj.pdb
QVTKWidgetPlugind.pdb
[vtkEncodeString-7.0.pdb]
vtkH5detect.pdb
vtkH5make_libsettings.pdb
[vtkHashSource-7.0.pdb]
其中QVTKWidgetPlugind.pdb对应的是QVTKWidgetPlugind.dll,它是Qt设计师的插件.
另外5个PDB对应的都是exe,其中[]括起来的pdb对应的exe被复制到[bin]目录下了.
所以如果真的需要使用pdb,仅仅复制那109个dll对应的pdb到安装目录的[bin]即可.