系列文章(一)|VS2013-Qt5.5.1-动态编译-VTK7.0.0

这是系列文章的第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]即可.

本文分享自微信公众号 - 点云PCL(dianyunPCL)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券