CMake vs Qmake的优缺点是什么?

tp5buhyn  于 2023-11-19  发布在  其他
关注(0)|答案(5)|浏览(250)

我想知道 * 使用CMake为特定项目超过qmake的原因,反之亦然 *。
简单地说,这两种构建系统的优缺点是什么?

carvr3hs

carvr3hs1#

两者都是构建系统,但它们并不非常相似。如果你的项目使用Qt,你可能最好使用qmake。CMake更通用,几乎适合任何类型的项目。
qmake和CMake都会生成一个Makefilemake会读取它来构建项目。不是所有的构建系统都会生成Makefile,但很多构建系统都会生成Makefile。甚至Makefile也是一种构建系统;它告诉编译器和链接器要做什么,以创建可执行文件(或动态或静态库)。
如果你的项目使用Qt,但你不想使用qmake,你必须自己做一些事情:

  • 运行Meta Object Compiler(MOC)
  • 包含路径(告诉编译器在哪里查找Qt头)
  • linking(告诉链接器在哪里寻找Qt库)

所以,你必须做更多的工作来构建一个没有qmake的Qt项目,但这是可能的,它会教你很多关于Qt和qmake是如何工作的。
就我个人而言(这只是一个建议,你可以自己做进一步的研究):我不是qmake的忠实粉丝。它可以帮助你处理Qt的事情,但除此之外,我发现它非常有限。
在任何情况下,我都建议学习构建一个小项目(~10个源文件),而不使用任何类型的构建系统。不使用CMake,不使用Makefile,直接使用编译器和链接器。你不应该以这种方式构建任何真实的项目,但你应该学习如何去做,只是为了了解构建系统实际上做了什么。知道它们做了什么会让它们更容易使用。
几个月前,我们将一个项目从qmake切换到Premake,这也值得一看。它具有高度的脚本化(使用Lua),这在您需要自定义构建过程时非常有用。
也就是说,它更像是一个“手册”,所以准备好学习编译和链接在更基本的层面上是如何工作的,而不使用构建系统。它也是在测试版(Premake 5)中,所以仍然缺少一些细节。
你也可以看看qbs,它被认为是一个更好的qmake,它仍然处于测试阶段,所以我会等待它成熟并变得更容易使用。

xxhby3vn

xxhby3vn2#

CMake是迄今为止更强大的构建系统。委婉地说,它的语法“不太好”。但是,对于任何复杂的项目,使用QMake(或我所知道的任何构建系统)来实现的东西也不太好。对于简单的项目,QMake看起来更好。
如果你需要对Qt以外的第三方依赖进行配置检查,CMake就是你想要的,QMake中对配置检查的支持是最小的,甚至不存在。
另一方面,QMake与Qt Creator配合使用效果很好(缺乏CMake支持,尽管CMake与Creator配合使用是可行的)。
如果你想在Qt Creator中为iOS和Android构建和部署,我强烈建议使用QMake。(不确定现在使用CMake是否可行-它肯定会引起更多的头痛)。

8ehkhllq

8ehkhllq3#

我在Qt项目中使用CMake,并且非常满意。具体来说,我在CMakeLists.txt中有以下内容:

set(QT_VERSION_REQ "5.2")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5Core ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Quick ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Widgets ${QT_VERSION_REQ} REQUIRED)
find_package(Qt5Gui ${QT_VERSION_REQ} REQUIRED)

set(CMAKE_AUTOMOC ON)
QT5_WRAP_UI( UI_HDRS ${UI_FILES} )

ADD_EXECUTABLE(${MOC_HEADERS})

target_link_libraries(${PROJECT_NAME}
  Qt5::Core
  Qt5::Quick
  Qt5::Widgets  
  Qt5::Gui  
)

字符串
我希望这对你决定使用CMake有所帮助。

yks3o0rb

yks3o0rb4#

CMake将帮助您为许多构建系统生成配置文件(在CMake中,“构建系统”称为Generators)。请参见What is a CMake generator?
这意味着,如果你有一套C/C源代码和一个写得很好的CMakeLists.txt,你可以使用CMake为不同的构建系统(基于命令行的IDE)创建项目,如Visual Studio,CodeBlocks,g.
qmake,据我所知,将只支持QtCreator作为IDE(itseft在后台使用第三方编译器:nmake从Visual Studio,g++,MinGW...)。但您不会生成Visual Studio解决方案(sln文件)使用qmake。(因为我讨厌QtCreator. Visual Studio更强大,更直观.但这只是我的看法)。
qmake确实使编译基于Qt的应用程序变得更容易(因为本地支持MOC、.ui和喜欢Qt)而不是CMake。(有内置的Qt集成函数)。只有您的CMakeLists.txt可能需要在迁移到新版本的Qt时进行一些修改(我从Qt 4迁移到Qt 5时很困难,我想使用qmake会让这变得更容易)。
就我个人而言,我使用CMake作为构建环境,当我需要使用QtCreator(主要用于Android部署)时,我让我的CMake脚本为qmake/QtCreator生成一个.pro文件。它运行得很好,因为qmake.pro文件的语法非常简单。这样我就不会被锁定到特定的IDE。

g6baxovj

g6baxovj5#

qmake

  • 专注于使用Qt的项目
  • QtCreator轻松生成项目文件(适合初学者)
  • 支持QtCreator

CMake

  • 广泛应用于各种项目
  • 支持多种平台和语言
  • 支持多个IDE:例如QtCreator,Visual Studio
  • 为多个IDE生成项目描述
  • 包含使Qt的使用变得简单的命令(最重要的:automoc)

我的建议是:如果QtCreator是您的IDE,并且您从Qt或C++开始,请使用qmake。如果您想在构建中执行任何复杂的操作,请使用cmake。
qmake和CMake的工作原理类似。请参阅http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html获取从qmake迁移到CMake的教程。

相关问题