在搭建vtk的基本环境之后,接下来就是学习过程了。但是自己在第一个例子就出现了一堆问题,这里贴出来解决之道,先填一波坑再说。
1. 问题介绍
我是按照:东灵VTK教程系列导航 学习的。
按照上面的介绍,首先编写第一个cmake编译vtk的例子:
首先是cmake代码:
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)
然后是cpp代码:
#include <vtkRenderWindow.h>
#include <vtkSmartPointer.h>
int main()
{
vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
renWin->Render();
std::cin.get();
return 0;
}
按照作者的例子: 在编译的时候就出现了一个弹窗,上面的内容是
error configuration process, project files may be invalid
2. 问题解决:
首先按照这篇文章解决Cmake VTK时出现问题:error configuration process, project files may be invalid的方法并没有起到作用。这里稍微介绍一下这种方法。
2.1 没有使用CMake选择对应机器上的VS版本。
用Cmake配置生成对应的VS解决方案时,需要对应正确的vs版本。这里和之前安装VTK时候使用的版本一致。
2.2 没有清理之前错误缓存
|
点击左上角的file->delete cathe
清理一下缓存。
2. 3 cmake list程序编写问题
按照上面的介绍并没有解决我们的问题,那只好继续google了。我们在stackoverflow几篇帖子上看到我们类似的问题。
- VTK + Cmake -> USE_VTK_RENDERING erro
- CMake error: ‘target is not built by this project’
- Cmake link liabray target link error
- CMake OpenCV Cannot Specify Link Libraries
按照上面介绍,和我们的CMakeLists代码做出对比,我们经过一句一句代码的尝试,最后发现一个非常隐蔽的错误,就是我们需要在CMakeLists中一定需要注意打空格!!!
具体来说,
- 就是第一行:
VERSION
和2.8
有一个空格。 - 第三行:
VTK
和REQUIRED
有一个空格 - 第9行,
TestVTKInstall.cpp
之前有一个空格。 - 第11行,我们将之前的
vtkRendering vtkCommon
修改成${VTK_LIBRARIES}
另外之前还有一个空格。如果单纯的加一个空格,虽然cmake是没有什么错误的。但是之后再vs编译的时候,会出现如下错误,所以修改就好了。
最后CMakeLists.txt代码:
cmake_minimum_required(VERSION 2.8)
project(TestVTKInstall)
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})
add_executable(${PROJECT_NAME} TestVTKInstall.cpp)
target_link_libraries(${PROJECT_NAME} ${VTK_LIBRARIES})
3. 在vs运行
在cmake没有错误之后,我们configure, 然后generate。以管理员的方式打开vs2017。打开我们编译好的文件。首先
首先我们编译ALL_BUILD
点击F7,或者是生成就可以了。如果没有错误,右键TestVTKInstall将其设置为启动项,然后点击F5,或者运行就可以输出正确的结果了。
Over
遇到问题一个个解决就好了。