当前位置:  开发笔记 > 编程语言 > 正文

CMake和qmake之间有什么区别和相似之处?

如何解决《CMake和qmake之间有什么区别和相似之处?》经验,为你挑选了5个好方法。

我想知道 在qmake上使用CMake特定项目的原因,反之亦然.

两个构建系统的优点和缺点是什么?我搜索并找到了一些文件,但感觉很难理解.



1> 小智..:

两者都是构建系统,但它们根本不是很相似.如果你的项目使用Qt,你可能最好使用qmake.CMake更通用,几乎适用于任何类型的项目.

qmake和CMake都生成一个Makefile,可以通过它make来构建项目.并非所有构建系统都生成Makefile,但很多都可以.甚至Makefile也是一种构建系统; 它告诉编译器和链接器要做什么,以便创建可执行文件(或动态或静态库).


如果您的项目使用Qt,但您不想使用qmake,则您必须自己做更多的事情:

运行元对象编译器(MOC)

包含路径(告诉编译器在哪里查找Qt头)

链接(告诉链接器在哪里寻找Qt库)

所以,你将不得不做更多的工作来构建一个没有qmake的Qt项目,但它是可能的,它将教你很多关于Qt和qmake如何做事.

在个人笔记上(仅作为推荐,自己做进一步的研究):我不是qmake的忠实粉丝.它可以帮助你解决Qt问题,但除此之外,我发现它非常有限.


无论如何,我建议学习构建一个小项目(~10个源文件)而不使用任何类型的构建系统.不使用CMake,不使用Makefile,只是直接使用编译器和链接器.你不应该以这种方式构建任何真正的项目,但你应该学习如何去做,只是为了了解构建系统实际做了什么.知道他们做了什么将使他们更容易使用.


几个月前,我们将一个项目从qmake改为Premake,这也值得一看.它具有高度可编写脚本(使用Lua),当您需要自定义构建过程时,它非常棒.

也就是说,它更加"手动",因此请准备好自己学习如何在更基本的层次上进行编译和链接,而无需使用构建系统.它也处于测试阶段(Premake 5),因此仍然缺少一些零碎的东西.

你也可以看看qbs,这应该是一个更好的qmake.它仍然处于测试阶段,因此我会等待它成熟并变得更容易使用.



2> Frank Osterf..:

CMake是迄今为止功能更强大的构建系统.温和地说,语法"不太好".但是,对于任何复杂的项目,与QMake(或我所知的任何构建系统)有什么关系来实现的东西也不是很好.对于简单的项目,QMake虽然看起来更好.

如果您需要对Qt以外的第三方依赖项进行配置检查,那么CMake就是您想要的,对QMake中的配置检查的支持是最小的,不存在.

另一方面,QMake在Qt Creator中运行得很好(缺少CMake支持,尽管使用CMake和Creator是可行的).

如果你想从Qt Creator中为iOS和Android构建和部署,我强烈建议你使用QMake.(不确定这些日子是否有可能与CMake一起 - 这肯定会引起更多的麻烦).



3> Mr Squid..:

我将CMake用于我的Qt项目,并对此非常满意.具体来说,我的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,我希望这会有所帮助.



4> jpo38..:

CMake将帮助您为许多构建系统生成配置文件("构建系统"称为生成器CMake).请参阅什么是CMake生成器?.

这意味着如果您有一组C/C++源代码并且写得很好CMakeLists.txt,您可以使用CMake为不同的构建系统(基于命令行的IDE)创建项目,如Visual Studio,CodeBlocks,g ++ ...使用CMake ,您可以选择最终将使用的IDE和编译器,并在"支持的"之间"轻松"切换.

qmake据我所知,只支持QtCreator作为IDE(在后台使用第三方编译器:在Visual Studio中使用nmake,g ++,MinGW ......).但是你不会使用生成Visual Studio解决方案(sln文件)qmake.这是我在qmake中看到的主要限制(因为我讨厌QtCreator ...... Visual Studio更强大,更直观......但这只是我的意见).

确实qmake可以更容易地编译基于Qt的应用程序(因为MOC,.ui和喜欢Qt的本地支持)CMake.但无论如何使用它都是可行的CMake(有Qt集成的内置函数).移动到Qt的新版本时,只有你的CMakeLists.txt可能需要重做一点(从Qt4转到Qt5时我很难,我想使用qmake这会让这更容易).

Personnaly,我CMake用于我的构建环境,当我需要使用QtCreator(主要用于Android部署)时,我让我的CMake脚本为qmake/QtCreator生成一个.pro文件.它运行良好,因为qmake.pro文件语法非常简单.然后我没有锁定特定的IDE.



5> Th. Thielema..:

QMAKE

重点关注使用Qt的项目

项目文件很容易由QtCreator生成(适合初学者)

由QtCreator提供支持

CMake的

用于广泛的项目

支持许多平台和语言

由多个IDE支持:例如QtCreator,Visual Studio

为多个IDE生成项目描述

包含使Qt易于使用的命令(最重要的是:automoc)

我的建议:使用qmake以防QtCreator是你的IDE并且你从Qt或C++开始.如果您想在构建中执行任何复杂的操作,请使用cmake.

qmake和CMake的工作方式相似.有关从qmake迁移到CMake的教程,请参见http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有