午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

Qt | CMake(Qt5 VS Qt6)

 芥子c1yw3tb42g 2024-10-18

01、CMake

>>>

CMake是一個(gè)簡化跨不同平臺開發(fā)項(xiàng)目構(gòu)建過程的工具。CMake自動(dòng)生成生成系統(tǒng),如Makefiles和Visual Studio項(xiàng)目文件。

CMake是一個(gè)自帶的第三方工具證明文件。

CMake 備忘清單

02、如何使用CMake3.1.0帶Qt 5

>>>

開始find_package找到Qt附帶的庫和頭文件。然后,您可以將這些庫和頭文件與target_link_libraries命令來構(gòu)建基于Qt的庫和應(yīng)用程序。該命令自動(dòng)添加適當(dāng)?shù)陌夸?、編譯定義、獨(dú)立于位置的代碼標(biāo)志以及到qtmain.lib

例如,Windows上的庫。

03、構(gòu)建GUI執(zhí)行文件

>>>

要構(gòu)建helloworld GUI可執(zhí)行文件,您需要以下內(nèi)容:

find_package為了成功,CMake必須通過以下方式之一找到Qt安裝:

  1. 【1】將CMAKE_PREFIX_PATH環(huán)境變量設(shè)置為Qt 5安裝前綴。這是推薦的方式。

    【2】將CMake緩存中的Qt5_DIR設(shè)置為Qt5Config.cmake文件的位置。






# 設(shè)置CMake的最低版本要求為3.1.0cmake_minimum_required(VERSION 3.1.0)
# 定義項(xiàng)目名稱為helloworld,版本為1.0.0,使用C++語言project(helloworld VERSION 1.0.0 LANGUAGES CXX)
# 設(shè)置C++標(biāo)準(zhǔn)為C++11set(CMAKE_CXX_STANDARD 11)# 確保所指定的C++標(biāo)準(zhǔn)是必需的set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 開啟自動(dòng)處理MOC(元對象編譯器)、資源文件(RCC)和UI文件(UIC)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)set(CMAKE_AUTOUIC ON)
# 如果CMake版本低于3.7.0,則設(shè)置包含當(dāng)前目錄的選項(xiàng)為開啟if(CMAKE_VERSION VERSION_LESS '3.7.0') set(CMAKE_INCLUDE_CURRENT_DIR ON)endif()
# 找到Qt5庫中的Widgets組件,并且要求這個(gè)組件是必需的find_package(Qt5 COMPONENTS Widgets REQUIRED)
# 定義可執(zhí)行文件helloworld,并指定其源文件和資源文件add_executable(helloworld mainwindow.ui # UI文件 mainwindow.cpp # 主窗口的源文件 main.cpp # 主程序的源文件 resources.qrc # 資源文件)
# 將Qt5的Widgets庫鏈接到helloworld可執(zhí)行文件target_link_libraries(helloworld Qt5::Widgets)

04、導(dǎo)入庫目標(biāo)

>>>

加載的每個(gè)Qt模塊都定義了一個(gè)CMake庫目標(biāo)。目標(biāo)名以Qt5:::開頭,后面是模塊名。比如:Qt5::Core,Qt5::Gui。將庫目標(biāo)的名稱傳遞給target_link_libraries以使用相應(yīng)的庫。

注意:從Qt 5.15開始,CMake目標(biāo)也可以作為Qt::Core、Qt::Gui等等使用。這簡化了編寫可以在Qt 5和Qt 6上運(yùn)行的CMake代碼。

導(dǎo)入的目標(biāo)使用與配置Qt時(shí)相同的配置創(chuàng)建。那就是:

【1】如果用-debug開關(guān)配置了Qt,則會創(chuàng)建一個(gè)帶有調(diào)試配置的導(dǎo)入目標(biāo)。

【2】如果Qt是用-release開關(guān)配置的,則會創(chuàng)建一個(gè)帶有release配置的導(dǎo)入目標(biāo)。

【3】如果Qt是用-debug-and-release開關(guān)配置的,那么導(dǎo)入的目標(biāo)是用發(fā)布和調(diào)試配置創(chuàng)建的。

如果您的項(xiàng)目具有自定義的CMake構(gòu)建配置,您必須將您的自定義配置映射到debug或release Qt配置。











# 查找Qt5庫中的Core組件,并且要求這個(gè)組件是必需的find_package(Qt5 COMPONENTS Core REQUIRED)
# 設(shè)置覆蓋率編譯選項(xiàng),將Release配置的編譯標(biāo)志與覆蓋率選項(xiàng)結(jié)合set(CMAKE_CXX_FLAGS_COVERAGE '${CMAKE_CXX_FLAGS_RELEASE} -fprofile-arcs -ftest-coverage')
# 設(shè)置屬性,將Qt5::Core的COVERAGE配置映射到RELEASE配置# 這意味著在覆蓋率構(gòu)建時(shí)使用Release版本的Qt5::Coreset_target_properties(Qt5::Core PROPERTIES MAP_IMPORTED_CONFIG_COVERAGE 'RELEASE')

