#设置cmake需要的最低版本
cmake_minimum_required(VERSION 3.5)
#设置项目名称,版本等信息、编程语言
project(CamkeTest VERSION 0.1 LANGUAGES CXX)
#自动处理编译,ui编译、元对象编译、资源编译
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
#设置C++标准,并要求编译器支持
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#在第一个find_package函数中,CMake尝试查找并加载Qt6,如果找不到再尝试Qt5,
#同时CMake将要求同时加载Widgets和PrintSupport这两个模块,REQUIRED关键字确保这些模块是必需的,
#如果找不到任何一个模块,将会导致CMake错误并停止构建过程。
#在这个过程中,CMake将对QT_VERSION_MAJOR变量进行赋值告诉我们使用到的QT版本是什么。
#在第二个find_package函数中,根据第一个find_package函数中找到的QT版本来引用具体的模块。这样连续的两个find_package,确保了之后的构建过程中使用到的模型能够和先前找到的Qt版本匹配。
##查找依赖库
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
#源代码
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
# 包含源文件目录
#INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR})
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(CamkeTest
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET CamkeTest APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(CamkeTest 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(CamkeTest
${PROJECT_SOURCES}
)
endif()
endif()
#Qt模块链接到目标可执行文件或动态库。
target_link_libraries(CamkeTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
# 设置目标可执行文件的属性,如MacOSX的Bundle标识符、版本号和短版本字符串,以及在Windows下作为可执行文件运行。
set_target_properties(CamkeTest PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
#安装前缀
set(CMAKE_INSTALL_PREFIX "../install")
install(TARGETS CamkeTest
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
message("libPath:" ${CMAKE_INSTALL_LIBDIR})
message("binPath:" ${CMAKE_INSTALL_BINDIR})
message("prefixPath:" ${CMAKE_INSTALL_PREFIX})
# 重定向目标输出位置
#set_target_properties(CamkeTest
# PROPERTIES
# RUNTIME_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/bin # 可执行文件
# LIBRARY_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib # 动态库
# ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_INSTALL_PREFIX}/lib # 静态库
#)
# 如果使用的是Qt 6,则使用"qt_finalize_executable"进行最后的可执行文件处理。
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(CamkeTest)
endif()
QT6 CmakeList.txt 相关指令说明
最新推荐文章于 2025-04-28 01:14:18 发布