赞
踩
-
- #设定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)
-
该工程目录结构如上图所示。
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变量中。下边图片展示了递归搜索的功能。
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指定了可执行程序需要链接的库文件。
如果项目包含多个工程,只需为每个工程创建一个CMakeLists.txt,并在最外层编写一个CMakeLists.txt即可。
在最外层调用add_subdirectory添加子目录即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。