qt之qmake编译转换为cmake编译(代码片段)

cps666 cps666     2023-04-21     355

关键词:

一、前言-
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,即可在指定的目录下生成我们需要的可执行文件了。

qt工程cmake编译(代码片段)

 cmake_minimum_required(VERSION3.5.1)#https://blog.csdn.net/sinat_31964903/article/details/86615053#指定Qt路径(按需设置)#SET(CMAKE_PREFIX_PATHC:/Qt/Qt5.7.0/5.7/msvc2013/lib/cmake)#list(APPENDCMAKE_MODULE_PATH 查看详情

cmake不知道qt4qmake在哪里(代码片段)

我正在使用DebianOS,我试图指向cmake我的Qt4在哪里。我尝试构建qjson库,并使用其CMakeLists.txt:http://pastebin.com/fKNp0Qgy我明白了:Qt5notfound,searchingforQt4qmake:couldnotexec'/usr/lib/x86_64-linux-gnu/qt4/bin/qmake':Nosuchfileordire 查看详情

qt工程cmake编译(代码片段)

 cmake_minimum_required(VERSION3.5.1)#https://blog.csdn.net/sinat_31964903/article/details/86615053#指定Qt路径(按需设置)#SET(CMAKE_PREFIX_PATHC:/Qt/Qt5.7.0/5.7/msvc2013/lib/cmake)#list(APPENDCMAKE_MODULE_PATH"$CMAKE_CURRENT_SOURCE_DIR/cmake")project(SmartInjection_CMake)SET(CMAKE_CX... 查看详情

qmake的使用(可设置c编译器flag参数)(代码片段)

本文由乌合之众lym瞎编,欢迎转载my.oschina.net/oloroso***还是先说一下当前的系统环境:Ubuntu14.04+Qt5.4如果没有安装过QT,可以安装下面几个qt软件sudoapt-getinstallqt5-defaultqt5-doc-htmlqt5-qmakeqt5-docqt5-image-formats-plugins这只是对qmake使用的一... 查看详情

linux之cmake实例演示(代码片段)

一.CMake简介在Windows中,我们可以使用IDLE环境来编译我们的代码,比如visualstudio、vc++6.0等,这些已经将编译的过程集成进开发环境中了。但是在其它平台上,并没有这些开发环境,所以需要我们手动编译... 查看详情

linux之cmake实例演示(代码片段)

一.CMake简介在Windows中,我们可以使用IDLE环境来编译我们的代码,比如visualstudio、vc++6.0等,这些已经将编译的过程集成进开发环境中了。但是在其它平台上,并没有这些开发环境,所以需要我们手动编译... 查看详情

cmake使用教程(代码片段)

...是VS的开发环境,它已经集成了全套的开发环境包括构建编译等。你或许听过好几种Make工具,例如GNUMake,QT的qmake,微软的MSnmake,BSDMake(pmake),Makepp,等等。这些Make工具遵循着不同的规范和标准,所执行的Makefile格式也千差万... 查看详情

从零开始编译安装extcalc(代码片段)

...经不可能,更何况我是在mips的龙芯3A上。唯一的方法就是编译安装。我是在龙芯3A4000+Debian10上完成安装的,其他系统可能有些许差别。编译安装获得源码包从它的sourceforge首页获得源码包:传送门编译README内容的部分翻译:依赖... 查看详情

初步编译qt5.15.2+vs2019+vtk8.2.0(代码片段)

目录一 编译结果二 cmake库编译配置三 cmake应用配置脚本四 推荐链接一 编译结果编译完没有QT,可能是QT版本太高、web组件不匹配、python3.9版本太高。二 cmake库编译配置三 cmake应用配置脚本这样就能qt和vs一起debug了。nican... 查看详情

cmake入门实战(代码片段)

...的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的Make工具,就得为每一种标准写一次Makefile,这将是一件让人抓狂的工作。CMake附图1CMake就是针对上面问题所设计的工具:它首先允许开发者编写一... 查看详情

qt高级——qmake用户指南(代码片段)

...程系统。QMake扩展了每个工程文件的信息,生成一个执行编译和链接过程的必须命令的MakeFile。1、描述工程工程文件.pro描述了工程信息。工程文件信息会被qmake用于生成包含构建过程中所需的所有命令的MakeFile。工程文件通常包... 查看详情

vs2017+opencv+qt+cuda,使用cmake编译opencv的库(代码片段)

环境:cuda10.2opencv3.4.13qt5.12.9cmake3.24vs2017x64系统vs安装时勾选与c++相关的组件,依次安装opencv、qt、cuda(cuda安装时尽量安装在c盘,以便于配置系统环境)与cmake,需要配置qt与cuda的环境变量。 C:\\Progra... 查看详情

make,cmake,qmake

...非商业转载请注明出处。1.gcc是GNUCompilerCollection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java 查看详情

用qmake搭建框架之加载静态共享库(代码片段)

目录一、建立大型工程1.1建立静态库1.2建立共享库二、调用生成的库文件三、运行时加载共享库关于插件关于打包 关于qmake的语法可以参考:http://doc.qt.io/qt-5/qmake-manual.html。这里是qt5的,qt4和qt5的写法还略有区别。一般... 查看详情

cmake超详细入门教程,学不会你捶我~(代码片段)

...ake是什么?二、动手写一个简单的cmake1.安装cmake2.cmake编译单个源文件三、CMakeLixts.txt文件基本语法四、如何将编译文件与源文件分离五、使用cmake编译多个源文件六、使用cmake生成库文件总结前言我们在平时编译代码的时࿰... 查看详情

msvc上设置源码为utf8的编译选项(代码片段)

win32:msvc:QMAKE_CXXFLAGS+=/utf-8win32:msvc:QMAKE_CXXFLAGS+=/FS在qtqmake中这两个配置相当于CONFIGS+=utf8_source如果不使用qmake的跨平台项目,可能会使用到,记录留痕 查看详情

使用命令行编译qthelloworld项目(代码片段)

...ext(QObject::tr("Hello,Kunming"));w.show();retutna.exec();1.使用命令行编译程序打开开始菜单中QT安装目录下的命令行提示符程序Qt5.9forDesktop(MinGW5.3.032bit),在命令提示符中修改路径:cdE:QTworkspaceHelloWorld。修改路径后输入“qmake-project”在该目... 查看详情

为cmake添加boost编译库(代码片段)

boost具有很好的平台独立性,因此会作为首选的api来完成特定的功能.我在项目中使用了boost的filesystem功能来获取程序的运行目录.#include<boost/filesystem/path.hpp>#include<boost/filesystem/operations.hpp>intmain()...std::stringexePath=boost:: 查看详情