一、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设置的变量在子目录项目中可见


15万+

被折叠的 条评论
为什么被折叠?



