Qt+CMake解决方案及问题汇总

  • A+
所属分类:C++

Qt+CMake解决方案及问题汇总

方法

1、使用QtCreator建立一个简单的qt程序

2、在工程根目录下新建CMakeLists.txt文件,内容如下,标红内容需要视工程情况修改

  1. #设置cmake版本号
  2. cmake_minimum_required(VERSION 3.10.0)
  3. #设置工程名称
  4. project(QTCmakeDemo)
  5. #设置工程包含当前目录,非必须
  6. set(CMAKE_INCLUDE_CURRENT_DIR ON)
  7. #设置自动生成moc文件,一定要设置
  8. set(CMAKE_AUTOMOC ON)
  9. set(CMAKE_AUTOUIC ON)
  10. set(CMAKE_AUTORCC ON)
  11. #查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加
  12. find_package(Qt5Widgets)
  13. find_package(Qt5Core)
  14. find_package(Qt5Gui)
  15. #查找当前文件夹中的所有源代码文件,也可以通过Set命令将所有文件设置为一个变量
  16. FILE(GLOB SRC_FILES "./*.cpp")
  17. #同理,查找当前文件夹中所有的头文件
  18. FILE(GLOB HEAD_FILES "./*.h")
  19. #同理,查找当前文件夹中所有的ui文件
  20. FILE(GLOB UI_FILES "./*.ui")
  21. #通过Ui文件生成对应的头文件,一定要添加
  22. qt5_wrap_ui(WRAP_FILES ${UI_FILES})
  23. #添加资源文件
  24. set(RCC_FILES rs.qrc)
  25. #将ui文件和生成文件整理在一个文件夹中,非必须
  26. source_group("Ui" FILES ${UI_FILES} ${WRAP_FILES} )
  27. #创建工程文件
  28. add_executable(${PROJECT_NAME} ${SRC_FILES} ${HEAD_FILES} ${RCC_FILES} ${WRAP_FILES})
  29. #添加Qt5依赖项
  30. target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui)

3、QtCreator中关闭工程,并且用CMakeLists.txt重新打开工程

4、cmake该工程,参考https://www.cnblogs.com/ode/archive/2012/09/16/3551346.html

5、cmd命令行进入cmake生成路径下,如果cmake过程使用msvc,使用nmake命令编译makefile文件;否则使用make命令编译makefile文件

6、库或者运行程序便生成出来了。

问题

1、找不到nmake?

需要将nmake路径配置到环境变量中,如D:\Microsoft Visual Studio 12.0\VC\bin

2、报错*** missing separator (did you mean TAB instead of 8 spaces?). Stop.

使用nmake编译,不要使用make

3、error: C1083: 无法打开包括文件: “cstddef”: No such file or directory 或者找不到vs的其他头文件

cmd下进入到vs安装路径\VC\Bin下,如D:\Microsoft Visual Studio 12.0\VC\bin,执行vcvars32.bat,此时会自动为vs设置环境变量,这个环境变量只在当前命令提示符中生效,不要关闭命令提示符,cd到cmake生成路径下,运行nmake

4、Policy CMP0071 is not set: Let AUTOMOC and AUTOUIC process GENERATED files.

cmake>3.10版本即可,安装的cmake程序要大于3.10,同时cmakelist中设置的版本也要大于3.10,如cmake_minimum_required(VERSION 3.10.0)

5、如何编译成release版本

cmake时加上参数  -DCMAKE_BUILD_TYPE=Release

 

 

  • 我的微信
  • weinxin
  • 微信公众号
  • weinxin
阿拉灯aladeng

发表评论

您必须才能发表评论!