CTK入门教程05.03:vcpkg编译

系列索引:CTK框架入门教程索引

CTK入门教程02:Windows下编译中,我们介绍了如何在Windows下编译CTK框架。但是编译的结果无法直接使用,比如说头文件整合。

本文使用Windows下vcpkg工具简化编译、部署流程。需要添加ctk对应port,包括vcpkg.json、protfile.cmake、ctk_link_libraries.patch。一般位于vcpkg/ports/ctk/

vcpkg.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"name": "ctk",
"version": "2023-07-13",
"description": "A set of common support code for medical imaging, surgical navigation, and related purposes.",
"homepage": "https://commontk.org/",
"license": "Apache-2.0",
"dependencies": [
"dcmtk",
"qt5-multimedia",
"qt5-script",
"qt5-tools",
"qt5-xmlpatterns",
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}

portfile.cmake

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
vcpkg_from_github(
OUT_SOURCE_PATH SOURCE_PATH
REPO commontk/CTK
REF 60a0740f228633f118698b4526256a4c2110ce81 # committed on 2023.07.18
SHA512 ca04912ed516020c998865e877cb7df2e7f7758cb21346997ca4fcd76ebbbf6c4670ac4d51c03b5a7f6a7ed4ccc0d90096ae0ab566ee96c2b073826af0cc9ad8
HEAD_REF master
)

