qt生成的exe文件解析
# 设置cmake最低版本,但是搞不懂为什么要设置
# 解释:后面的cmake命令可能用到一些新的特性,所以需要设置最低版本,如GREATER_EQUAL表达式
cmake_minimum_required(VERSION 3.5)
# 设置项目名称和版本、语言
project(ezSortPro VERSION 0.1 LANGUAGES CXX)
# qt的ui、信号槽、资源文件的编译设置
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
# 设置强制使用CMAKE_CXX_STANDARD变量的C++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 引入qt核心库,根据环境变量选择版本
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
# 添加要编译的文件:(源文件、头文件、ui文件、资源文件)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
# 添加到可执行文件
# if( qt版本 >= 6 )则使用qt_add_executable
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(ezSortPro
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
# if( Android )则执行add_library
if(ANDROID)
add_library(ezSortPro SHARED
${PROJECT_SOURCES}
)
# 否则执行add_executable
else()
add_executable(ezSortPro
${PROJECT_SOURCES}
)
endif()
endif()
# 添加qt的链接库
target_link_libraries(ezSortPro PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
# Qt for iOS 自 Qt 6.1 起自动设置 MACOSX_BUNDLE_GUI_IDENTIFIER。
# 如果您正在为 iOS 或 macOS 开发,则应考虑手动设置一个明确、固定的 bundle 标识符。
if(${QT_VERSION} VERSION_LESS 6.1.0)
set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.ezSortPro)
endif()
# 设置ezSortPro目标属性
set_target_properties(ezSortPro PROPERTIES
${BUNDLE_ID_OPTION}
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION} # 设置macOS应用程序包的版本号
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} # 设置macOS应用程序包的短版本号
MACOSX_BUNDLE TRUE # 指示CMake在生成macOS的构建系统时将此目标标记为macOS应用程序包
WIN32_EXECUTABLE TRUE # 指示CMake在生成Windows的构建系统时将此目标标记为Windows应用程序包
)
# 设置安装目录为GNU标准目录结构
include(GNUInstallDirs)
# 安装目标文件
install(TARGETS ezSortPro
BUNDLE DESTINATION . # 指定如果目标是一个macOS应用程序包,它将被安装到当前目录下
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} # 指定如果目标是一个库文件,它将被安装到${CMAKE_INSTALL_LIBDIR}所指定的目录中
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} # 指定如果目标是一个可执行文件,它将被安装到${CMAKE_INSTALL_BINDIR}所指定的目录中
)
# qt版本为6时,执行qt_finalize_executable
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(ezSortPro)
endif()
qt生成的库文件命令解析
# 设置cmake的最小版本
cmake_minimum_required(VERSION 3.14)
# 设置项目名称、编程语言
project(untitled LANGUAGES CXX)
# qt的ui、信号槽、资源文件的编译设置
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
# 设置强制使用CMAKE_CXX_STANDARD变量的C++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 引入qt核心库,根据环境变量选择版本
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
# 添加要编译的文件
add_library(untitled SHARED
untitled_global.h
untitled.cpp
untitled.h
)
# 添加qt的链接库
target_link_libraries(untitled PRIVATE Qt${QT_VERSION_MAJOR}::Core)
# 指定编译给定<target>时要使用的编译定义,https://runebook.dev/zh/docs/cmake/command/target_compile_definitions
target_compile_definitions(untitled PRIVATE UNTITLED_LIBRARY)