CMake+QT使用教程

一、CMake入门

下面是使用 Qt 用 C++ 编写的控制台应用程序的典型文件:CMakeLists.txt

1.构建一个控制台应用程序

# 指定应用程序所需的CMake最低版本(Qt本身至少需要CMake版本3.16)
cmake_minimum_required(VERSION 3.16)

# 设置项目名称和默认项目版本,同时告诉CMake该程序是用C++编写的
project(helloworld VERSION 1.0.0 LANGUAGES CXX)

# 设置变量CMAKE_CXX_STANDARD,指定C++版本(QT6需要支持c++ 17或更新版本的编译器)
# 设置变量CMAKE_CXX_STANDARD_REQUIRED,如果编译器太旧,让CMake打印一个错误
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置CMake查找Qt6,并导入模块Core
# 如果CMake找不到模块,设置标志REQUIRED让CMake终止
# 如果成功,CMake将设置一些变量,这些变量记录在模块变量中(见变量参考Module variables)
# 为了能找到依赖包,CMake可以设置变量CMAKE_PREFIX_PATH包含Qt6安装前缀
find_package(Qt6 REQUIRED COMPONENTS Core)

# qt_standard_project_setup命令为一般的QT应用程序设置项目范围的默认值
# 除此之外,该命令将CMAKE_AUTOMOC变量设置为ON,指示CMake自动设置规则,以便在需要时透明地调用Qt的元对象编译器(moc)。
qt_standard_project_setup()

# add_executable命令告诉CMake从指定源文件构建一个可执行文件(而不是库)
# 注意,这里通常不列出头文件。这与qmake不同,qmake需要显式列出头文件,以便元对象编译器(moc)处理它们。
# 对于比较复杂的项目需要改为调用qt_add_executable(),它是内置add_executable()命令的包装器,提供了额外的逻辑来自动处理诸如在静态Qt构建中链接Qt插件、特定于平台的库名定制等。
# 要创建库,使用qt_add_library。
add_executable(helloworld
    main.cpp
)

# 最后告诉CMake, helloworld可执行文件通过引用由上面的find_package()调用导入的Qt6::Core目标来使用Qt的Core模块。这不仅可以为链接器添加正确的参数,还可以确保将正确的include目录、编译器定义传递给c++编译器。PRIVATE关键字对于可执行目标并不是严格必要的,但是指定它是一种良好的实践。
# 如果helloworld是一个库而不是可执行文件,则应该指定PRIVATE或PUBLIC(如果库在头文件中提到了来自Qt6::Core的内容,则为PUBLIC,否则为PRIVATE)
target_link_libraries(helloworld PRIVATE Qt6::Core)

2.构建一个界面应用程序

cmake_minimum_required(VERSION 3.16)

project(helloworld VERSION 1.0.0 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(Qt6 REQUIRED COMPONENTS Widgets)
qt_standard_project_setup()

add_executable(helloworld
    mainwindow.ui
    mainwindow.cpp
    main.cpp
)

target_link_libraries(helloworld PRIVATE Qt6::Widgets)

# 最后,我们在应用程序目标上设置属性,效果如下:
# 防止在Windows上创建控制台窗口。
# 在macOS上创建应用程序包。
set_target_properties(helloworld PROPERTIES
    WIN32_EXECUTABLE ON
    MACOSX_BUNDLE ON
)

3.构建子目录项目

  • 项目目录结构
<project root>
├── CMakeLists.txt
└── src
    └── app
        ├── CMakeLists.txt
        ├── main.cpp
        ├── mainwindow.cpp
        ├── mainwindow.h
        └── mainwindow.ui
  • 顶层CMakeLists.txt,包含整个项目的设置并调用add_subdirectory,顶层CMakeLists.txt设置的变量在子目录项目中可见
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拼搏的菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值