目錄構建目錄架構
我們在前面已經討論了所有的專案檔案,
qtcreator.pro
qtcreator.pri
qtcreatordata.pri
qtcreatorlibrary.pri
qtcreatorplugin.pri
qtcreatortool.pri
下面我們再從頭到尾來捋一遍。
我們可以看到,所有的*.pro檔案中,除了最底層的子專案。都採用template和subdirs這種模式,來進行多個子專案包含和分層,以及指定編譯順序。
# qtcreator.pro
template = subdirs
subdirs = src share
# src.pro
template = subdirs
subdirs += \
libs \
plugins \
tools \
...# libs.pro
template = subdirs
subdirs = \
aggregation \
extensionsystem \
utils \
...
從上往下形成多級目錄層次。
我們還是以源目錄\src\plugins\cppeditor為例。其解析流程如下:
通過template和subdirs模式,載入cppeditor.pro。
在pro中載入qtcreatorplugin.pri。
include(../../qtcreatorplugin.pri)
在qtcreatorplugin.pri載入cppeditor_dependencies.pri。在該檔案中設定了自身外掛程式名和附加依賴項。
qtc_plugin_name = cppeditor
qtc_lib_depends += \
extensionsystem \
utils \
cplusplus
qtc_plugin_depends += \
texteditor \
coreplugin \
cpptools \
projectexplorer
qtc_test_depends += \
qmakeprojectmanager
現在就有了qtc_plugin_name,qtc_lib_depends和qtc_plugin_depends的值。
緊接著在qtcreatorplugin.pri載入qtcreator.pri。該檔案中使用定義的for(ever)和步驟3中獲取的變數,進行遞迴依賴解析。
最終從上往下也形成多級目錄層次。
源目錄\src\libs中的各個子專案同上。
這裡,我們統一分析下includepath,libs和destdir。
# qtcreatorplugin.pri
# 為了載入外掛程式元資料json檔案
includepath += $$out_pwd
# qtcreator.pri
# 包含多個目錄
includepath += \
$$ide_source_tree/src
$$ide_source_tree/src/libs \
$$ide_source_tree/tools
# 至少包含src/plugins目錄
qtc_plugin_dirs += $$ide_source_tree/src/plugins
for(dir, qtc_plugin_dirs)
# 至少包含src/libs目錄
qtc_lib_dirs += $$ide_source_tree/src/libs
for(dir, qtc_lib_dirs)
我們現在可以知道,對於每乙個使用qtcreator.pri的子專案,都包含
源目錄/src
源目錄/src/libs
源目錄/src/plugins
源目錄/src/tools
構建目錄/src
這樣包含以後,引用標頭檔案的時候,只需要直接包含"dependproject/xx.h",不用管"../../.."這種模式,把自己搞暈呼了,也容易出錯。
# qtcreatorplugin.pri
# 依賴外掛程式也輸出到同乙個目錄,所有鏈結到該目錄,注意是大寫-l
libs += -l$$destdir
# qtcreator.pri
# 注意是大寫-l
libs *= -l$$ide_library_path
!isempty(qtc_plugin_depends)
# 注意是小寫-l,連線依賴的指定庫檔案
for(ever)
for(ever)
我們現在可以知道,對於每乙個使用qtcreator.pri的子專案
直接解決了libs和plugins目錄下的專案的依賴問題。
# qtcreatorplugin.pri
# 注意,還有乙個使用者路徑,這裡不展示了
destdir = $$ide_plugin_path
# qtcreatorlibrary.pri
# 輸出到兩個路徑
win32
destdir = $$ide_library_path
# qtcreatortool.pri
destdir = $$ide_libexec_path
我們現在可以知道,
外掛程式輸出到ide_plugin_path路徑
工具輸出到ide_libexec_path路徑
我們結合上一小節,再總結一下輸出目錄的架構,這也是在qtcreator.pri中指定的。
二進位制檔案路徑ide_bin_path:構建目錄/bin
庫可執行目錄ide_libexec_path:構建目錄/bin
資料目錄ide_data_path:構建目錄/share/qtcreator
文件目錄ide_doc_path:構建目錄/share/doc/qtcreator。
庫目錄ide_library_path:構建目錄/lib/qtcreator
外掛程式目錄ide_plugin_path:構建目錄/lib/qtcreator/plugins
構建目錄如下:
現在我們可知,程式需要的東西至少為:
核心bin目錄中,包含了程式啟動所需要的東西,為可執行程式,庫以及工具。
lib/qtcreator/plugins,為外掛程式目錄,程式啟動後需要進行解析和載入。
/share/qtcreator,為資料目錄,各種配置檔案,模板等,為程式的附屬。
正式qtcreator安裝目錄如下:
原創造福大家,共享改變世界
獻出一片愛心,溫暖作者心靈
qt creator原始碼全方面分析 2 0
目錄 支援其他檔案型別 執行外部工具 所有主題 qt creator是為qt開發人員的需求量身定製的跨平台整合開發環境 ide qt creator可以通過多種方式擴充套件。例如,qt creator架構基於外掛程式載入器,這意味著外掛程式載入器以外的所有功能都在外掛程式中實現。但是,您可以擴充套件...
qt creator原始碼全方面分析 2 6
目錄 編寫訊息 ui文字大寫 使用句子樣式大寫 準備本地化 qt creator通用條款 請遵循本節中的準則,以確保擴充套件與qt creator ui保持一致,並且可以輕鬆地將其本地化為其他語言。編寫ui文字時,請確保它 使用者介面文字應簡潔明瞭且經濟實惠。避免使用不必要的內容詞和短語。但是,更重...
qt creator原始碼全方面分析 4 2
目錄外掛程式的本質就是動態鏈結庫,對於庫,需要匯出符號,供使用者匯入使用。在qt creator的原始碼中,存在固定的匯入匯出模式。對於每個庫和外掛程式,都有乙個xx global.h標頭檔案,其中xx為庫或外掛程式名。示例如下 pragma once include if defined xx l...