qt creator原始碼全方面分析 3 8

2022-07-25 15:33:27 字數 3961 閱讀 3911

目錄構建目錄架構

我們在前面已經討論了所有的專案檔案,

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...