前言
首先回顧下前面文章介紹的:
在MFC中使用Qt(一):玩膩了MFC,試試在MFC中使用Qt!(手動配置編譯Qt)
在MFC中使用Qt(二):實現Qt文件的自動編譯流程
在MFC中使用Qt(三):通過編輯項目文件(.vcxproj)實現Qt的自動化編譯流程
本文將詳細介紹自動化Qt編譯流程的最后一種方式:使用屬性表(Property Sheet)實現自動化Qt編譯流程。
使用屬性表(Property Sheet)實現自動化Qt編譯流程
首先需要了解下屬性表的作用機制。
當你在項目中導入一個 .props 文件(屬性表),其內容會被插入到項目文件的 ?全局作用域 中,并與項目原有配置 ?合并。
具體行為如下:
屬性表中的這些節點會與項目文件中的同名節點合并。如果存在同名屬性,項目文件中的配置可能優先(取決于 MSBuild 的評估順序)。
因此本質上還是和方式二:編輯項目文件(.vcxproj)一樣。
這里再新建一個基于對話框的MFC項目MFCWithQtAuto3,創建后編譯運行:
接著參考手動編譯流程中的步驟①②,在MFC項目配置Qt環境。
步驟①配置Qt環境(必不可少!)
步驟②配置項目
Qt環境配置完成后編譯運行,確認沒有問題:
屬性表實現步驟③④的自動化Qt編譯流程
再通過屬性表實現步驟③④的自動化Qt編譯流程,大致流程如下:
創建通用屬性表,為所有 Qt 文件統一配置:
1)創建屬性表。
右鍵項目 → ?Add → New Item → 選擇 ?Property Sheet?(命名為 QtAuto.props)。
2)配置屬性表。
在 QtAuto.props 中定義以下規則(內容和方式二中的配置一致):
<!-- 自動包含 所有目錄下的 .ui 、moc、qrc文件 --><ItemGroup><UIFiles Include="**\*.ui" /></ItemGroup><!-- 自定義構建步驟,編譯 .ui 文件為 .h 文件 --><ItemGroup><CustomBuild Include="@(UIFiles)"><Command>"uic.exe" %(FullPath) -o $(ProjectDir)GeneratedFiles\uic\ui_%(Filename).h</Command><Outputs>$(ProjectDir)GeneratedFiles\ui_%(Filename).h</Outputs></CustomBuild></ItemGroup><!-- 自動包含 所有目錄下的 帶Q_OBJECT宏的.h 文件。因無法區分普通的C++.h,因此需要在一個目錄(這里是qt/UI目錄)中統一管理 --><ItemGroup><MocFiles Include="$(ProjectDir)qt\UI\*.h" /></ItemGroup><ItemGroup><CustomBuild Include="@(MocFiles)"><Command>"moc.exe" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\moc\moc_%(Filename).cpp"</Command><Outputs>$(ProjectDir)GeneratedFiles\moc_%(Filename).cpp</Outputs></CustomBuild></ItemGroup><ItemGroup><!-- 自動包括所有的 .qrc 文件 --><QrcFiles Include="**\*.qrc" /></ItemGroup><ItemGroup><CustomBuild Include="@(QrcFiles)"><Command>"rcc.exe" "%(FullPath)" -o "$(ProjectDir)GeneratedFiles\rcc\qrc_%(Filename).cpp"</Command><Outputs>$(ProjectDir)GeneratedFiles\qrc_%(Filename).cpp</Outputs></CustomBuild></ItemGroup><ItemGroup><ClCompile Include="$(ProjectDir)GeneratedFiles\moc\moc_*.cpp"><PrecompiledHeader>NotUsing</PrecompiledHeader></ClCompile><ClCompile Include="$(ProjectDir)GeneratedFiles\rcc\qrc_*.cpp"><PrecompiledHeader>NotUsing</PrecompiledHeader></ClCompile></ItemGroup><ItemDefinitionGroup><ClCompile><!-- 添加新路徑到現有包含目錄列表 --><AdditionalIncludeDirectories>GeneratedFiles\uic;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories></ClCompile></ItemDefinitionGroup>
3)應用屬性表。
進入屬性管理器視圖 -》 右鍵對應配置 -》 添加現有屬性表 -》 選擇剛剛創建的QtAuto.props:
同樣使用MFC按鈕點擊彈出Qt對話框測試示例:
編譯運行沒有問題:
總結
方式三:使用屬性表,本質上還是和方式二:編輯項目文件一樣,只是沒有直接編輯項目文件,而是通過創建一個同樣的QtAuto.props,再導入到當前項目文件中。
通過這種方式可以實現Qt自動化編譯流程屬性配置的復用,在多人協同開發情況下,其中一人配置好通用的Qt自動化編譯流程配置屬性表,直接通過該屬性表,可直接再另一個人的開發環境中導入配置使用,而無需再另外配置。