博客
关于我
QMake 工程 转换为CMake 工程
阅读量:776 次
发布时间:2019-03-24

本文共 6284 字,大约阅读时间需要 20 分钟。

QMake 工程转换为CMake 工程

源码目录结构

项目源码目录结构清晰,包含以下主要文件和文件夹:

.├── build.sh├── businesscontrol.cpp├── businesscontrol.h├── globaldef.h├── lib│   └── x86_64├── log│   ├── LogFileManager.cpp│   ├── LogFileManager.h├── main.cpp├── mqtt│   ├── mqttclient.cpp│   ├── mqttclient.h├── demo.pro├── CMakeList.txt├── res│   ├── closea.png│   ├── closeb.png│   └── close.png├── tapplication.cpp├── tapplication.h├── util│   ├── json.cpp│   │   └── json.h└── widget    ├── mainwidget.cpp    ├── mainwidget.h

QMake Demo

QMake项目配置文件(demo.pro)如下:

#-------------------------------------------------# 项目由 QtCreator 创建于 2021-01-04T09:37:29#-------------------------------------------------QT       += core greaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = demoTEMPLATE = appDEFINES += QT_DEPRECATED_WARNINGSDEFINES += LINUX_OS_VERSION==$$QT_ARCHDEFINES += QT_MESSAGELOGCONTEXT# 可选:禁用Qt5.6及更早版本已弃用的API# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000message($$QT_ARCH)message($$QT_VERSION)contains(QT_ARCH, x86_64) {    message("LINUX_OS_X86_64")    DEFINES += LINUX_OS_X86_64} else {    message("LINUX_OS_ARM64")    DEFINES += LINUX_OS_ARM64}exists (../.git) {    GIT_BRANCH = $$system(git rev-parse --abbrev-ref HEAD)    GIT_TIME = $$system(git show --oneline --format="%ci%H" -s HEAD)    APP_VERSION = "VersionInfo: $$${GIT_BRANCH} : $$${GIT_TIME}"} else {    APP_VERSION = None}DEFINES += APP_VERSION=\"\\\"$$APP_VERSION\\\"\" message($$APP_VERSION)INCLUDEPATH += widgetINCLUDEPATH += logINCLUDEPATH += mqttINCLUDEPATH += utilSOURCES += main.cppSOURCES += tapplication.cppSOURCES += log/LogFileManager.cppSOURCES += widget/mainwidget.cppSOURCES += mqtt/mqttclient.cppSOURCES += util/json.cppSOURCES += businesscontrol.cppHEADERS += tapplication.hHEADERS += widget/mainwidget.hHEADERS += log/LogFileManager.hHEADERS += globaldef.hHEADERS += mqtt/mqttclient.hHEADERS += util/json.hHEADERS += businesscontrol.hFORMS += widget/toolbar.ui# 常用编译选项QMAKE_CC += -gQMAKE_CXX += -gQMAKE_LINK += -gmessage($$PWD)message($$QT_SYSROOT)INCLUDEPATH += $$QT_SYSROOT/usr/local/include/****LIBS += -lpaho-mqtt3aDISTFILES +=

CMake Demo

CMake项目文件(CMakeList.txt)如下:

