CMake 使用概述

一、概述二、创建Qt CMake 项目三、简单介绍1. 引入Qt的库2.Qt CMake 引入第三方库3. Qt CMake 项目目录

四、使用案例

一、概述

CMake是一个简化跨不同平台开发项目的构建过程的工具。对C++来说其实就是生成一个文件,文件里面描述了,怎么组织这个工程,用编译器怎么编译这个项目之类的,这个CMake 本身不是一个编译器,其实就是生成一个让编译器能读懂编译流程的文件工具。让CMake自动生成构建系统,例如Makefiles和Visual Studio项目文件。CMake是一个第三方工具,有自己的文档。这里就是介绍一下在Qt 5中使用CMake 3.5 系列,反正是 CMake 3系列。

二、创建Qt CMake 项目

创建CMake 项目 其实和 qmake 创建项目一个流程,只是在选择 build 系统的时候选择 CMake 就可以啦,这里演示的是创建一个 界面软件的流程 生成的工程目录如下 CMake 的文件定位 其实我们所谓的写CMake其实就是 编写这个 CMakeLists 文件

三、简单介绍

这里就是简单介绍一下这个 CMakeLists 的一些指令。

# 这里就是说 cmake的版本

cmake_minimum_required(VERSION 3.5)

# 这里project 就是这个项目的名称,以及使用的编程语言,项目名称但不是这个生成可执行文件的名称哈

project(ssss LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

# 设置 uic moc rcc 自动编译,其实就是类似qmake 一样,把Qt自己的C++特性转换为标准c++内容

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)

# 支持c++ 11标准

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 就是找Qt 的模块

find_package(Qt5 COMPONENTS Widgets REQUIRED)

# 这里是一些安卓之类的可不管

if(ANDROID)

add_library(TestCmakeApp SHARED

main.cpp

mainwindow.cpp

mainwindow.h

mainwindow.ui

)

else()

# 这里的 add_executable就是生成可执行文件,第一个是可执行文件名,后面就是源文件之类的

add_executable(TestCmakeApp

main.cpp

mainwindow.cpp

mainwindow.h

mainwindow.ui

)

endif()

# 链接一些动态库,这个第一次就是可执行文件名,后面就是一些库

target_link_libraries(TestCmakeApp PRIVATE Qt5::Widgets)

project(ssss LANGUAGES CXX) #运行截图如下

其实Qt 使用CMake 我个人使用的时候至少要几个功能:

一、引入第三方库二、组织项目结构

有这些其实就是完全够用的

1. 引入Qt的库

注意要点就是 find_package() 引入包 target_link_libraries()来链接库 下面用示例来说明

find_package() 理解 find_package(Qt5 COMPONENTS 模块名 REQUIRED) 这里的模块名 可以是大写的也可以小写,我试验过了,都可以,但还是推荐首字母大写就行。模块名其实和qmake的一样,以 Qt SQL 模块举例,这个模块名就是下面 QT += sql 里面的 。sql。 也可以用 find_package(Qt模块名 REQUIRED)

# find_package() 引入包

# 写法1 -> 合并写法 推荐写这个

find_package(Qt5 COMPONENTS Core Widgets Sql Script SerialPort REQUIRED)

# 写法2 -> 分离写法

find_package(Qt5Core REQUIRED)

find_package(Qt5Widgets REQUIRED)

find_package(Qt5SerialPort REQUIRED)

find_package(Qt5Sql REQUIRED)

find_package(Qt5Script REQUIRED)

# 注意不能这么写,这种是错的

find_package(Qt5Core Qt5Widgets REQUIRED)

target_link_libraries() 理解 target_link_libraries(Hello PRIVATE Qt5::Widgets),第一个 Hello 就是可执行文件名,后面 PRIVATE 是修饰词可不管,后面的 Qt5::Widgets 就是链接的模块库的名字,后面可以继续追加库名

# 都是可以用的

target_link_libraries(Hello Qt5::Widgets)

target_link_libraries(Hello PRIVATE Qt5::Widgets)

target_link_libraries(Hello PRIVATE Qt5::Core Qt5::Widgets Qt5::Sql Qt5::SerialPort Qt5::Script)

这里写的一些变量的路径可以在 Qt Build 里配置的

2.Qt CMake 引入第三方库

3. Qt CMake 项目目录

四、使用案例

cmake_minimum_required(VERSION 3.5)

project(CMakeAPP LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

file(GLOB_RECURSE SOURCES "*.cpp" "*.cxx" "*.cc")

file(GLOB_RECURSE HEADERS "*.h")

file(GLOB_RECURSE RESOURCES "*.qrc")

file(GLOB_RECURSE FORMS *.ui)

set(SRCS ${SOURCES} ${HEADERS} ${RESOURCES} ${FORMS})

source_group("Header" FILES ${HEADERS})

source_group("Sources" FILES ${SOURCES})

source_group("Ui" FILES ${FORMS})

source_group("Resource" FILES ${RESOURCES})

find_package(Qt5 COMPONENTS Core Widgets Sql Script SerialPort REQUIRED)

#find_package(Qt5Core REQUIRED)

#find_package(Qt5Widgets REQUIRED)

#find_package(Qt5SerialPort REQUIRED)

#find_package(Qt5Sql REQUIRED)

#find_package(Qt5Script REQUIRED)

foreach(plugin ${Qt5Network_PLUGINS})

get_target_property(_loc ${plugin} LOCATION)

message("Plugin ${plugin} is at location ${_loc}")

endforeach()

add_executable(CMakeAPP

main.cpp

MainWindow.cpp

MainWindow.h

MainWindow.ui

./Part1/NewWindow.cpp

./Part1/NewWindow.h

./Part1/NewWindow.ui

./Part2/form.cpp

./Part2/form.h

./Part2/form.ui

)

target_link_libraries(CMakeAPP PRIVATE Qt5::Core Qt5::Widgets Qt5::Sql Qt5::SerialPort Qt5::Script)

相关阅读

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。