Mitk教程案例项目编译

发布于:2025-07-28 ⋅ 阅读:(15) ⋅ 点赞:(0)

记录自己在学习MITK过程中成功运行官网教程案例的过程。

前提:成功编译好MITK源码,明确自己是构建类型是哪个(如 Debug 或 Release)

目标:想在自己的项目中运行官网的教程案例Step系列,而不是直接cmake配置中添加了相            关插件,在mitk源码中运行其step系列教程。

项目配置:MITK-v2024.12-windows-x86_64 :release版本成功编译,生成了依赖库

                      vs 2022

                      Qt 6.8.3

目录

Cmakelist

生成构建文件

编译和构建

运行


Cmakelist

1. 在F:\MITK-2024.12\MITK\Examples\Tutorial中找到教程StepX系列的源代码之后,将其复制到自己项目目录,新建一个CMakeLists.txt文件配置文件:

2. 打开CMakeLists.txt文件,查找 Qt6 的核心库模块,尤其是 GUI 所需的 Core、Widgets、OpenGL 模块。

find_package(Qt6 REQUIRED COMPONENTS Core Widgets OpenGL)

3. 然后把找到的 Qt 模块头文件路径、库路径等引入。

include_directories(${Qt6_INCLUDE_DIRS})

4. 之后根据Step1缺失的头文件,添加头文件搜索路径,具体内容根据自己目录设定,使打开编译好的step.cpp不再出现头文件找不到错误:

include_directories(F:/MITK-2024.12/MITK/Modules/QtWidgets/include)
include_directories(F:/MITK-2024.12/MITK/Modules/Log/include)
include_directories(F:/MITK-2024.12/MITK/Modules/Core/include)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/src/util)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/src/module)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/src/service)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/include)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/QtWidgets)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/Log)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/CppMicroServices/core/include)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/CppMicroServices/include)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/Core)
include_directories(F:/MITK-2024.12/build/MITK-build)
include_directories(F:/MITK-2024.12/build/ep/include)
include_directories(F:/MITK-2024.12/build/ep/include/vtk-9.3)
include_directories(F:/MITK-2024.12/build/ep/include/ITK-5.4)
include_directories(E:/QT/6.8.3/msvc2022_64/include)
include_directories(E:/QT/6.8.3/msvc2022_64/include/QtOpenGLWidgets)

5. 查找并收集所有 .lib 静态库文件,这里有两种方式:

  1. file(GLOB ...) + target_link_libraries():自动查找并收集所有 .lib 静态库文件,保存在变量 MITK_LIBS 中。
  2. 硬编码使用target_link_directories()+target_link_libraries()链接具体库名:需要将用到的所有库名添加进来

5.1 首先是第一种方式,更加简洁方便:

# 自动查找并收集所有 .lib 静态库文件 GLOB_RECURSE是递归子目录 GLOB只查找当前目录
file(GLOB MITK_LIBS 
    "F:/MITK-2024.12/build/MITK-build/lib/Release/*.lib"
	"F:/MITK-2024.12/build/ep/lib/*.lib")
# 构建时输出这些 .lib 的路径,验证是否查找成功。
message(STATUS "Found MITK libs: ${MITK_LIBS}")

5.2 第二种硬编码方式将所有的库名链接到可执行文件,cmakelist文件过于冗余,不利于维护,但能具体指定需要使用哪些库:

# 添加lib文件搜索路径-硬编码方式
# 采用这个方式需要在后续的target_link_libraries中告诉编译器具体要链接哪些库。
target_link_directories(Step1Executable PRIVATE
    F:/MITK-2024.12/build/MITK-build/lib/Release
    F:/MITK-2024.12/build/ep/lib
)

然后在该目录搜集其lib文件名,可以使用下面脚本,新建一个txt文档,加入下面内容,保存之后将文件后缀改为bat,将该脚本添加到上面两个目录中,点击运行生成一个LIBLIST.TXT文件,其中就包含了该目录下所有的lib文件名,后续就可以复制和可执行文件链接起来:

DIR *.lib /B >LIBLIST.TXT

使用 target_link_libraries() 链接具体库名:

6. 然后添加Step为可执行文件:

# 添加可执行文件Step1
add_executable(Step1Executable Step1_Myproject.cpp)

7. 链接库到可执行文件,这里我使用的是GLOB方式,cmakelist文件简介一点

#链接库到可执行文件
target_link_libraries(Step1Executable PRIVATE
    Qt6::Core 
    Qt6::Widgets 
    Qt6::OpenGL
    ${MITK_LIBS}
)

总体cmakelist文件内容如下:

# CMake 最低版本号要求
cmake_minimum_required (VERSION 3.10)

