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的功能,其實就是開頭說的,把這些數據/配置文件等復制到構建目錄中。

原創造福大家,共享改變世界
獻出一片愛心,溫暖作者心靈
