我想知道 * 使用CMake为特定项目超过qmake的原因,反之亦然 *。简单地说,这两种构建系统的优缺点是什么?
CMake
qmake
carvr3hs1#
两者都是构建系统,但它们并不非常相似。如果你的项目使用Qt,你可能最好使用qmake。CMake更通用,几乎适合任何类型的项目。qmake和CMake都会生成一个Makefile,make会读取它来构建项目。不是所有的构建系统都会生成Makefile,但很多构建系统都会生成Makefile。甚至Makefile也是一种构建系统;它告诉编译器和链接器要做什么,以创建可执行文件(或动态或静态库)。如果你的项目使用Qt,但你不想使用qmake,你必须自己做一些事情:
make
所以,你必须做更多的工作来构建一个没有qmake的Qt项目,但这是可能的,它会教你很多关于Qt和qmake是如何工作的。就我个人而言(这只是一个建议,你可以自己做进一步的研究):我不是qmake的忠实粉丝。它可以帮助你处理Qt的事情,但除此之外,我发现它非常有限。在任何情况下,我都建议学习构建一个小项目(~10个源文件),而不使用任何类型的构建系统。不使用CMake,不使用Makefile,直接使用编译器和链接器。你不应该以这种方式构建任何真实的项目,但你应该学习如何去做,只是为了了解构建系统实际上做了什么。知道它们做了什么会让它们更容易使用。几个月前,我们将一个项目从qmake切换到Premake,这也值得一看。它具有高度的脚本化(使用Lua),这在您需要自定义构建过程时非常有用。也就是说,它更像是一个“手册”,所以准备好学习编译和链接在更基本的层面上是如何工作的,而不使用构建系统。它也是在测试版(Premake 5)中,所以仍然缺少一些细节。你也可以看看qbs,它被认为是一个更好的qmake,它仍然处于测试阶段,所以我会等待它成熟并变得更容易使用。
xxhby3vn2#
CMake是迄今为止更强大的构建系统。委婉地说,它的语法“不太好”。但是,对于任何复杂的项目,使用QMake(或我所知道的任何构建系统)来实现的东西也不太好。对于简单的项目,QMake看起来更好。如果你需要对Qt以外的第三方依赖进行配置检查,CMake就是你想要的,QMake中对配置检查的支持是最小的,甚至不存在。另一方面,QMake与Qt Creator配合使用效果很好(缺乏CMake支持,尽管CMake与Creator配合使用是可行的)。如果你想在Qt Creator中为iOS和Android构建和部署,我强烈建议使用QMake。(不确定现在使用CMake是否可行-它肯定会引起更多的头痛)。
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有所帮助。
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。
CMakeLists.txt
g6baxovj5#
我的建议是:如果QtCreator是您的IDE,并且您从Qt或C++开始,请使用qmake。如果您想在构建中执行任何复杂的操作,请使用cmake。qmake和CMake的工作原理类似。请参阅http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html获取从qmake迁移到CMake的教程。
5条答案
按热度按时间carvr3hs1#
两者都是构建系统,但它们并不非常相似。如果你的项目使用Qt,你可能最好使用qmake。CMake更通用,几乎适合任何类型的项目。
qmake和CMake都会生成一个Makefile,
make
会读取它来构建项目。不是所有的构建系统都会生成Makefile,但很多构建系统都会生成Makefile。甚至Makefile也是一种构建系统;它告诉编译器和链接器要做什么,以创建可执行文件(或动态或静态库)。如果你的项目使用Qt,但你不想使用qmake,你必须自己做一些事情:
所以,你必须做更多的工作来构建一个没有qmake的Qt项目,但这是可能的,它会教你很多关于Qt和qmake是如何工作的。
就我个人而言(这只是一个建议,你可以自己做进一步的研究):我不是qmake的忠实粉丝。它可以帮助你处理Qt的事情,但除此之外,我发现它非常有限。
在任何情况下,我都建议学习构建一个小项目(~10个源文件),而不使用任何类型的构建系统。不使用CMake,不使用Makefile,直接使用编译器和链接器。你不应该以这种方式构建任何真实的项目,但你应该学习如何去做,只是为了了解构建系统实际上做了什么。知道它们做了什么会让它们更容易使用。
几个月前,我们将一个项目从qmake切换到Premake,这也值得一看。它具有高度的脚本化(使用Lua),这在您需要自定义构建过程时非常有用。
也就是说,它更像是一个“手册”,所以准备好学习编译和链接在更基本的层面上是如何工作的,而不使用构建系统。它也是在测试版(Premake 5)中,所以仍然缺少一些细节。
你也可以看看qbs,它被认为是一个更好的qmake,它仍然处于测试阶段,所以我会等待它成熟并变得更容易使用。
xxhby3vn2#
CMake是迄今为止更强大的构建系统。委婉地说,它的语法“不太好”。但是,对于任何复杂的项目,使用QMake(或我所知道的任何构建系统)来实现的东西也不太好。对于简单的项目,QMake看起来更好。
如果你需要对Qt以外的第三方依赖进行配置检查,CMake就是你想要的,QMake中对配置检查的支持是最小的,甚至不存在。
另一方面,QMake与Qt Creator配合使用效果很好(缺乏CMake支持,尽管CMake与Creator配合使用是可行的)。
如果你想在Qt Creator中为iOS和Android构建和部署,我强烈建议使用QMake。(不确定现在使用CMake是否可行-它肯定会引起更多的头痛)。
8ehkhllq3#
我在Qt项目中使用CMake,并且非常满意。具体来说,我在CMakeLists.txt中有以下内容:
字符串
我希望这对你决定使用CMake有所帮助。
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。g6baxovj5#
qmake
CMake
我的建议是:如果QtCreator是您的IDE,并且您从Qt或C++开始,请使用qmake。如果您想在构建中执行任何复杂的操作,请使用cmake。
qmake和CMake的工作原理类似。请参阅http://www.th-thielemann.de/development/cmake/cmake_qmake_to_cmake.html获取从qmake迁移到CMake的教程。