【问题标题】:What am I doing wrong with setting up ITK library for Qt Creator using CMake?使用 CMake 为 Qt Creator 设置 ITK 库我做错了什么?
【发布时间】:2023-03-21 21:40:01
【问题描述】:

我都试过了:

  1. 我使用 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",因此无法编译...

  1. 我编写了一个 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 标头。

标签: c++ cmake qt-creator 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(...) 是否被执行。我的猜测是不是。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 2020-05-31
    • 1970-01-01
    • 2018-10-16
    • 2014-03-31
    • 2012-08-20
    相关资源
    最近更新 更多