企业网站建设板块,免费网页浏览器,重庆旅游网站,深圳专业网站建设要求CMake 使用概述一、概述二、创建Qt CMake 项目三、简单介绍1. 引入Qt的库2.Qt CMake 引入第三方库3. Qt CMake 项目目录四、使用案例一、概述
CMake是一个简化跨不同平台开发项目的构建过程的工具。对C来说其实就是生成一个文件#xff0c;文件里面描述了#xff0c;怎么组织…
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 SHAREDmain.cppmainwindow.cppmainwindow.hmainwindow.ui)
else()
# 这里的 add_executable就是生成可执行文件第一个是可执行文件名后面就是源文件之类的add_executable(TestCmakeAppmain.cppmainwindow.cppmainwindow.hmainwindow.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(CMakeAPPmain.cppMainWindow.cppMainWindow.hMainWindow.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)