目錄
- qtcreatorlibrary.pri
- 使用實體
- 上半部
- 下半部
- 結果
qtcreatorlibrary.pri
上一章節,我們介紹了src.pro,這里乘此機會,把src目錄下的所有專案檔案都介紹一遍,首先為qtcreatorlibrary.pri,
使用實體
為了分析這個檔案,我們找個使用該pri的例子,源目錄\src\libs\cplusplus\cplusplus.pro
DEFINES += NDEBUG
unix:QMAKE_CXXFLAGS_DEBUG += -O2
win32:QMAKE_CXXFLAGS_DEBUG += -O2
include(../../qtcreatorlibrary.pri)
include(cplusplus-lib.pri)
以及依賴項,源目錄\src\libs\cplusplus\cplusplus_dependencies.pri
QTC_LIB_NAME = CPlusPlus
QTC_LIB_DEPENDS += \
utils
INCLUDEPATH *= $$IDE_SOURCE_TREE/src/libs/3rdparty
這里我們可以看見,設定了庫名QTC_LIB_NAME和依賴的庫名QTC_LIB_DEPENDS,這在qtcreator.pri中決議依賴時會用到的,
上半部
下面,我們來分析qtcreatorlibrary.pri,這里分為兩部分來介紹,
上半部分如下
include($$replace(_PRO_FILE_PWD_, ([^/]+$), \\1/\\1_dependencies.pri))
TARGET = $$QTC_LIB_NAME
include(../qtcreator.pri)
# use precompiled header for libraries by default
isEmpty(PRECOMPILED_HEADER):PRECOMPILED_HEADER = $$PWD/shared/qtcreator_pch.h
win32 {
DLLDESTDIR = $$IDE_APP_PATH
}
DESTDIR = $$IDE_LIBRARY_PATH
DLLDESTDIR
注意:此變數僅適用于Windows目標,
指定要將目標dll復制到的位置,
DESTDIR
指定放置目標檔案的位置,
例如:
DESTDIR = ../../lib注意:支持的字串列可能取決于所使用的構建工具, 特別是,括號不適用于make工具,
-
根據pro檔案名獲取對應的依賴檔案,進行包含,
_PRO_FILE_PWD_為包含該pri的pro所在的檔案夾路徑,([^/]+$)表示路徑中最后一個分隔符后面的字串,\1為反向參考,代表所獲取的第1個匹配的參考,
示例:_PRO_FILE_PWD_為源目錄/src/libs/cplusplus,包含檔案為源目錄/src/libs/cplusplus/cplusplus_dependencies.pri,匹配項為cplusplus,
-
設定庫檔案名,
示例:CPlusPlus,
-
加載qtcreator.pri,
具體內容見往期文章qt creator原始碼全方面分析(3-2),
這里重點提示下,第一步加載的依賴檔案中,設定了QTC_LIB_DEPENDS,那么在qtcreator.pri會進行依賴決議(utils庫),并進行包含,
-
添加預編譯頭檔案,
示例:源目錄/src/shared/qtcreator_pch.h,內容就是一些常用的統一的Qt頭檔案,
-
設定DLL目標檔案夾,
如果win32平臺,且生成的目標是dll,則把該dll拷貝到IDE_APP_PATH中,即構建目錄/bin,
-
設定目標檔案夾,
把生成的目標,輸出到IDE_LIBRARY_PATH,即構建目錄/lib/qtcreator,
下半部
下半部分如下
osx {
QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/Frameworks/
QMAKE_LFLAGS += -compatibility_version $$QTCREATOR_COMPAT_VERSION
}
include(rpath.pri)
TARGET = $$qtLibraryTargetName($$TARGET)
TEMPLATE = lib
CONFIG += shared dll
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols
win32 {
dlltarget.path = $$INSTALL_BIN_PATH
INSTALLS += dlltarget
} else {
target.path = $$INSTALL_LIBRARY_PATH
INSTALLS += target
}
-
osx設定和rpath.pri,設定編譯選項,略,
-
設定輸出目標的檔案名,
這里呼叫了qtcreator.pri中定義的qtLibraryTargetName()函式,其實就是在debug模式下添加字符d,以區分release模式,函式分析見qt creator原始碼全方面分析(3-2),
-
設定輸出型別,為共享lib庫,
-
設定隱藏匯出符號選項,
-
設定安裝路徑,
結果
在構建目錄中,我們在DLLDESTDIR和DESTDIR指定的兩處地方找到了編譯得到的庫,
我們在cplusplus.pro包含qtcreatorlibrary.pri,在pri中加載cplusplus_dependencies.pri,然后加載qtcreator.pri,并在其中解決依賴,最終加載utils_dependencies.pri,專案目錄架構結果如下,
原創造福大家,共享改變世界
獻出一片愛心,溫暖作者心靈
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14358.html
標籤:其他
