nba網(wǎng)站建設(shè)營(yíng)銷技巧五步推銷法
CMake與Qt4/Qt5的結(jié)合使用指南
- 一、同時(shí)使用Qt 4和Qt 5
- 二、Qt構(gòu)建工具
- 2.1 AUTOMOC
- 2.2 AUTOUIC
- 2.3 AUTORCC
- 三、<ORIGIN>_autogen目標(biāo)
- 四、Visual Studio生成器
- 五、Windows上的qtmain.lib
- 六、其他文章推薦
在CMake中,您可以方便地找到并使用Qt 4和Qt 5庫(kù)。Qt 4庫(kù)通過CMake自帶的
FindQt4
模塊來查找,而Qt 5庫(kù)則通過Qt 5自帶的“配置文件包”來查找。
一、同時(shí)使用Qt 4和Qt 5
在同一個(gè)CMake構(gòu)建系統(tǒng)中,您可以同時(shí)使用Qt 4和Qt 5。以下是一個(gè)示例CMakeLists.txt文件的代碼:
cmake_minimum_required(VERSION 3.8.0 FATAL_ERROR)project(Qt4And5)set(CMAKE_AUTOMOC ON)find_package(Qt5 COMPONENTS Widgets DBus REQUIRED)
add_executable(publisher publisher.cpp)
target_link_libraries(publisher Qt5::Widgets Qt5::DBus)find_package(Qt4 REQUIRED)
add_executable(subscriber subscriber.cpp)
target_link_libraries(subscriber Qt4::QtGui Qt4::QtDBus)
需要注意的是,CMake目標(biāo)不能同時(shí)鏈接Qt 4和Qt 5。如果嘗試這樣做,CMake會(huì)發(fā)出警告。
二、Qt構(gòu)建工具
Qt依賴一些捆綁工具來進(jìn)行代碼生成,例如moc
(元對(duì)象代碼生成)、uic
(小部件布局和填充)以及rcc
(虛擬文件系統(tǒng)內(nèi)容生成)。這些工具可以在適當(dāng)條件下由CMake自動(dòng)調(diào)用,適用于Qt 4和Qt 5。
2.1 AUTOMOC
AUTOMOC
目標(biāo)屬性控制CMake是否檢查目標(biāo)中的C++文件,以確定是否需要運(yùn)行moc
并在適當(dāng)時(shí)機(jī)創(chuàng)建執(zhí)行規(guī)則。如果在頭文件中找到AUTOMOC_MACRO_NAMES
中的宏,CMake將運(yùn)行moc
并生成相應(yīng)的moc_<basename>.cpp
文件。
生成的moc_*.cpp
和*.moc
文件將存放在<AUTOGEN_BUILD_DIR>/include
目錄中,并自動(dòng)添加到目標(biāo)的INCLUDE_DIRECTORIES
中。
對(duì)于多配置生成器,包括目錄為<AUTOGEN_BUILD_DIR>/include_<CONFIG>
。
2.2 AUTOUIC
AUTOUIC
目標(biāo)屬性控制CMake是否檢查目標(biāo)中的C++文件,以確定是否需要運(yùn)行uic
。如果找到與<path>ui_<basename>.h
匹配的預(yù)處理#include
指令,并且存在相應(yīng)的<basename>.ui
文件,則會(huì)執(zhí)行uic
以生成相應(yīng)的文件。
生成的ui_*.h
文件將放在<AUTOGEN_BUILD_DIR>/include
目錄中,并自動(dòng)添加到目標(biāo)的INCLUDE_DIRECTORIES
中。
2.3 AUTORCC
AUTORCC
目標(biāo)屬性控制CMake是否在源文件后綴為.qrc
時(shí)創(chuàng)建規(guī)則以在適當(dāng)?shù)臅r(shí)間執(zhí)行rcc
。
三、_autogen目標(biāo)
moc
和uic
工具的執(zhí)行由CMake生成的合成<ORIGIN>_autogen
自定義目標(biāo)管理。默認(rèn)情況下,該目標(biāo)繼承了<ORIGIN>
目標(biāo)的依賴關(guān)系。
四、Visual Studio生成器
在使用Visual Studio生成器時(shí),CMake生成一個(gè)PRE_BUILD
自定義命令,而不是<ORIGIN>_autogen
自定義目標(biāo)。
五、Windows上的qtmain.lib
在Windows上,Qt 4和5的QtGui庫(kù)的IMPORTED目標(biāo)指定將鏈接Qt捆綁的qtmain.lib靜態(tài)庫(kù)。如果要禁用此行為,可以為基于Qt 5的目標(biāo)啟用Qt5_NO_LINK_QTMAIN
屬性,或?yàn)榛赒t 4的目標(biāo)啟用QT4_NO_LINK_QTMAIN
屬性。
add_executable(myexe WIN32 main.cpp)
target_link_libraries(myexe Qt4::QtGui)add_executable(myexe_no_qtmain WIN32 main_no_qtmain.cpp)
set_property(TARGET main_no_qtmain PROPERTY QT4_NO_LINK_QTMAIN ON)
target_link_libraries(main_no_qtmain Qt4::QtGui)
使用CMake構(gòu)建系統(tǒng)時(shí),結(jié)合Qt 4和Qt 5提供了靈活性和強(qiáng)大功能。通過適當(dāng)?shù)嘏渲肅Make屬性和目標(biāo),您可以有效管理Qt的代碼生成和庫(kù)鏈接,提升開發(fā)效率。希望這篇文章能夠幫助您更好地理解和使用CMake與Qt的結(jié)合。
六、其他文章推薦
- CMakeLists.txt從入門到精通(看這篇就夠)
- Cmake中Debug 、 Release 、RelWithDebInfo和 MinSizeRel類型說明
- cmake構(gòu)建動(dòng)態(tài)庫(kù)實(shí)例(cmakelist)
- C++構(gòu)建簡(jiǎn)單靜態(tài)庫(kù)實(shí)例(cmakelist)