QT開發(fā)CmakeLists文件詳解
# **指定當前所需cmake最低版本為3.5
cmake_minimum_required(VERSION 3.5)
#? **項目名稱ProjectName 版本號0.1 使用的語言C++
project(ProjectName VERSION 0.1 LANGUAGES CXX)
#? **設置自動編譯
#? 使自動編譯UIC(將ui文件轉換成c++可編譯或鏈接的文件) MOC(將qt元對象轉換為c++可編譯或鏈接的文件) RCC(將其他可資源文件轉換為c++可編譯或鏈接的文件) 可用
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
#? **設置編譯器
# 設置使用的c++編譯器版本
set(CMAKE_CXX_STANDARD 17)
# 設置支持當前c++編譯器
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# **查找并加載外部依賴包
# 首先查找并加載qt6 找不到就找qt5加載 CMake將要求同時加載Widgets和PrintSupport模塊,REQUIRED關鍵字確保這些模塊是必需的,當找不到模塊時,會導致CMake錯誤并停止構建。構建過程中,CMake將使用到的QT版本對QT_VERSION_MAJOR變量進行賦值。
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
#根據第一個find_package函數中找到的QT版本來引用具體的模塊。連續(xù)的兩個find_package,確保后續(xù)構建過程中使用到的模型與先前找到的Qt版本匹配。
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
# **定義項目的源文件列表 包含項目源文件目錄
set(PROJECT_SOURCES
? ? ? ? main.cpp
? ? ? ? pj.cpp
? ? ? ? pj.h
? ? ? ? pj.ui
? ? ? ? qrc.qrc
)
# 包含源文件目錄 優(yōu)化項目 大佬添加
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
# **創(chuàng)建可執(zhí)行文件
#? 如果Qt的主要版本號大于等于6,則使用"qt_add_executable"來創(chuàng)建可執(zhí)行文件。否則,根據目標平臺選擇創(chuàng)建動態(tài)庫(Android)或可執(zhí)行文件。
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
? ? qt_add_executable(ProjectName
? ? ? ? MANUAL_FINALIZATION
? ? ? ? ${PROJECT_SOURCES}
? ? )
else()
? ? if(ANDROID)
? ? ? ? add_library(ProjectName SHARED
? ? ? ? ? ? ${PROJECT_SOURCES}
? ? ? ? )
# Define properties for Android with Qt 5 after find_package() calls as:
#? ? set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
? ? else()
? ? ? ? add_executable(ProjectName
? ? ? ? ? ? ${PROJECT_SOURCES}
? ? ? ? )
? ? endif()
endif()
#? **鏈接可執(zhí)行文件并設置屬性
# 將Qt模塊鏈接到目標可執(zhí)行文件或動態(tài)庫。
target_link_libraries(ProjectName PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
if(${QT_VERSION} VERSION_LESS 6.1.0)
? set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ProjectName)
endif()
# 設置目標可執(zhí)行文件的屬性,如MacOSX的Bundle標識符、版本號和短版本字符串,以及在Windows下作為可執(zhí)行文件運行。這個部分負責將Qt模塊鏈接到目標可執(zhí)行文件或動態(tài)庫
set_target_properties(ProjectName PROPERTIES
? ? ${BUNDLE_ID_OPTION}
? ? MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
? ? MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
? ? MACOSX_BUNDLE TRUE
? ? WIN32_EXECUTABLE TRUE
)
#? **安裝目標可執(zhí)行文件到指定的目錄
include(GNUInstallDirs)
install(TARGETS ProjectName
? ? BUNDLE DESTINATION .
? ? LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
? ? RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
#? *QT6環(huán)境下可執(zhí)行文件最后處理
#qt_finalize_executable是一個CMake宏,用于在構建Qt應用程序時進行最后的可執(zhí)行文件處理。qt_finalize_executable宏僅在使用Qt 6時才需要調用。
if(QT_VERSION_MAJOR EQUAL 6)
? ? qt_finalize_executable(ProjectName)
endif()
本文為自己精簡撰寫,素材采集如下。
素材支持:
解析QT6自動生成的CMake文件 - 知乎 (zhihu.com)
CMake應用:CMakeLists.txt完全指南 - 知乎 (zhihu.com)
CMake應用:核心語法篇 - 知乎 (zhihu.com)
CMake應用:基礎篇 - 知乎 (zhihu.com)
在此感謝以上文章撰寫者!
如有不妥,請聯系本人處理!