参考:
Qt 编译方式之 cmake_lucky-billy的博客-优快云博客_qt cmake
引入第三方库:
link_directories, LINK_LIBRARIES, target_link_libraries使用总结_商汤科技的博客-优快云博客_link_directories的作用
cc常用变量:
C++:CMake常用变量【CMAKE_CXX_FLAGS、CMAKE_BUILD_TYPE、×_BINARY_DIR】_u013250861的博客-优快云博客_cmake_cxx_flags
一、PROJECT(<Name>)
功能:用于指定项目的名称
这条指令会自动创建两个变量:
<projectname>_SOURCE_DIR(源代码路径) 和 <projectname>_BINARY_DIR(二进制文件保存路径)
cmake系统也帮助我们预定义了 PROJECT_SOURCE_DIR 和 PROJECT_BINARY_DIR 其值与上述对应相等
<projectname>_SOURCE_DIR 指向的目录同内部构建相同,仍然是项目目录
而<projectname>_BINARY_DIR 则有所不同,指向<项目目录>/build目录
二、引入QT中的包:
find_package(Qt5 REQUIRED COMPONENTS <包名> )
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS <包名> )
例子: find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets )
find_package(Qt5 REQUIRED COMPONENTS Widgets )
find_package(Qt6 Charts)
三、链接库:
1. target_link_libraries("${PROJECT_NAME}" <库名>)
2. link_libraries("${PROJECT_NAME}" Qt::Network )
3. link_libraries( Qt::Network )
例子:
//在.pro 中:
QT += Charts
//等价于在CMakeLists.txt中 :
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Charts )
link_libraries( Charts )
三、将所有文件保存在一个变量中
file(GLOB_RECURSE all_files *.h *.cpp *.c ) // <all_files>为变量名
create_filters(all_files) add_executable(<项目名> ${all_files} )
例子:
file(GLOB_RECURSE 变量名 CONFIGURE_DEPENDS "src/*.hpp" "src/*.cpp" "src/*.ui")
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}" FILES ${变量名})
add_executable( "${PROJECT_NAME}" ${变量名}
"res/res.qrc")
CMakeLists.txt例子:
# Qt对cmake版本的最小要求
cmake_minimum_required(VERSION 3.5)
# 用于指定项目的名称
project(<projectName> VERSION 0.1 LANGUAGES CXX)
#自动将当前的源代码和构建目录添加到include路径中
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# 打开Qt特有的编译器需要打开,默认是关闭的
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
# Qt6 对C++版本推荐至少17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 寻找Qt的库(Qt需要的组件)
#REQUIRED:必须找到该库,找不到就报错
#COMPONENTS:从库中找子模块,此处找的是Widgets
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets )
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
#将所有文件保存在PROJECT_SOURCES变量中
set(PROJECT_SOURCES
main.cpp
widget.cpp
widget.h
widget.ui
)
# 链接PROJECT_SOURCES的内容到当前项目
add_executable(projectName ${PROJECT_SOURCES})
# 链接库到当前项目
target_link_libraries(projectName PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
最后执行下面脚本,进行创建build目录、生成Makefile、编译连接、安装的操作。
mkdir build
cd build
cmake ../
make
make install
./项目名
代码修改后编译:
make
./项目名