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-master\CMake\ctkMacroSetupQt.cmake,將4改為5
6、設置CTKData路徑,CTK-master\CMakeExternals\CTKData.cmake
添加如下:
#set CTKData_path set(CTKData_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CTKData)
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}
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-master\CMake\ctkMacroSetupQt.cmake,將4改為5
6、設置CTKData路徑,CTK-master\CMakeExternals\CTKData.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不用,貌似都是一體的