FindDCMTK

查找 DICOM 工具包 (DCMTK) 库和应用程序

find_package(DCMTK [...])

DCMTK 是一组库和应用程序,实现了 DICOM 标准 (Digital Imaging and Communications in Medicine) 的大部分内容。

新增于 3.5 版本: 现在此模块能够查找导出或不导出 DCMTKConfig.cmake 文件的 DCMTK 版本。

DCMTK 自版本 3.6.1_20140617 起,支持并安装用于 find_package() 命令的配置模式下的 包配置文件 (DCMTKConfig.cmake)。

此模块现在应用一个两步流程

  • 步骤 1:尝试查找提供 DCMTKConfig.cmake 文件的 DCMTK 版本,如果找到,则返回结果,不再进行其他操作。

  • 步骤 2:如果步骤 1 失败,此模块将回退到模块模式(搜索标准位置),并设置 DCMTK_* 结果变量。

在所有客户端更新到较新版本的 DCMTK 之前,构建系统需要支持不同版本的 DCMTK。

在任何给定系统上,对于安装在系统上的 DCMTK(例如,通过系统包管理器安装)或本地安装的 DCMTK(例如,自定义安装或通过 FetchContent 模块),可以考虑以下 DCMTK 版本组合:

情况

系统 DCMTK

本地 DCMTK

支持?

A

不适用

[ ] DCMTKConfig

B

不适用

[X] DCMTKConfig

C

[ ] DCMTKConfig

不适用

D

[X] DCMTKConfig

不适用

E

[ ] DCMTKConfig

[ ] DCMTKConfig

是 (*)

F

[X] DCMTKConfig

[ ] DCMTKConfig

G

[ ] DCMTKConfig

[X] DCMTKConfig

H

[X] DCMTKConfig

[X] DCMTKConfig

图例

(*)

请参阅 故障排除 部分。

不适用

DCMTK 不可用。

[ ] DCMTKConfig

DCMTK 未导出 DCMTKConfig.cmake 文件。

[X] DCMTKConfig

DCMTK 导出了 DCMTKConfig.cmake 文件。

结果变量

此模块定义了以下变量

DCMTK_FOUND

一个布尔值,指示是否找到 DCMTK。

DCMTK_INCLUDE_DIRS

包含使用 DCMTK 所需头文件的包含目录。

DCMTK_LIBRARIES

链接使用 DCMTK 所需的库。

提示

此模块接受以下变量

DCMTK_DIR

(可选) DCMTK 的源目录。

故障排除

如果项目找到的是不同版本的 DCMTK 怎么办?

根据 find_package() 文档,从 CMake 缓存中移除 DCMTK 条目,然后重新运行配置。要查找自定义位置的 DCMTK,请使用 CMAKE_PREFIX_PATHDCMTK_DIR 等变量。

示例

示例:查找 DCMTK

使用此模块查找 DCMTK

find_package(DCMTK)

示例:不使用此模块查找 DCMTK

要显式使用 DCMTKConfig.cmake 包配置文件(如果可能,推荐这样做),并在不使用此模块的情况下以配置模式查找 DCMTK,可以将 NO_MODULE 选项传递给 find_package()

find_package(DCMTK NO_MODULE)

示例:创建导入目标

在以下示例中,使用此模块搜索 DCMTK,并有条件地创建一个 导入目标,以提供 DCMTK 的使用需求,可以轻松地链接到项目目标。例如,如果在配置模式下找到 DCMTK,则 DCMTK::DCMTK 导入目标将通过找到的配置文件提供。

find_package(DCMTK)

# Upstream DCMTKConfig.cmake already provides DCMTK::DCMTK imported target
if(DCMTK_FOUND AND NOT TARGET DCMTK::DCMTK)
  add_library(DCMTK::DCMTK INTERFACE IMPORTED)
  set_target_properties(
    DCMTK:DCMTK
    PROPERTIES
      INTERFACE_LINK_LIBRARIES "${DCMTK_LIBRARIES}"
      INTERFACE_INCLUDE_DIRECTORIES "${DCMTK_INCLUDE_DIRS}"
  )
endif()

target_link_libraries(example PRIVATE DCMTK::DCMTK)