使用 CMake 为 Qt Creator 设置 ITK 库我做错了啥?

Posted

技术标签:

【中文标题】使用 CMake 为 Qt Creator 设置 ITK 库我做错了啥?【英文标题】:What am I doing wrong with setting up ITK library for Qt Creator using CMake?使用 CMake 为 Qt Creator 设置 ITK 库我做错了什么? 【发布时间】:2015-03-02 08:56:51 【问题描述】:

我都试过了:

    我使用 CMake 构建了 ITK 库,然后在 .pro 文件中手动链接了我的 HelloWorld.cxx,如下所示:

INCLUDEPATH += "/folder1/folder2/folder3/ITK-build/lib"

LIBS += /folder1/folder2/folder3/ITK-build/lib/
-libITKBiasCorrection-4.7/
-libITKBioCell-4.7/
-libITKCommon-4.7/
-libitkdouble-conversion-4.7/
-libITKDICOMParser-4.7/
etc.

但是,当我在 Qt Creator 中构建它时,它无法识别 #include "itkImage.h",因此无法编译...

    我编写了一个 CMakeLists.txt 文件并在 Qt Creator 中使用 File > Open File 或 Project 调用它。我的 CMakeLists.txt 如下所示:

PROJECT(HelloWorld)
FIND_PACKAGE (ITK REQUIRED)
IF (ITK_FOUND)
INCLUDE( $ITK_USE_FILE )
ENDIF(ITK_FOUND)
ADD_EXECUTABLE(HelloWorld HelloWorld.cxx)
TARGET_LINK_LIBRARIES (HelloWorld /folder1/folder2/folder3/ITK-build/lib)

我的 HelloWorld.cxx 如下所示(来自 www.itk.org 的给定示例):

#include "itkImage.h"
#include "itkImageFileReader.h"
#include "itkGradientMagnitudeImageFilter.h"

int main( int argc, char **argv) 

typedef itk::Image <unsigned short,2> ImageType;
typedef itk::ImageFileReader <ImageType> ReaderType;
typedef itk::GradientMagnitudeImageFilter <ImageType,ImageType> FilterType;

ReaderType::Pointer reader = ReaderType::New();
FilterType::Pointer filter = FilterType::New();

reader->SetFileName(argv[1]);
filter->SetInput(reader->GetOutput() );
filter->Update();

return 0;


我做错了什么?感谢您的帮助。

【问题讨论】:

INCLUDEPATH += "/folder1/folder2/folder3/ITK-build/lib" 你确定itkImage.h 在这个文件夹中吗?通常 h 文件位于 include 文件夹中。 LIBS += /folder1/folder2/folder3/ITK-build/lib/这里使用目录而不是lib文件。 /folder1/folder2/folder3/ITK-build/lib 在这个文件夹中只有很多 .a 文件。我搜索了所有文件夹,ITK-build 文件夹中没有 include 文件夹。目录而不是lib文件是什么意思? Lib 是一个包含 .a 文件的目录。谢谢。 搜索itkImage.h不知道在哪里,如果在lib文件夹下,你的INCLUDEPATH参数就OK了。关于 LIBS - 它应该包含库名称而不是文件夹。 我在/folder1/folder2/folder3/ITK-build 文件夹中使用了find . ".h"。没有一个 .h 文件。我不明白这个。 ITK-build 看起来像一个只包含 makefile 的构建文件夹。 ITK 源文件应该在其他地方,你应该知道它们在哪里。可能是您的秘密文件夹 1、文件夹 2...文件夹。或者在系统范围的包含文件夹之一中,如果安装了 ITK 标头。 【参考方案1】:

我可能错了,但是...

您在ITK-build 文件夹中说没有include,而您只是在尝试获取build 文件夹中的内容。检查 ITK 是否有make install(我对 ITK 不熟悉,但我已经由目前管理 ITK 和 CMake 的 Kitware 成功构建和安装了 VTK)。否则,您将不得不在源和构建的文件夹之间进行组合才能获得所需的一切。

在大多数情况下,安装步骤会创建您在自己的项目中使用的软件的最终“映像”。此步骤将库文件、可执行文件(通常是示例和/或测试)、头文件等复制到安装路径。对于 ITK,它还应该放置所需的 cmake 模块,以便您可以实际使用 find_package(ITK)。一些开发人员喜欢先将所需的头文件复制到构建文件夹,然后再复制到安装路径。没有这样做的“标准”方式。

我还建议在if-check 中输出一些消息

IF (ITK_FOUND)
message("ITK here!!!")
INCLUDE( $ITK_USE_FILE )
ENDIF(ITK_FOUND)

为了查看include(...) 是否被执行。我的猜测是不是。

【讨论】:

以上是关于使用 CMake 为 Qt Creator 设置 ITK 库我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

反正有没有在Qt Creator 4.0中停止自动CMake执行?

为啥 CMake 在 Qt Creator 中过早结束?

qt creator 构建(build) 执行cmake 部署的区别?(未解决)

Cmake 无法在 qt creator/collect2 上编译简单的测试程序:错误:ld

使用 taglib 导致 Qt Creator 程序崩溃

使用 OpenCV 库(ubuntu)编译错误 Qt Creator