Qt之QMake编译转换为CMake编译

Posted cps666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt之QMake编译转换为CMake编译相关的知识,希望对你有一定的参考价值。

一、前言-
QMake和CMake都是用来控制编译过程的构建系统,最终生成可在选择的编译器环境中使用的本机makefile和工作区。简单来说,QMake和CMake就像类似于作曲,makefile类似于乐谱,最终由编译器完成乐章的演奏。

那么QMake和CMake有什么区别呢?-
对于纯Qt项目,QMake更加好用。QMake与QtCreator的相性很好,通过.pro文件指导Qt工程编译,方便又快捷。-
但是,如果需要对Qt以外的第三方依赖项进行配置检查,比如一个很大的项目,其中除了Qt的部分子工程外,还有其他语言的部分子工程,那么QMake就远远不如CMake好用了。-
我正在做的一个项目,就是在联调C语言编译的嵌入式应用层代码时,从QMake转向了CMake。

二、CMake基础-
CMake有自己的一套语法,参考博文:“轻松搞定CMake”系列之CMakeLists文件编写语法规则详解。-
对我们最重要的就是其中外部构建的内容,归纳下来就是:

  • ADD_SUBDIRECTORY:告诉CMake去子目录中查看可用的CMakeLists.txt文件
  • ADD_EXECUTABLE:告诉工程生成一个可执行文件。
  • ADD_LIBRARY:告诉工程生成一个库文件。
  • FIND_LIBRARY:查找库所在目录。
  • SET:用于设置变量,相当于为变量取别名。
  • CMAKE_MODULE_PATH:定义cmake模块所在路径。
  • EXECUTABLE_OUTPUT_PATH和LIBRARY_OUTPUT_PATH:通过 SET 指令重新定义EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量来指定最终的目标二进制的位置。

三、将QMake转换为CMake-
一个典型的.pro文件如下:

QT += core
QT -= gui
CONFIG += c++11
TARGET = test
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
QT += network
SOURCES += main.cpp \\
    test_interface.cpp \\
    motomanlibrary.cpp \\
    processing.cpp
SOURCES += test_interface.h \\
    motomanlibrary.h \\
    processing.h

下面将它转换为CMake的写法,首先要创建一个CMakeLists.txt文件,然后开始编辑:-
1、QMake:用到的Qt相关模块。

QT += core
QT -= gui

CMake:搜索模块。

find_package(Qt5Core REQUIRED)

2、QMake:其他编译器标志。

CONFIG += c++11

CMake::扩展列表所需的编译器标志集。

set(CMAKE_CXX_FLAGS  "$CMAKE_CXX_FLAGS -std=c++0x")

3、QMake:源文件。

SOURCES += main.cpp \\
    test_interface.cpp \\
    motomanlibrary.cpp \\
    processing.cpp

CMake:创建文件列表。

set(SOURCES
    main.cpp
    test_interface.cpp
    motomanlibrary.cpp
    processing.cpp
)

4、QMake:头文件。

SOURCES += test_interface.h \\
    motomanlibrary.h \\
    processing.h

CMake:头文件位置。

nclude_directory(.) #  or include_directory($CMAKE_CURRENT_SOURCE_DIR)
include_directory(some/where/else)

5、QMake:要建立的目标。

TARGET = test

CMake:设置目标名称,添加源,链接所需的库。

add_executable(test $SOURCES )
qt5_use_modules(test Core Network)

四、编译-
编写好CMake文件后,手动测试一下CMakeLists.txt是否配置正确。建立一个build目录,在目录下执行命令cmake ..,生成Makefile脚本。然后make -j,即可在指定的目录下生成我们需要的可执行文件了。

Cmake教程

Cmake

一、 Cmake概述

1.Cmake的由来?

当我们要执行程序前要对程序进行编译,然而Make工具却有很多种,如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile。所以为了避免这样的跨平台问题,Cmake就被设计了出来。

1.什么是Cmake

CMake是一个跨平台的安装(编译)工具,它允许开发者编写一种与平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据用户的平台进一步生成所需的本地化 Makefile 和工程文件。

1.3 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程

  1. 编写 CMake 配置文件 CMakeLists.txt 。
  2. 执行命令 cmake PATH 生成 Makefile。其中, PATH 是 CMakeLists.txt 所在的目录。
  3. 使用 make 命令进行编译。

二、课程内容

1.单个源文件下CMakeList.txt

2.工程下CMakeList.txt

3.静态库与动态库构建与安装

4.CMake变量

5.CMake常用指令

6.模块的使用和自定义模块

三、推荐资料

以上是关于Qt之QMake编译转换为CMake编译的主要内容,如果未能解决你的问题,请参考以下文章

qt打开cmake工程keyvalue不显示

cmake nmake qmake 的区别联系

从C++到Qt(舍弃IDE或qmakecmake等工具的束缚,尝试通过几个例子)

GNU开发工具——CMake快速入门

make, cmake, qmake

Cmake教程