if(VCPKG_TARGET_IS_WINDOWS)
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
-DCMAKE_CXX_STANDARD=17
-DCMAKE_CXX_STANDARD_REQUIRED=ON
-DCTK_APP_ctkDICOM=ON
-DCTK_APP_ctkDICOM2=ON
-DCTK_APP_ctkDICOMDemoSCU=ON
-DCTK_APP_ctkDICOMHost=ON
-DCTK_APP_ctkDICOMIndexer=ON
-DCTK_APP_ctkDICOMObjectViewer=ON
-DCTK_APP_ctkDICOMQuery=ON
-DCTK_APP_ctkDICOMQueryRetrieve=ON
-DCTK_APP_ctkDICOMRetrieve=ON
-DCTK_APP_ctkExampleHost=ON
-DCTK_APP_ctkExampleHostedApp=ON
-DCTK_APP_ctkPluginBrowser=ON
-DCTK_APP_ctkPluginGenerator=ON
-DCTK_APP_ctkXnatTreeBrowser=ON
-DCTK_SUPERBUILD=ON
-DCTK_USE_QTTESTING=OFF
-DCTK_USE_SYSTEM_VTK=OFF
-DCTK_USE_SYSTEM_DCMTK=ON
-DCTK_USE_SYSTEM_ITK=OFF
-DCTK_BUILD_QTDESIGNER_PLUGINS=OFF
-DCTK_BUILD_SHARED_LIBS=ON
-DCTK_ENABLE_DICOM=ON
-DCTK_ENABLE_DICOMApplicationHosting=ON
-DCTK_ENABLE_PluginFramework=ON
-DCTK_ENABLE_Widgets=ON
-DCTK_LIB_CommandLineModules/Backend/FunctionPointer=ON
-DCTK_LIB_CommandLineModules/Backend/LocalProcess=ON
-DCTK_LIB_CommandLineModules/Backend/XMLChecker=ON
-DCTK_LIB_CommandLineModules/Core=ON
-DCTK_LIB_CommandLineModules/Frontend/QtGui=OFF
-DCTK_LIB_CommandLineModules/Frontend/QtWebkit=OFF
-DCTK_LIB_Widgets=ON
-DCTK_LIB_Core=ON
-DCTK_LIB_DICOM/Core=ON
-DCTK_LIB_DICOM/Widgets=ON
-DCTK_LIB_ImageProcessing/ITK/Core=OFF
-DCTK_LIB_PluginFramework=ON
-DCTK_LIB_Visualization/VTK/Core=OFF
-DCTK_LIB_Visualization/VTK/Widgets=OFF
-DCTK_LIB_XNAT/Core=ON
-DCTK_LIB_XNAT/Widgets=ON
-DCTK_PLUGIN_org.commontk.configadmin=ON
-DCTK_PLUGIN_org.commontk.dah.cmdlinemoduleapp=ON
-DCTK_PLUGIN_org.commontk.dah.core=ON
-DCTK_PLUGIN_org.commontk.dah.exampleapp=ON
-DCTK_PLUGIN_org.commontk.dah.examplehost=ON
-DCTK_PLUGIN_org.commontk.dah.host=ON
-DCTK_PLUGIN_org.commontk.dah.hostedapp=ON
-DCTK_PLUGIN_org.commontk.eventadmin=ON
-DCTK_PLUGIN_org.commontk.log=ON
-DCTK_PLUGIN_org.commontk.metatype=ON
-DCTK_PLUGIN_org.commontk.plugingenerator.core=ON
-DCTK_PLUGIN_org.commontk.plugingenerator.ui=ON
)
elseif(VCPKG_TARGET_IS_LINUX)
vcpkg_cmake_configure(
SOURCE_PATH "${SOURCE_PATH}"
OPTIONS
-DCMAKE_CXX_STANDARD=17
-DCMAKE_CXX_STANDARD_REQUIRED=ON
-DCTK_APP_ctkDICOM=ON
-DCTK_APP_ctkDICOM2=ON
-DCTK_APP_ctkDICOMDemoSCU=ON
-DCTK_APP_ctkDICOMHost=ON
-DCTK_APP_ctkDICOMIndexer=ON
-DCTK_APP_ctkDICOMObjectViewer=ON
-DCTK_APP_ctkDICOMQuery=ON
-DCTK_APP_ctkDICOMQueryRetrieve=ON
-DCTK_APP_ctkDICOMRetrieve=ON
-DCTK_APP_ctkExampleHost=ON
-DCTK_APP_ctkExampleHostedApp=ON
-DCTK_APP_ctkPluginBrowser=ON
-DCTK_APP_ctkPluginGenerator=ON
-DCTK_APP_ctkQtTesting=OFF
-DCTK_APP_ctkXnatTreeBrowser=ON
-DCTK_SUPERBUILD=ON
-DCTK_USE_SYSTEM_VTK=OFF
-DCTK_USE_SYSTEM_DCMTK=ON
-DCTK_USE_SYSTEM_ITK=OFF
-DCTK_BUILD_QTDESIGNER_PLUGINS=OFF
-DCTK_BUILD_SHARED_LIBS=ON
-DCTK_ENABLE_DICOM=ON
-DCTK_ENABLE_DICOMApplicationHosting=ON
-DCTK_ENABLE_PluginFramework=ON
-DCTK_ENABLE_Widgets=ON
-DCTK_LIB_CommandLineModules/Backend/FunctionPointer=ON
-DCTK_LIB_CommandLineModules/Backend/LocalProcess=ON
-DCTK_LIB_CommandLineModules/Backend/XMLChecker=ON
-DCTK_LIB_CommandLineModules/Core=ON
-DCTK_LIB_CommandLineModules/Frontend/QtGui=OFF
-DCTK_LIB_CommandLineModules/Frontend/QtWebkit=OFF
-DCTK_LIB_Widgets=ON
-DCTK_LIB_Core=ON
-DCTK_LIB_Core_WITH_BFD_SHARED=OFF # Linux Only
-DCTK_LIB_DICOM/Core=ON
-DCTK_LIB_DICOM/Widgets=ON
-DCTK_LIB_ImageProcessing/ITK/Core=OFF
-DCTK_LIB_PluginFramework=ON
-DCTK_LIB_Visualization/VTK/Core=OFF
-DCTK_LIB_Visualization/VTK/Widgets=OFF
-DCTK_LIB_XNAT/Core=ON
-DCTK_LIB_XNAT/Widgets=ON
-DCTK_PLUGIN_org.commontk.configadmin=ON
-DCTK_PLUGIN_org.commontk.dah.cmdlinemoduleapp=ON
-DCTK_PLUGIN_org.commontk.dah.core=ON
-DCTK_PLUGIN_org.commontk.dah.exampleapp=ON
-DCTK_PLUGIN_org.commontk.dah.examplehost=ON
-DCTK_PLUGIN_org.commontk.dah.host=ON
-DCTK_PLUGIN_org.commontk.dah.hostedapp=ON
-DCTK_PLUGIN_org.commontk.eventadmin=ON
-DCTK_PLUGIN_org.commontk.log=ON
-DCTK_PLUGIN_org.commontk.metatype=ON
-DCTK_PLUGIN_org.commontk.plugingenerator.core=ON
-DCTK_PLUGIN_org.commontk.plugingenerator.ui=ON
)
endif()

