目錄
- qtcreatordata.pri
- 定義stripStaticBase替換函式
- 設定自定義編譯和安裝
- QMAKE_EXTRA_COMPILERS
- Adding Compilers
- 示例1
- 示例2
- 小節
qtcreatordata.pri
此pri檔案用于部署在構建Qt Creator時未編譯的檔案,如果使用影子構建,它將檔案復制到構建目錄中,同時添加相應的安裝目標,
用法:首先定義變數(詳細資訊如下),然后包含此pri檔案,
STATIC_BASE:STATIC_FILES中列出的檔案的基礎目錄
STATIC_FILES:要部署的檔案串列
STATIC_OUTPUT_BASE:編譯輸出的基礎目錄
STATIC_INSTALL_BASE:安裝輸出的基礎目錄
定義stripStaticBase替換函式
函式如下:
# used in custom compilers which just copy files
defineReplace(stripStaticBase) {
return($$relative_path($$1, $$STATIC_BASE))
}
函式很簡單,回傳函式引數相對于STATIC_BASE的相對路徑,注釋也很明白,在僅復制檔案的自定義編譯器中使用,
設定自定義編譯和安裝
接下來是
# handle conditional copying based on STATIC_BASE compared to STATIC_OUTPUT_BASE
!isEmpty(STATIC_FILES) {
isEmpty(STATIC_BASE): \
error("Using STATIC_FILES without having STATIC_BASE set")
isEmpty(STATIC_OUTPUT_BASE): \
error("Using STATIC_FILES without having STATIC_OUTPUT_BASE set")
!osx:isEmpty(STATIC_INSTALL_BASE): \
error("Using STATIC_FILES without having STATIC_INSTALL_BASE set")
!isEqual(STATIC_BASE, $$STATIC_OUTPUT_BASE) {
copy2build.input += STATIC_FILES
copy2build.output = $$STATIC_OUTPUT_BASE/${QMAKE_FUNC_FILE_IN_stripStaticBase}
isEmpty(vcproj):copy2build.variable_out = PRE_TARGETDEPS
win32:copy2build.commands = $$QMAKE_COPY \"${QMAKE_FILE_IN}\" \"${QMAKE_FILE_OUT}\"
unix:copy2build.commands = $$QMAKE_COPY ${QMAKE_FILE_IN} ${QMAKE_FILE_OUT}
copy2build.name = COPY ${QMAKE_FILE_IN}
copy2build.config += no_link
QMAKE_EXTRA_COMPILERS += copy2build
}
static.files = $$STATIC_FILES
static.base = $$STATIC_BASE
static.path = $$STATIC_INSTALL_BASE
INSTALLS += static
}
QMAKE_EXTRA_COMPILERS
指定額外編譯器或前處理器的串列,
另請參閱Adding Compilers,
Adding Compilers
可以自定義qmake以支持新的編譯器和前處理器:
new_moc.output = moc_${QMAKE_FILE_BASE}.cpp new_moc.commands = moc ${QMAKE_FILE_NAME} -o ${QMAKE_FILE_OUT} new_moc.depend_command = g++ -E -M ${QMAKE_FILE_NAME} | sed "s,^.*: ,," new_moc.input = NEW_HEADERS QMAKE_EXTRA_COMPILERS += new_moc根據上述定義,您可以使用moc的直接替代品(如果有), 該命令執行時,附加在NEW_HEADERS變數中定義的所有引數(來自input成員),并將結果寫入output成員定義的檔案中, 該檔案被添加到專案的其他源檔案中, 另外,qmake將執行depend_command來生成依賴資訊,并將該資訊也放置在專案中,
自定義編譯器規范支持以下成員:
不常用,略,
注釋說的很明確,基于STATIC_OUTPUT_BASE與STATIC_BASE的不同,處理條件拷貝,
示例1
首先我們來看一個示例,源目錄\src\share\qtcreator\data.pro
TEMPLATE = aux
include(../../../qtcreator.pri)
STATIC_BASE = $$PWD
STATIC_OUTPUT_BASE = $$IDE_DATA_PATH
STATIC_INSTALL_BASE = $$INSTALL_DATA_PATH
STATIC_FILES = \
$$PWD/externaltools/lrelease.xml \
$$PWD/externaltools/lupdate.xml \
$$PWD/externaltools/qmlviewer.xml \
$$PWD/externaltools/qmlscene.xml
unix {
osx:STATIC_FILES += $$PWD/externaltools/vi_mac.xml
else:STATIC_FILES += $$PWD/externaltools/vi.xml
} else {
STATIC_FILES += $$PWD/externaltools/notepad_win.xml
}
include(../../../qtcreatordata.pri)
data.pro首先定義了用法中描述的四個變數,然后呼叫qtcreatordata.pri,
要部署的檔案STATIC_FILES,源目錄src/share/qtcreator/externaltools/*
待部署檔案的基礎目錄STATIC_BASE,源目錄/src/share/qtcreator
編譯輸出目錄STATIC_OUTPUT_BASE,構建目錄/share/qtcreator
安裝輸出目錄STATIC_INSTALL_BASE,安裝目錄/share/qtcreator
下面分析接著分析qtcreatordata.pri,
- 如果四個變數有一個值為空,則退出,
- 如果STATIC_BASE與STATIC_OUTPUT_BASE不一樣,則自定義編譯物件copy2build,指定輸入input,輸出output,拷貝命令commands,描述name,配置config,
- 設定安裝集static,
示例2
我們再來看一個示例,源目錄\src\share\3rdparty\data.pro
TEMPLATE = aux
include(../../../qtcreator.pri)
STATIC_BASE = $$PWD
STATIC_OUTPUT_BASE = $$IDE_DATA_PATH
STATIC_INSTALL_BASE = $$INSTALL_DATA_PATH
DATA_DIRS = \
generic-highlighter \
fonts
for(data_dir, DATA_DIRS) {
STATIC_FILES += $$files($$PWD/$$data_dir/*, true)
}
include(../../../qtcreatordata.pri)
和上一個類似,
這里大家注意下第一行TEMPLATE = aux,我們在qt creator原始碼全方面分析(3-1)介紹過,aux的含義是:
創建一個不生成任何內容的Makefile, 如果不需要呼叫任何編譯器來創建目標,請使用此選項;
小節
想必大家也明白了,這個pri的功能,其實就是開頭說的,把這些資料/組態檔等復制到構建目錄中,
原創造福大家,共享改變世界
獻出一片愛心,溫暖作者心靈
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/14323.html
標籤:其他
