Cmake编译 VTK时出现问题:error configuration process, project files may be invalid的解决方法

xiaoxiao2025-04-05  17

在搭建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 erroCMake error: ‘target is not built by this project’Cmake link liabray target link errorCMake 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

遇到问题一个个解决就好了。

转载请注明原文地址: https://www.6miu.com/read-5027551.html

最新回复(0)