vcpkg_cmake_install()

if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CTK-build/bin" DESTINATION "${CURRENT_PACKAGES_DIR}/" FILES_MATCHING PATTERN *.exe)
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CTK-build/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/lib/" FILES_MATCHING PATTERN *.lib)
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CTK-build/bin" DESTINATION "${CURRENT_PACKAGES_DIR}/" FILES_MATCHING PATTERN *.dll)
endif()

if(NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/CTK-build/bin" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/" FILES_MATCHING PATTERN *.exe)
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/CTK-build/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib/" FILES_MATCHING PATTERN *.lib)
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/CTK-build/bin" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/" FILES_MATCHING PATTERN *.dll)
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/CTK-build/bin" DESTINATION "${CURRENT_PACKAGES_DIR}/debug/" FILES_MATCHING PATTERN *.pdb)
endif()

# ctkCoreExport.h
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CTK-build/Libs/Core/ctkCoreExport.h" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ctk/")
# ctkPluginFrameworkExport.h
file(COPY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/CTK-build/Libs/PluginFramework/ctkPluginFrameworkExport.h" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ctk/")
# other
file(COPY "${SOURCE_PATH}/Libs/Core" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ctk/Libs" FILES_MATCHING PATTERN *.h)
file(COPY "${SOURCE_PATH}/Libs/PluginFramework" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ctk/Libs" FILES_MATCHING PATTERN *.h)
file(COPY "${SOURCE_PATH}/Libs/Widgets" DESTINATION "${CURRENT_PACKAGES_DIR}/include/ctk/Libs" FILES_MATCHING PATTERN *.h)

# Install the pkgconfig file
vcpkg_fixup_pkgconfig()

vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
From d1f18aa8bcae5e526e01dcfaa10ce283220c6f57 Mon Sep 17 00:00:00 2001
From: Jackey Lea <1768478912@qq.com>
Date: Thu, 28 Nov 2024 15:22:10 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BA=93=E8=B7=AF=E5=BE=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
CMakeLists.txt | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ba6dba5..942fc3c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -946,6 +946,12 @@ if(BUILD_TESTING)
list(APPEND CTK_DEPENDENCIES CTKData)
endif()

+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+ link_directories("D:/JackeyLea/vcpkg/packages/dcmtk_x64-windows/debug/lib")
+else()
+ link_directories("D:/JackeyLea/vcpkg/packages/dcmtk_x64-windows/lib")
+endif()
+
#-----------------------------------------------------------------------------
# Check out the ExternalProjectsContrib repository
if(CTK_USE_CONTRIBUTED_PLUGINS)
--
2.47.1.windows.1

编译

将文件放置于指定位置,执行命令编译

1
vcpkg install ctk:x64-windows

我打算把port添加到vcpkg仓库,但是根据单元测试结果,只有少数几个平台通过测试。但是Windows/Linux平台还是可以的。


CTK入门教程05.03:vcpkg编译
https://blog.jackeylea.com/ctk/how-to-build-ctk-framework-with-vcpkg/
作者
JackeyLea
发布于
2025年9月29日
许可协议