MingW编译

一、什么是CTK

总的来说就是一个框架,里面所有的对面如登录界面、日志功能、数据接收功能、解析功能、数据库访问都当做插件的形式,能够有效降低代码间的耦合。

CTK包含好几个核心功能:Plugin Framework、Widgets、DICOM、DICOM Application Hosting、Command Line Interfaces,这里主要是使用Plugin Framework。

插件就是动态库, 插件技术是使用c++中的多态,定义抽象类接口, 然后再PLugin中实现抽象类接口。

plugin可以动态加载, 动态更新。 可以实现应用的热插拔技术。 对内存的使用效率比较高。

当要使用的时候用interface 类指针指向 Plugin 就可以使用插件中的函数了。

CTK系统可以管理这些插件, 当需要的时候就可以直接从系统中获取相应的插件。 然后用想用的抽象接口指向这个插件就可以使用了。

ps:

CTK官网:​​https://commontk.org/index.php/Main_Page​

git:​​https://github.com/commontk/CTK​

二、环境准备

1、安装Qt5.12.2【只使用了这个版本】

2、安装Cmake【使用的是3.17.3】

3、配置环境变量【貌似没有用到】

windows编译CTK框架_动态库

 

 

4、下载CTK包和CTKData包,解压,CTKData放在CTK根目录里

windows编译CTK框架_抽象类_02

 

 

 5、修改Qt版本,CTK-master\CMake\ctkMacroSetupQt.cmake,将4改为5

windows编译CTK框架_根目录_03

6、设置CTKData路径,CTK-master\CMakeExternals\CTKData.cmake

添加如下:



#set CTKData_path

set(CTKData_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CTKData)


windows编译CTK框架_语法错误_04

7、修改安装选项,如果不设置就不会安装,CTK-master\SuperBuild.cmake

添加:



#add install command 
if(WIN32)
set(_INSTALL_CMD nmake install)
else()
set(_INSTALL_CMD make install)
endif()


修改:



INSTALL_COMMAND ${_INSTALL_CMD}


windows编译CTK框架_根目录_05

 

 

8、在CTK根目录下新建build文件夹,用于存放生成的文件

 

 三、生成makefile

1、打开CMake gui,直接将CTK下的CMakelist.txt拖到空白处,然后选择build的路径为上面的build文件夹

windows编译CTK框架_动态库_06

 

 

 2、配置编译器环境

点击configure,弹出框,选择Mingw,选择第二个手动设置编译器,确定

 

 windows编译CTK框架_抽象类_07

 

 

 3、会弹出一个设置编译器的对话框,对应选择即可

windows编译CTK框架_编译器_08

 

 

 4、然后会自动开始configure,但是报错

windows编译CTK框架_根目录_09

 

 

 是因为没有设置Qt的路径

5、输入Qt5_Dir,对应设置即可

windows编译CTK框架_根目录_10

 

6、然后重新configure,没报错

7、点击Generate,生成makefile

windows编译CTK框架_抽象类_11

 8、现在基本环境都ok了,但是需要打开我们希望生成的pluginframework

生成通信工具:

windows编译CTK框架_抽象类_12

上面的工具Cmakelist里依赖如下的定义,也勾选上,不然报错:

windows编译CTK框架_根目录_13

 

 

 生成ctk框架:

 windows编译CTK框架_编译器_14

生成lib:

 windows编译CTK框架_语法错误_15

 

 关闭test,不然会报错:

windows编译CTK框架_根目录_16

 

 设置输出类型:【debug很大,但是便于调试】

windows编译CTK框架_语法错误_17

 设置安装路径:

windows编译CTK框架_根目录_18

 

 

 

 

 

 四、执行makefile

1、打开cmd,进入build目录

2、执行mingw32-make

windows编译CTK框架_根目录_19

 

3、报语法错误,删除对应文件的语法错误

windows编译CTK框架_编译器_20

 

 对应修改

windows编译CTK框架_动态库_21

 

 把这个括号去掉。

4、重新编译,等待几分钟生成dll 

windows编译CTK框架_语法错误_22

 

 windows编译CTK框架_语法错误_23

 MSVC编译

一、环境准备

1、安装Qt5.12.2【只使用了这个版本】

2、安装Cmake【使用的是3.17.3】

3、安装VS2015【只使用了这个版本】 

4、下载CTK包和CTKData包,解压,CTKData放在CTK根目录里

windows编译CTK框架_抽象类_02

 

 

 5、修改Qt版本,CTK-master\CMake\ctkMacroSetupQt.cmake,将4改为5

windows编译CTK框架_根目录_03

6、设置CTKData路径,CTK-master\CMakeExternals\CTKData.cmake

添加如下:



#set CTKData_path

set(CTKData_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CTKData)


windows编译CTK框架_语法错误_04

 

7、在CTK根目录下新建build文件夹,用于存放生成的文件

 

二、生成sln解决方案

0、按照mingw同样修改相关配置,注意这个一起修改

windows编译CTK框架_动态库_21

1、选择vs2015来编译

windows编译CTK框架_根目录_28

 

 选择64位,因为我Qt里的MSVC只有2015 64位的

windows编译CTK框架_编译器_29

 

 2、报错没有Qt的路径

windows编译CTK框架_编译器_30

 

 3、设置Qt路径

windows编译CTK框架_抽象类_31

 

 

4、配置需要生成的文件

生成通信工具:

windows编译CTK框架_抽象类_12

上面的工具Cmakelist里依赖如下的定义,也勾选上,不然报错:

windows编译CTK框架_根目录_13

 

 

 生成ctk框架:

 windows编译CTK框架_编译器_14

生成lib:

 windows编译CTK框架_语法错误_15

 

 关闭test,不然会报错:

windows编译CTK框架_根目录_16

 

5、然后点击configurate和generate,就会生成sln,然后直接点击打开工程

windows编译CTK框架_抽象类_37

 

 windows编译CTK框架_编译器_38

 

 VS2015便会自动打开此工程

三、编译生成动态库

1、VS2015打开后是这样的

windows编译CTK框架_语法错误_39

 

 2、直接右键all_build重新生成解决方,等待几分钟,没有报错

windows编译CTK框架_动态库_40

 

 3、这时已经色生成了相关的动态库

windows编译CTK框架_动态库_41

 

 

 

 

 

 

其他注意事项:

1、注意版本,如Qt里MSVC的版本是64,如果在CMake GUI里选择32,最终VS里编译就会报错,一定要保持一致

2、如果有时候报错,又不知道是什么错,可能是因为我们新建的build文件夹即用来生成mingw的,然后又用来生成msvc的,Cmake gui没反应过来,把build文件夹的东西都删除掉就好了

3、即使勾选上了lib_pliugin,mingw也不会生成lib,而msvc会生成

4、源文件ctkLDAPExpr.cpp确实有错,这个应该事先我们就改一下,"QStirng()()"这不应该有两个括号

5、如果希望生成eventAdmin,那么一定要勾选上widget相关库,不然会报错。因为eventAdmin的makelist里有一个宏,定义在widget的makelist里面

6、Mingw可以选择生成的type是debug还是release,MSVC不用,貌似都是一体的




长风破浪会有时,直挂云帆济沧海!