Qt工程CMake使用及通用模板

在跨平台开发时不免要使用cmake工具,下面提供一个通用模板,以便后续使用。并对其中部分关键字进行解释。

1.通用模板

​
#设定cmake最低版本需求

cmake_minimum_required(VERSION 3.24) # CMake install : Download | CMake

#指定工程名称

project(gui LANGUAGES CXX)

#cmake编译时包括自身所在目录

set(CMAKE_INCLUDE_CURRENT_DIR ON)

#开启qt需要的uic,moc,rcc

set(CMAKE_AUTOUIC ON)

set(CMAKE_AUTOMOC ON)

set(CMAKE_AUTORCC ON)

#设定c++标准

set(CMAKE_CXX_STANDARD 11)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

#指定qt所在目录

if(WIN32)

    set(CMAKE_PREFIX_PATH "d:/qt/5.9.6/mingw53_32") # Qt Kit Dir

elseif(UNIX)

    set(CMAKE_PREFIX_PATH "/opt/Qt5.9.6/5.9.6/gcc_64")

    #指定编译时搜索动态库路径

    SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)

    SET(CMAKE_INSTALL_RPATH "\${ORIGIN}")

endif()

find_package(Qt5 COMPONENTS Widgets Quick QuickWidgets REQUIRED) # Qt COMPONENTS

#添加源文件

aux_source_directory(. srcs)

aux_source_directory(./face srcs)

file(GLOB_RECURSEfile_ui ${CMAKE_CURRENT_SOURCE_DIR}/*.ui)

file(GLOB_RECURSEqml_file ${CMAKE_CURRENT_SOURCE_DIR}/QML/*.qml)

set(qrc ./multiui.qrc)

#指定输出目录

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)

#生成可执行文件

add_executable(${PROJECT_NAME}

    WIN32 ${srcs} ${qrc} ${qml_file}

)

#指定头文件目录位置

include_directories(../math)

#指定链接目录所在位置

link_directories(../lib)

#链接动态库

target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Widgets Qt5::Quick Qt5::QuickWidgets math) 

​

Qt工程CMake使用及通用模板_第1张图片

该工程目录结构如上图所示。

set(CMAKE_PREFIX_PATH XXX)是为了指定cmake的搜索目录,我们调用了cmake的find_package方法,该方法会自动检索系统环境变量下的三方库文件,当遇到*.cmake文件后,会返回关于三方库相关内容(如头文件路径,链接路径),如Qt库不在系统环境变量,则需自己指定其搜索路径,其余三方库操作一致。

find_package就是负责寻找需要的模块,如果参数指定了Required,则会在找不到时模块时报错。相关内容可以查看Cmake命令之find_package介绍 - 简书。

aux_source_directory则能够检索参数一路径下所有的cpp文件,并将其赋给第二个参数。

file(GLOB destination sourcedir/type)可以将sourcedir中所有的type类型的文件给到destination变量中。

file(GLOB_RECURSE destination sourcedir/type)可以递归的搜索sourcedir和sourcedir子目录下所有类型为type的文件,并给到destination变量中。下边图片展示了递归搜索的功能。

Qt工程CMake使用及通用模板_第2张图片

include_directories可以指定当前项目引用的头文件目录。

link_directories可以指定编译时动态库目录,生成可执行文件后其运行时链接目录也包含此路径。但执行make install指定会清楚该路径。若想指定运行时依赖库路径可以使用CMAKE_BUILD_WITH_INSTALL_RPATH

CMAKE_BUILD_WITH_INSTALL_RPATH表示是否使用CMAKE_INSTALL_RPATH 作为rpath,SET(CMAKE_INSTALL_RPATH "\${ORIGIN}")则用来指定CMAKE_INSTALL_RPATH 

target_link_libraries指定了可执行程序需要链接的库文件。

2.多工程项目

如果项目包含多个工程,只需为每个工程创建一个CMakeLists.txt,并在最外层编写一个CMakeLists.txt即可。 

Qt工程CMake使用及通用模板_第3张图片

Qt工程CMake使用及通用模板_第4张图片

在最外层调用add_subdirectory添加子目录即可。

你可能感兴趣的:(qt,c++)