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_PATH 或 DCMTK_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)