1、 获取cmake, 安装包到cmake的官网下载cmake相关版本, 本文选择最新版本的cmake-3.11.1-win64-x64.msi, msi是需要安装的, zip是免安装的, 我们这里选择安装的, 具体如下图所示:
2、 成功下载cmake安装包以后, 双击可运行文件(exe)进行安装, 基本上都是下一步下一步, 不过注意在出现"安装选项框中"选中第三个, 把Cmke添加到当前用户的系统路径上, 点击下一步, 如下图所示:
3、 成功安装cmake以后, 我们就一起来研究下在win10下怎么使用cmake, 安装包安装完成以后, 我们可以启动cmake gui, 具体如下图所示:
4、 本文主要是来分享如何使用cmake配置qt5.5项目的, 具体怎么安装qt5.5就不在本文这里来说明, 本文假设您的电脑上已经成功安装了qt5.5开发环境, 安装成功后如下图所示:
5、 qt自带右qmake, 那么这里为什么要研究使用cmake来构建基于qt的qt5项目呢? 这是由于在实际开发的过程中, 我们开发的项目可能会涉及到很多的第三方库, 由于其它第三方库的qt5项目不仅仅是只用qt一家的库, 而qmake只针对qt自身的库有优势, 项目中需要依赖的很多这些第三方库, 手动配置第三方库的.pro文件又确实比较麻烦, 那么用cmake来构建项目就非常有必要了, 此时cmake的优势非常突出。 下面我们一起来看看如何使用cmake构建和管理项目: 首先: 使用qt creater创建中规中矩的qt5的项目helloworld; 然后编译运行该项目,具体如下面所示:
6、运行cmake gui, 在界面窗口中, 看到一栏"Where is the source code", 后面有一个按钮"Browse Source..."用来选择Cmake所在目录, 下面的一栏"where to build the binaries",后面有一个按钮"Browse Build..."用来选择构建的项目输出目录, 构建好的项目需要和源码目录配合使用, 具体如下图所示:
7、 然后点击下方Configure按钮配置项目,点击后首次配置需要选择想要构建的项目, 具体如下图所示:
8、 点击"Finish"按钮, 弹出"Error"错误提示框, 如下图所示:
9、 下面的错误提示文字"CMake Error: The source directory "C:/Users/enju/Desktop/helloworld" does not appear to contain CMakeLists.txt.Specify --help for usage, or press the help button on the CMake GUI." 意思是在源码目录"C:/Users/enju/Desktop/helloworld"下面不包含CMakeLists.txt文本文件。 这就需要我们在项目文件夹中手动创建一个CMakeLists.txt文件。 文件内容如下:#设置cmake版本号cmake_minimum_required(VERSION 3.11.1 FATAL_ERROR)#设置工程名称project(helloworld)#设置工程包含当前目录, 非必须set(CMAKE_INCLUDE_CURRENT_DIRON)#设置自动生成moc文件,一定要设置set(CMAKE_AUTOMOC ON)#查找需要的Qt库文件, 最好每一个库都要写, Qt也会根据依赖关系自动添加find_package(Qt5Widgets)find_package(Qt5Core)find_package(Qt5Gui)#查找当前文件夹中的所有源代码文件,# 也可以通过Set命令将所有文件设置为一个变量FILE(GLOBSRC_FILES"./*.cxx")#同理, 查找当前文件夹中所有的头文件FILE(GLOB HEAD_FILES "./*.h")#同理, 查找当前文件夹中所有的ui文件FILE(GLOB UI_FILES "./*.ui")#通过Ui文件生成对应的头文件, 一定要添加qt5_wrap_ui(WRAP_FILES${UI_FILES})#添加资源文件set(RCC_FILESrcc.qrc)#将ui文件和生成文件整理在一个文件夹中, 非必须source_group("Ui"FILES${UI_FILES}${WRAP_FILES})#创建工程文件 add_executable(${PROJECT_NAME}${SRC_FILES}${HEAD_FILES}${RCC_FILES}${WRAP_FILES})#添加Qt5依赖项target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Core Qt5::Gui) 添加了CMakeLists.txt文本文件的目录结构如下图所示:
10、 在helloworld工程中添加了CMakeLists.txt文件以后, 再次在cmake gui里面点击configure, 弹出了错误提示框如下图所示, 以及新的错误提示信息:CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.CMake Error: CMake was unable to find a build program corresponding to "MinGW Makefiles". CMAKE_MAKE_PROGRAM is not set. You probably need to select a different build tool.CMake Error: CMAKE_C_COMPILER not set, after EnableLanguageCMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguageConfiguring incomplete, errors occurred! 这表示没有找到编译工具链!
11、 在出现上面的情况的时候, 这里的"第一次Configure"后, 需要选择一些设置, 选择"Specify native compilers", 具体如下图所示:
12、 再点击"Next",选择gcc, g++, 本地编译器在qt安装目录下面的tools里面, 目录例如"D:\soft\qt5.5\Tools\mingw492_32\bin", 在这个界面里选择Qt目录下面的gcc, 还有g++, 点击Finish完成, 具体如下图所示:
13、 如果还发现报错了, 就设置系统的环境变量, 即把d:\opencv\Qt\Qt5.5.0\Tools\mingw492_32\bin加入系统的Path环境变量中, 然后点击Configure如下第一幅图所示, 然后又弹出一个错误提示框如下第二张图片, 其文本提示信息:"Configuring incomplete, errors occurred!"表明还有错误!
14、通过上面的提示错误, 我们打开CMakeLists.txt文件, 找到信息中指出的错误发生的行数:Detecting CXX compile features - doneCMake Warning at CMakeLists.txt:14 (find_package): By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Qt5Widgets", but CMake did not find one.CMakeLists.txt文件14行以下是:#查找需要的Qt库文件, 最好每一个库都要写, Qt也会根据依赖关系自动添加find_package(Qt5Widgets) find_package(Qt5Core) find_package(Qt5Gui)看样子是cmake在查找Qt库文件Qt5Widgets的时候发生了错误!这个错误只要在CMakeLists.txt文件中添加一行代码: set(CMAKE_PREFIX_PATH "D:\\soft\\qt5.5\\5.5\\mingw492_32\\lib\\cmake\\")果然设置一下CMAKE_PREFIX_PATH到qt base目录, 就搞定。 但是这个不是彻底解决问题的方法, 最彻底的解决办法是在系统变量里面也加入一个Qt5Widgets_DIR新的环境变量,我们先在Qt的安装路径下找到了FindQt5Widgets.cmake等文件所在目录路径, 这类错误可能都可以用这种方法来解决, 只要找到相应的*.cmake文件的路径, 然后把路径添加到系统的环境变量中, 看就可以解决了,具体如下图所示:
15、再次点击Configure按钮, 没有错误的话, 会显示"Configuring done"字样,第一次配置完成, 具体如下图所示:
16、 完成第一次的配置后, 接下来再进行第二次配置, 再次点击configure按钮, 这次配置时间很快就好了,经过两次的配置, 点击Generate生成最终解决, 具体如下图所示:
17、 完成以后, 查看helloworld目录下面生成了很多新的文件和目录, 具体如下图所示:
18、Cmake GUI的使用: 选择源码和输出目录, 进行两次Configure, 然后进行一次Generate。 构建完毕的项目可以导入IDE, 或使用gcc等工具进行编译。