cmake_minimum_required(VERSION 3.5)project(demo LANGUAGES CXX)# 项目名称及语言set(CMAKE_INCLUDE_CURRENT_DIR ON)# 当前目录包含目标文件set(CMAKE_AUTOUIC ON)  # UI 支持set(CMAKE_AUTOMOC ON)  # MOC 支持set(CMAKE_AUTORCC ON)  # 资源文件支持set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED ON)if(ANDROID) {    set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")    if (ANDROID_ABI STREQUAL "armeabi-v7a") {        set(ANDROID_EXTRA_LIBS             ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libcrypto.so            ${CMAKE_CURRENT_SOURCE_DIR}/path/to/libssl.so)    endif()endif()set(QT_MESSAGELOGCONTEXT TRUE)add_definitions(-DQT_MESSAGELOGCONTEXT)# Git 版本信息set(GIT_COMMIT_HASH "")set(GIT_BRANCH_NAME "")find_package(Git QUIET)if(GIT_FOUND)     execute_process(        COMMAND ${GIT_EXECUTABLE} log -1 --pretty=format:%ci%H        OUTPUT_VARIABLE GIT_COMMIT_HASH        OUTPUT_STRIP_TRAILING_WHITESPACE        ERROR_QUIET        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}    )    execute_process(        COMMAND ${GIT_EXECUTABLE} symbolic-ref --short -q HEAD        OUTPUT_VARIABLE GIT_BRANCH_NAME        OUTPUT_STRIP_TRAILING_WHITESPACE        ERROR_QUIET        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}    )endif()set(APP_VERSION "VersionInfo: ${GIT_BRANCH_NAME}:${GIT_COMMIT_HASH}")message(STATUS ${APP_VERSION})configure_file(    ${CMAKE_CURRENT_SOURCE_DIR}/ver.h.ini    ${CMAKE_BINARY_DIR}/ver.h    @ONLY)# 系统信息打印message(STATUS "cmake-version: ${CMAKE_VERSION}")message(STATUS "system_name: ${CMAKE_HOST_SYSTEM_NAME}")message(STATUS "system_version: ${CMAKE_HOST_SYSTEM_PROCESSOR}")message(STATUS "system_kernel: ${CMAKE_HOST_SYSTEM_VERSION}")if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "x86_64") {    message(STATUS "LINUX_OS_X86_64")    set(LINUX_OS_X86_64 TRUE)    add_definitions(-DLINUX_OS_X86_64)} elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "AARCH64") {    message(STATUS "LINUX_OS_ARM64")    set(LINUX_OS_ARM64 TRUE)    add_definitions(-DLINUX_OS_ARM64)endif()include_directories(${CMAKE_CURRENT_SOURCE_DIR}/widget                    ${CMAKE_CURRENT_SOURCE_DIR}/log                    ${CMAKE_CURRENT_SOURCE_DIR}/mqtt                    ${CMAKE_CURRENT_SOURCE_DIR}/util)include_directories(/usr/local/include/****)find_package(Qt NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} PROJECT_SOURCES)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/widget WIDGET_SOURCES)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/mqtt MQTT_SOURCES)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/util UTIL_SOURCES)aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/log LOG_SOURCES)set(PROJECT_LIBS paho-mqtt3a)if(${QT_VERSION_MAJOR} >= 6) {    qt_add_executable(demo        ${PROJECT_SOURCES}         ${WIDGET_SOURCES}         ${MQTT_SOURCES}         ${LOG_SOURCES}        ${UTIL_SOURCES}        ${SPICEUSB_SOURCES}    )} else() {    if(ANDROID) {        add_library(demo SHARED            ${PROJECT_SOURCES}            ${WIDGET_SOURCES}            ${MQTT_SOURCES}            ${LOG_SOURCES}            ${UTIL_SOURCES}            ${SPICEUSB_SOURCES}        )    } else() {        add_executable(demo            ${PROJECT_SOURCES}            ${WIDGET_SOURCES}            ${MQTT_SOURCES}            ${LOG_SOURCES}            ${UTIL_SOURCES}            ${SPICEUSB_SOURCES}        )    }endif()target_link_libraries(demo PRIVATE Qt${QT_VERSION_MAJOR}::Widgets ${PROJECT_LIBS})

QMake 与 CMake 对照转换表

QMake 语法 CMake 语法 备注
QT += core find_package(Qt NAMES Qt6 Qt5 ...) 依赖 Qt 的版本和组件
greaterThan(QT_MAJOR_VERSION, 4) - 无直接对应 版本检查
TARGET = demo project(demo LANGUAGES CXX) 项目名称及语言
TEMPLATE = app - 无直接对应 主要模块类型
DEFINES += ... add_definitions(...) 预处理符号定义
INCLUDEPATH += ... include_directories(...) 访问头文件路径
SOURCES += ... aux_source_directory(...) 源文件路径
HEADERS += ... - 无直接对应 头文件路径
Forms += ... - 无直接对应 UI 文件路径
QMAKE_CC += -g set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") 编译选项 -g
SUSINESS选项 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") C++ 编译选项 -g
message(... message("...") thông báo信息
exists(... execute_process(...) 执行 shell 命令
以上内容适用于 Qt6.0 及更高版本的 CMake 项目生成,默认包含了现代化编译选项和依赖管理功能。

转载地址:http://nslkk.baihongyu.com/

你可能感兴趣的文章
Mstsc 远程桌面链接 And 网络映射
查看>>
Myeclipse常用快捷键
查看>>
MyEclipse更改项目名web发布名字不改问题
查看>>
MyEclipse用(JDBC)连接SQL出现的问题~
查看>>
mt-datetime-picker type="date" 时间格式 bug
查看>>
myeclipse的新建severlet不见解决方法
查看>>
MyEclipse设置当前行背景颜色、选中单词前景色、背景色
查看>>
Mtab书签导航程序 LinkStore/getIcon SQL注入漏洞复现
查看>>
myeclipse配置springmvc教程
查看>>
MyEclipse配置SVN
查看>>
MTCNN 人脸检测
查看>>
MyEcplise中SpringBoot怎样定制启动banner?
查看>>
MyPython
查看>>
MTD技术介绍
查看>>
MySQL
查看>>
MySQL
查看>>
mysql
查看>>
MTK Android 如何获取系统权限
查看>>
MySQL - 4种基本索引、聚簇索引和非聚索引、索引失效情况、SQL 优化
查看>>
MySQL - ERROR 1406
查看>>