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

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

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 += widgets
TARGET = demo
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += LINUX_OS_VERSION==$$QT_ARCH
DEFINES += QT_MESSAGELOGCONTEXT
# 可选:禁用Qt5.6及更早版本已弃用的API
# DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
message($$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 += widget
INCLUDEPATH += log
INCLUDEPATH += mqtt
INCLUDEPATH += util
SOURCES += main.cpp
SOURCES += tapplication.cpp
SOURCES += log/LogFileManager.cpp
SOURCES += widget/mainwidget.cpp
SOURCES += mqtt/mqttclient.cpp
SOURCES += util/json.cpp
SOURCES += businesscontrol.cpp
HEADERS += tapplication.h
HEADERS += widget/mainwidget.h
HEADERS += log/LogFileManager.h
HEADERS += globaldef.h
HEADERS += mqtt/mqttclient.h
HEADERS += util/json.h
HEADERS += businesscontrol.h
FORMS += widget/toolbar.ui
# 常用编译选项
QMAKE_CC += -g
QMAKE_CXX += -g
QMAKE_LINK += -g
message($$PWD)
message($$QT_SYSROOT)
INCLUDEPATH += $$QT_SYSROOT/usr/local/include/****
LIBS += -lpaho-mqtt3a
DISTFILES +=

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/

你可能感兴趣的文章
Objective-C实现埃拉托斯特尼筛法算法(附完整源码)
查看>>
Objective-C实现域名解析(附完整源码)
查看>>
Objective-C实现域名转IP(附完整源码)
查看>>
Objective-C实现培根密码算法(附完整源码)
查看>>
Objective-C实现基于 LIFO的堆栈算法(附完整源码)
查看>>
Objective-C实现基于 LinkedList 的添加两个数字的解决方案算法(附完整源码)
查看>>
Objective-C实现基于opencv的抖动算法(附完整源码)
查看>>
Objective-C实现基于事件对象实现线程同步(附完整源码)
查看>>
Objective-C实现基于文件流拷贝文件(附完整源码)
查看>>
Objective-C实现基于模板的双向链表(附完整源码)
查看>>
Objective-C实现基于模板的顺序表(附完整源码)
查看>>
Objective-C实现基本二叉树算法(附完整源码)
查看>>
Objective-C实现堆排序(附完整源码)
查看>>
Objective-C实现声音录制播放程序(附完整源码)
查看>>
Objective-C实现备忘录模式(附完整源码)
查看>>
Objective-C实现复制粘贴文本功能(附完整源码)
查看>>
Objective-C实现复数类+-x%(附完整源码)
查看>>
Objective-C实现外观模式(附完整源码)
查看>>
Objective-C实现多尺度MSR算法(附完整源码)
查看>>
Objective-C实现多种方法求解定积分(附完整源码)
查看>>