05、模塊變量

>>>

用find_package加載的Qt模塊設(shè)置各種變量。

例如,find _ package(Qt5 COMPONENTS Widgets)成功時(shí),會使以下變量可用:


變量描述
Qt5Widgets_COMPILE_DEFINITIONS

根據(jù)庫進(jìn)行構(gòu)建時(shí)要使用的編譯定義列表。

Qt5Widgets_DEFINITIONS

根據(jù)庫進(jìn)行構(gòu)建時(shí)要使用的定義列表。

Qt5Widgets_EXECUTABLE_COMPILE_FLAGS

根據(jù)庫生成可執(zhí)行文件時(shí)使用的標(biāo)志字符串。

Qt5Widgets_FOUND

描述是否成功找到模塊的布爾值。

Qt5Widgets_INCLUDE_DIRS

構(gòu)建庫時(shí)要使用的包含目錄列表。

Qt5Widgets_LIBRARIES

模塊導(dǎo)入目標(biāo)的名稱:Qt5::Widgets

Qt5Widgets_PRIVATE_INCLUDE_DIRS

構(gòu)建庫和使用私有Qt API時(shí)使用的私有include目錄列表。

Qt5Widgets_VERSION_STRING

包含模塊版本的字符串。

06、安裝變量

>>>

此外,還有一些變量與特定的包無關(guān),而是與Qt安裝本身有關(guān)。

變量描述
QT_DEFAULT_MAJOR_VERSION在混合Qt 5和Qt 6項(xiàng)目的情況下,控制qt_ commands轉(zhuǎn)發(fā)到的Qt版本的整數(shù)。在相應(yīng)的find_package()調(diào)用之前,需要將它設(shè)置為5或6。如果設(shè)置為5,以qt_開頭的命令將調(diào)用以qt5_開頭的命令。如果設(shè)置為6,它們將調(diào)用以qt6_開始的對應(yīng)方。如果沒有設(shè)置,第一個(gè)find_package調(diào)用將定義默認(rèn)版本。這個(gè)功能是在Qt 5.15中添加的。
QT_LIBINFIX

用-libinfix配置Qt時(shí),保存庫名中使用的中綴的字符串。

QT_NO_CREATE_VERSIONLESS_FUNCTIONS

從Qt 5.15開始,模塊不僅定義了以qt5_開頭的命令,還定義了以qt_開頭的命令??梢栽趂ind_package之前設(shè)置QT_NO_CREATE_VERSIONLESS_TARGETS 來防止這種情況。

QT_NO_CREATE_VERSIONLESS_TARGETS

從Qt 5.15開始,模塊不僅定義了以Qt 5:::開頭的目標(biāo),還定義了以Qt:::開頭的目標(biāo)??梢栽趂ind_package之前設(shè)置QT_NO_CREATE_VERSIONLESS_TARGETS 來防止這種情況。

QT_VISIBILITY_AVAILABLE

在Unix上,描述Qt庫和插件是否用-fvisibility=hidden編譯的布爾值。這意味著只導(dǎo)出選定的符號。

07、CMake命令參考

Qt5::Core
qt5_add_big_resources

將大型二進(jìn)制資源編譯成目標(biāo)代碼

qt5_add_binary_resources

從Qt資源文件列表創(chuàng)建一個(gè)RCC文件

qt5_add_resources

將二進(jìn)制資源編譯成源代碼

qt5_generate_moc

對輸入文件調(diào)用moc

qt5_import_plugins

指定要為靜態(tài)Qt構(gòu)建導(dǎo)入的自定義插件集

qt5_wrap_cpp

創(chuàng)建來源的.moc文件

qt_add_big_resources

將大型二進(jìn)制資源編譯成目標(biāo)代碼

qt_add_binary_resources

對輸入文件調(diào)用moc

qt_add_resources

指定要為靜態(tài)Qt構(gòu)建導(dǎo)入的自定義插件集

qt_generate_moc

對輸入文件調(diào)用moc

qt_import_plugins

指定要為靜態(tài)Qt構(gòu)建導(dǎo)入的自定義插件集

qt_wrap_cpp創(chuàng)建來源的.moc文件
Qt5::DBus
qt_add_dbus_adaptor

為D-Bus接口生成適配器類

qt_add_dbus_interface

生成實(shí)現(xiàn)D-Bus接口描述文件接口的C++源代碼

qt_add_dbus_interfaces

為D-Bus接口描述文件生成實(shí)現(xiàn)接口的C++源代碼

qt_generate_dbus_interface

從頭文件生成D-Bus接口

Qt5::LinguistTools
qt5_add_translation

編譯Qt語言學(xué)家.ts文件到.qm管理文件

qt5_create_translation

建立Qt語言學(xué)家翻譯工具鏈

Qt5::RemoteObjects

qt5_generate_repc

從Qt遠(yuǎn)程對象創(chuàng)建C++類型.rep文件

Qt5::Widgets

qt5_wrap_ui

為創(chuàng)建源.ui文件

qt_wrap_ui

為創(chuàng)建源.ui文件

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多