我想知道 在qmake上使用CMake特定项目的原因,反之亦然.
两个构建系统的优点和缺点是什么?我搜索并找到了一些文件,但感觉很难理解.
两者都是构建系统,但它们根本不是很相似.如果你的项目使用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.它仍然处于测试阶段,因此我会等待它成熟并变得更容易使用.
CMake是迄今为止功能更强大的构建系统.温和地说,语法"不太好".但是,对于任何复杂的项目,与QMake(或我所知的任何构建系统)有什么关系来实现的东西也不是很好.对于简单的项目,QMake虽然看起来更好.
如果您需要对Qt以外的第三方依赖项进行配置检查,那么CMake就是您想要的,对QMake中的配置检查的支持是最小的,不存在.
另一方面,QMake在Qt Creator中运行得很好(缺少CMake支持,尽管使用CMake和Creator是可行的).
如果你想从Qt Creator中为iOS和Android构建和部署,我强烈建议你使用QMake.(不确定这些日子是否有可能与CMake一起 - 这肯定会引起更多的麻烦).
我将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,我希望这会有所帮助.
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.
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.