当前位置:   article > 正文

Qt工程CMake使用及通用模板_qt cmake工程

qt cmake工程

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

1.通用模板

  1. #设定cmake最低版本需求
  2. cmake_minimum_required(VERSION 3.24) # CMake install : Download | CMake
  3. #指定工程名称
  4. project(gui LANGUAGES CXX)
  5. #cmake编译时包括自身所在目录
  6. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  7. #开启qt需要的uic,moc,rcc
  8. set(CMAKE_AUTOUIC ON)
  9. set(CMAKE_AUTOMOC ON)
  10. set(CMAKE_AUTORCC ON)
  11. #设定c++标准
  12. set(CMAKE_CXX_STANDARD 11)
  13. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  14. #指定qt所在目录
  15. if(WIN32)
  16.     set(CMAKE_PREFIX_PATH "d:/qt/5.9.6/mingw53_32") # Qt Kit Dir
  17. elseif(UNIX)
  18.     set(CMAKE_PREFIX_PATH "/opt/Qt5.9.6/5.9.6/gcc_64")
  19.     #指定编译时搜索动态库路径
  20.     SET(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
  21.     SET(CMAKE_INSTALL_RPATH "\${ORIGIN}")
  22. endif()
  23. find_package(Qt5 COMPONENTS Widgets Quick QuickWidgets REQUIRED) # Qt COMPONENTS
  24. #添加源文件
  25. aux_source_directory(. srcs)
  26. aux_source_directory(./face srcs)
  27. file(GLOB_RECURSEfile_ui ${CMAKE_CURRENT_SOURCE_DIR}/*.ui)
  28. file(GLOB_RECURSEqml_file ${CMAKE_CURRENT_SOURCE_DIR}/QML/*.qml)
  29. set(qrc ./multiui.qrc)
  30. #指定输出目录
  31. set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
  32. #生成可执行文件
  33. add_executable(${PROJECT_NAME}
  34.     WIN32 ${srcs} ${qrc} ${qml_file}
  35. )
  36. #指定头文件目录位置
  37. include_directories(../math)
  38. #指定链接目录所在位置
  39. link_directories(../lib)
  40. #链接动态库
  41. 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指定了可执行程序需要链接的库文件。

2.多工程项目

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/658785
推荐阅读
  

闽ICP备14008679号