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、配置环境变量【貌似没有用到】
4、下载CTK包和CTKData包,解压,CTKData放在CTK根目录里
5、修改Qt版本,CTK-masterCMakectkMacroSetupQt.cmake,将4改为5
6、设置CTKData路径,CTK-masterCMakeExternalsCTKData.cmake
添加如下:
#set CTKData_path set(CTKData_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CTKData)
7、修改安装选项,如果不设置就不会安装,CTK-masterSuperBuild.cmake
添加:
#add install command if(WIN32) set(_INSTALL_CMD nmake install) else() set(_INSTALL_CMD make install) endif()
修改:
INSTALL_COMMAND ${_INSTALL_CMD}
8、在CTK根目录下新建build文件夹,用于存放生成的文件
三、生成makefile
1、打开CMake gui,直接将CTK下的CMakelist.txt拖到空白处,然后选择build的路径为上面的build文件夹
2、配置编译器环境
点击configure,弹出框,选择Mingw,选择第二个手动设置编译器,确定
3、会弹出一个设置编译器的对话框,对应选择即可
4、然后会自动开始configure,但是报错
是因为没有设置Qt的路径
5、输入Qt5_Dir,对应设置即可
6、然后重新configure,没报错
7、点击Generate,生成makefile
8、现在基本环境都ok了,但是需要打开我们希望生成的pluginframework
生成通信工具:
上面的工具Cmakelist里依赖如下的定义,也勾选上,不然报错:
生成ctk框架:
生成lib:
关闭test,不然会报错:
设置输出类型:【debug很大,但是便于调试】
设置安装路径:
四、执行makefile
1、打开cmd,进入build目录
2、执行mingw32-make
3、报语法错误,删除对应文件的语法错误
对应修改
把这个括号去掉。
4、重新编译,等待几分钟生成dll
MSVC编译
一、环境准备
1、安装Qt5.12.2【只使用了这个版本】
2、安装Cmake【使用的是3.17.3】
3、安装VS2015【只使用了这个版本】
4、下载CTK包和CTKData包,解压,CTKData放在CTK根目录里
5、修改Qt版本,CTK-masterCMakectkMacroSetupQt.cmake,将4改为5
6、设置CTKData路径,CTK-masterCMakeExternalsCTKData.cmake
添加如下:
#set CTKData_path
set(CTKData_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CTKData)
7、在CTK根目录下新建build文件夹,用于存放生成的文件
二、生成sln解决方案
0、按照mingw同样修改相关配置,注意这个一起修改
1、选择vs2015来编译
选择64位,因为我Qt里的MSVC只有2015 64位的
2、报错没有Qt的路径
3、设置Qt路径
4、配置需要生成的文件
生成通信工具:
上面的工具Cmakelist里依赖如下的定义,也勾选上,不然报错:
生成ctk框架:
生成lib:
关闭test,不然会报错:
5、然后点击configurate和generate,就会生成sln,然后直接点击打开工程
VS2015便会自动打开此工程
三、编译生成动态库
1、VS2015打开后是这样的
2、直接右键all_build重新生成解决方,等待几分钟,没有报错
3、这时已经色生成了相关的动态库
其他注意事项:
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不用,貌似都是一体的