使用 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执行?
qt creator 构建(build) 执行cmake 部署的区别?(未解决)