我想知道使用CMake为qmake的特定项目的原因,反之亦然。
两种构建系统的优点和缺点是什么?我搜索并找到了一些文件,但感觉很难理解。
答案 0 :(得分:29)
两者都是构建系统,但它们根本不是很相似。如果您的项目使用Qt,那么您最好使用qmake。 CMake更通用,几乎适用于任何类型的项目。
qmake和CMake都会生成一个Makefile,由make
读取以构建项目。并非所有构建系统都生成Makefile,但很多都可以。甚至Makefile也是一种构建系统;它告诉编译器和链接器要做什么,以便创建可执行文件(或动态或静态库)。
如果您的项目使用Qt,但您不想使用qmake,那么您自己还需要做更多的事情:
所以,你不得不做更多的工作来构建一个没有qmake的Qt项目,但这是可能的,它会教你很多关于Qt和qmake如何做的事情。
在个人笔记上(仅作为推荐,请自己做进一步的研究):我不是qmake的忠实粉丝。它可以帮助你解决Qt问题,但除此之外,我发现它非常有限。
无论如何,我建议学习构建一个小项目(~10个源文件)而不使用任何类型的构建系统。不使用CMake,不使用Makefile,只是直接使用编译器和链接器。你不应该以这种方式构建任何真正的项目,但是你应该学习如何去做,只是为了了解构建系统实际做了什么。知道他们做了什么将使他们更容易使用。
几个月前,我们将项目从qmake切换到Premake,这也值得一看。它具有高度可编写脚本(使用Lua),当您需要自定义构建过程时,它非常棒。
那就是说,它更多"手册",所以准备好自己学习如何在更基本的层面上进行编译和链接,而无需使用构建系统。它也处于测试阶段(Premake 5),所以仍然缺少一些零碎的东西。
您还可以查看qbs,这应该是更好的qmake。它还处于测试阶段,因此我会等待它成熟并变得更容易使用。
答案 1 :(得分:19)
CMake是迄今为止功能更强大的构建系统。语法是"不太好"说得客气一点。但是,对于任何复杂的项目,与QMake(或我所知道的任何构建系统)有什么关系来实现的东西也不是很好。对于简单的项目,QMake虽然看起来更好。
如果你需要配置除Qt之外的第三方依赖项的配置检查,CMake就是你想要的,对QMake中的配置检查的支持是最小的,不存在。
另一方面,QMake在Qt Creator中表现很好(缺少CMake支持,尽管可以将CMake与Creator一起使用)。如果您想在Qt Creator中为iOS和Android构建和部署,我强烈建议使用QMake。 (不确定这些日子是否可能与CMake一起使用 - 这肯定会引起更多麻烦)。
答案 2 :(得分:10)
我将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,我希望这会有所帮助。
答案 3 :(得分:7)
CMake
将帮助您为许多构建系统生成配置文件(“构建系统”在CMake
中称为生成器)。请参阅What is a CMake generator?。
这意味着如果你有一组C / C ++源代码和编写良好的CMakeLists.txt
,你可以使用CMake为不同的构建系统(基于命令行的IDE)创建项目,如Visual Studio, CodeBlocks,g ++ ......
使用CMake,您可以选择最终将使用的IDE和编译器,并在“支持”之间“轻松”切换。
qmake
只支持QtCreator作为IDE(在后台使用第三方编译器:在Visual Studio中使用nmake,g ++,MinGW ......)。但是您不会使用qmake
生成Visual Studio解决方案(sln文件)。这是我在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。
答案 4 :(得分:5)
的qmake
CMake的
我的建议:如果QtCreator是您的IDE并且您从Qt或C ++开始,请使用qmake。如果你想在你的构建中做任何复杂的事情,请使用cmake。
qmake和CMake的工作方式相似。有关从qmake迁移到CMake的教程,请参阅http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html。