天天看點

ctkPluginFramework編譯qt_vs2017_gcc

                   ctkPluginFramework編譯qt5.12_vs2017_gcc4.8

前言

       使用ctkPluginFramework作為插件系統架構的确有着衆多開發上的優勢。最近收到一些站内信,大家都想使用ctkPluginFramework但是不知道如何編譯,這篇教程就來講一講:另外在文章末尾我會附上ctkPluginFramework編譯好的庫,包括完整的頭檔案,lib,dll,和使用庫寫的例子,使用到了ctk事件訂閱分發機制傳輸資料,友善讀者下載下傳。

1. ctkPluginFramework插件系統在Windows下的編譯過程,使用qt5.12_vs2017

            這裡使用使用qt5.12下面的 msvc2017_64

準備條件:

        1. 安裝Git,我們通過它來下載下傳CTK的源碼。

        2. 安裝CMake,我們用它來生成vs下的sln解決方案檔案。

相關站點:

        1. CTK的官網:​​http://www.commontk.org/index.php/Main_Page​​

        2. CTK源碼下載下傳位址:​​https://github.com/commontk/CTK​​

        3. Git下載下傳位址:​​https://git-scm.com/​​

        4. CMake下載下傳位址:​​https://cmake.org/​​ 

注意:這裡git必須安裝,應為在使用CMake編譯源碼的時候,需要用到ctkData,如果沒有編譯會報錯,是以編譯時需要聯網, 

當然也可以自己手動下載下傳ctkData,放到源碼對應的目錄,在CMakeLists.txt配置檔案中,把ctkData對應的選項修改成對應的目錄。手動從​​https://github.com/commontk/CTKData​​上下載下傳CTKData,然後将CTKData放到一個固定的位置(例如放到CTK-master目錄中),并在CTK-master\CMakeExternals\CTKData.cmake中指定它的位置。設定完路徑後繼續configure。

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

編譯步驟:

        注意:下面目錄中出現的檔案,由于是我已經編譯過的,是以可能會和剛下載下傳的多出很多檔案,在這裡僅說明流程是怎樣的。

        1. Git下載下傳源碼包。Git下載下傳位址:https://github.com/commontk/CTK.git 。

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

  如上圖,打開cmake工具,選擇剛下載下傳的CTK目錄,它會自動根據CMakeList.txt檔案加載子項目,如下圖所示;

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

 出現第一個error,根據出現的error我們添加qt5的路徑,繼續configure:

選擇ctkPluginFramework子產品,點選Generate, Configure;完成後,檢視是否生成sln檔案,注意:此處一定要勾選上圖中标注的CTK_ENABLE_PluginFramework,不然編譯生成的sln檔案也無法生成最終的CTKPluginFramework.dll檔案;

ctkPluginFramework編譯qt_vs2017_gcc

若果還有問題:

我在用cmake編譯是報錯:

CMake Error at CMake/ctkMacroSetupQt.cmake:87(message):

error: Qt4 was not found on your system. You probably need to set the

QT_QMAKE_EXECUTABLE variable

有人說要修改CMake/ctkMacroSetupQt.cmake,将

set_property(CACHE CTK_QT_VERSION PROPERTY STRINGS 4 5)改成set_property(CACHE CTK_QT_VERSION PROPERTY STRINGS 5 4)

以及

set(CTK_QT_VERSION “4” CACHE STRING “Expected Qt version”)改為set(CTK_QT_VERSION “5” CACHE STRING “Expected Qt version”)

我修改之後還是報錯,我谷歌後找到了不修改ctkMacroSetupQt的方法,具體如下:

(1).點選Add Entry

ctkPluginFramework編譯qt_vs2017_gcc

(2).添加

CTK_QT_VERSION (to 5)

CMAKE_PREFIX_PATH (with the path to the cmake folder in Qt)

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

(3).點選主界面的Generate即可

如果還有問題,如果不修改,在進行config讀取配置的時候會出現如下圖所示的提示資訊。出現如下提示修改的時候需要清下Cache,切記。

