赞
踩
CMake是一个简化跨不同平台开发项目的构建过程的工具。对C++来说其实就是生成一个文件,文件里面描述了,怎么组织这个工程,用编译器怎么编译这个项目之类的,这个CMake 本身不是一个编译器,其实就是生成一个让编译器能读懂编译流程的文件工具。让CMake自动生成构建系统,例如Makefiles和Visual Studio项目文件。CMake是一个第三方工具,有自己的文档。这里就是介绍一下在Qt 5中使用CMake 3.5 系列,反正是 CMake 3系列。
创建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 我个人使用的时候至少要几个功能:
有这些其实就是完全够用的
注意要点就是 find_package() 引入包 target_link_libraries()来链接库 下面用示例来说明
# 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(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 里配置的
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。