# 项目信息
project (MitkStep1 VERSION 1.0)

#设置C++标准为C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找 Qt6 的核心库模块,尤其是 GUI 所需的 Core、Widgets、OpenGL 模块。
# 查找成功后,Qt6 会提供:头文件路径:${Qt6_INCLUDE_DIRS},库路径和链接方式:例如 Qt6::Widgets
# Mitk用不了这个方式,MITK_USE_FILE找不到
find_package(Qt6 REQUIRED COMPONENTS Core Widgets OpenGL)

# 把找到的 Qt 模块头文件路径、库路径等引入
include_directories(${Qt6_INCLUDE_DIRS})

#添加头文件搜索路径  
include_directories(F:/MITK-2024.12/MITK/Modules/QtWidgets/include)
include_directories(F:/MITK-2024.12/MITK/Modules/Log/include)
include_directories(F:/MITK-2024.12/MITK/Modules/Core/include)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/src/util)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/src/module)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/src/service)
include_directories(F:/MITK-2024.12/MITK/Modules/CppMicroServices/core/include)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/QtWidgets)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/Log)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/CppMicroServices/core/include)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/CppMicroServices/include)
include_directories(F:/MITK-2024.12/build/MITK-build/Modules/Core)
include_directories(F:/MITK-2024.12/build/MITK-build)
include_directories(F:/MITK-2024.12/build/ep/include)
include_directories(F:/MITK-2024.12/build/ep/include/vtk-9.3)
include_directories(F:/MITK-2024.12/build/ep/include/ITK-5.4)
include_directories(E:/QT/6.8.3/msvc2022_64/include)
include_directories(E:/QT/6.8.3/msvc2022_64/include/QtOpenGLWidgets)

# 添加可执行文件Step1
add_executable(Step1Executable Step1_Myproject.cpp)

# 自动查找并收集所有 .lib 静态库文件 GLOB_RECURSE是递归子目录 GLOB只查找当前目录
file(GLOB MITK_LIBS 
    "F:/MITK-2024.12/build/MITK-build/lib/Release/*.lib"
	"F:/MITK-2024.12/build/ep/lib/*.lib")
# 构建时输出这些 .lib 的路径,验证是否查找成功。
message(STATUS "Found MITK libs: ${MITK_LIBS}")

# 添加lib文件搜索路径-硬编码方式
# 采用这个方式需要在后续的target_link_libraries中告诉编译器具体要链接哪些库。
# target_link_directories(Step1Executable PRIVATE
#     F:/MITK-2024.12/build/MITK-build/lib/Release
#     F:/MITK-2024.12/build/ep/lib
# )

#链接库到可执行文件
target_link_libraries(Step1Executable PRIVATE
    Qt6::Core 
    Qt6::Widgets 
    Qt6::OpenGL
    ${MITK_LIBS}
)

至此,cmakelist文件内容完成!下面编译cmakelist文件生成系统构建文件,其他step系列的cmakelist文件类似编写即可。

生成构建文件

CMake 推荐使用 "Out-of-source" 构建方式,即将构建文件放在源代码目录之外的独立目录中。这样可以保持源代码目录的整洁,并方便管理不同的构建配置。

1. 首先打开命令行, 在项目的根目录下,创建一个新的构建目录(mkdir build)。例如,可以创建一个名为 build 的目录。我在我的Step1_Myproject.cpp所在文件夹中创建了build文件夹

2. 进入build 文件夹(cd build),在构建目录中运行 CMake 命令(cmake ..)

3. CMake 会输出配置过程中的详细信息,包括找到的库、定义的选项等,如果没有错误,构建系统文件将被生成到构建目录中。

编译和构建

我使用的是 Visual Studio,正常情况下在构建目录中生成了 Visual Studio 工程文件,可以打开 .sln 文件,然后在 Visual Studio 中选择构建解决方案。(注意这里需要指定构建类型(如 Debug 或 Release)和MITK编译时一致):

在生成中生成解决方案或者右键点击ALL_BUILD生成即可(根据错误导入对应的包含目录和库),然后将Step1Executable可执行程序设为启动项。

运行

右键Step1Executable点击属性设置程序的命令参数:F:\MITK-2024.12\build\MITK-Data\Pic3D.nrrd,然后运行程序即可:

启动运行程序:

其他的step系列教程也是按照编写cmakelsit文件配置系统构建文件,创建构建文件夹,使用 CMake 生成构建文件,编译和构建,之后打开vs2022修改其出现的错误(比如cmakelsit中缺失的头文件路径,库的缺失)。


网站公告

今日签到

点亮在社区的每一天
去签到