ctkPluginFramework編譯qt_vs2017_gcc

勾選advanced,作以下配置:

Build_testing 取消   (如果不取消勾選的話,當生成CTK.sln,編譯時會報錯:MSB600.exe錯誤)

CTK_ENABLE_WIDIGETS 勾選

CTK_LIB_VISUALIZATION/VTK/CORE 勾選

CTK_LIB_VISUALIZATION/VTK/WIDGETS 勾選

CTK_LIB_WIDGETS 勾選

ctkPluginFramework編譯qt_vs2017_gcc

注意:以上設定完成繼續configure,出現下圖,我們勾選CTK_LIB_VISUALIATION/VTK/WIDGETS_USE_TRANSFER_FUNCTION_CHARTS,繼續configure

當時發現CMake裡面還是有紅色的警告,把Qt5GUI_DIR、Qt5OpenGL_DIR、Qt5UiTools_DIR、Qt5Widget_DIR這幾個紅色的配置項的值修改成你本地qt5的安裝路徑

ctkPluginFramework編譯qt_vs2017_gcc

以上設定完成繼續configure,出現下圖,我們勾選CTK_LIB_VISUALIATION/VTK/WIDGETS_USE_TRANSFER_FUNCTION_CHARTS,繼續configure

ctkPluginFramework編譯qt_vs2017_gcc

這樣才算完全編譯正确,沒有任何紅色的警告

如果還有問題,好吧,我也沒轍了。。。。。。我隻能幫你到這了,哈哈哈

2. 在生成路徑下面會看到CTK.sln,使用Vs2017打開,選擇ALL_BUILD,進過大概20多分鐘,視自己電腦組態情況而定

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

3. 生成.h頭檔案,lib靜态庫,和dll動态庫,最核心的隻有2個CTKCore.lib/dll  CTKPluginFramework.lib/dll

我這裡額外編譯了CTKWidgets.lib,是為了使用ctkWidget,ctkWidget裡面封裝了QWdget,并擴充了QWidgeht

另外為了使用ctk事件機制,有多編譯了org_commontk_eventadmin.lib org_commontk_log.lib  org_commontk_configadmin.lib 

org_commontk_metatype.lib 這些庫在CMake裡面都是可配置的

ctkPluginFramework編譯qt_vs2017_gcc

如果使用vs2017打開ctk.sln,編譯時報錯:

嚴重性    代碼    說明    項目    檔案    行    禁止顯示狀态 錯誤    MSB3073    指令“setlocal [E:\ctkFrameworkPlugin\CTK-master-debug-build\CTK-bu

請使用管理者權限運作vs2017,然後編譯

ctkPluginFramework編譯qt_vs2017_gcc

2. ctkPluginFramework插件系統在Windows下使用MinGW的編譯過程

   用cmake-gui産生makefile

查了下cmake目錄下并沒有ccmake程式,但是有個cmake-gui,用起來起始功能差不多。打開cmake-gui,配置下source cod與build the binaries的路徑

ctkPluginFramework編譯qt_vs2017_gcc

點選Configure按鈕,在彈框中配置generator為MinGW Makefiles,然後點選Next,配置下MinGW編譯器路徑。

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

點選确認後預設首次generate會報錯,因為預設CTK配置的Qt版本為QT4,需要做更改成5。

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

另外,把CTK下面CTK_ENABLE_PluginFramework也改為打開。

最後點選generate,成功時會有"configuring done Generating done"列印,這時,ctk-superbuild目錄下應該有Mkaefile生成了。

ctkPluginFramework編譯qt_vs2017_gcc
ctkPluginFramework編譯qt_vs2017_gcc

編譯

用win10下強大的​

​Windows PowerShell​

​軟體,進入到ctk-superbuild目錄,然後用mingw32-make指令進行編譯。

ctkPluginFramework編譯qt_vs2017_gcc

如果讀者嫌麻煩,我這裡有編譯好的ctk庫,使用環境,

windows10+qt5.12+vs2017