12

在以下问题上,我需要一些建议:

我有一个 QT 项目,目前已设置为与 qmake 很好地配合使用。但是,由于项目需求和未来方向的扩展,我需要更改它的构建系统,因为应用程序将需要对其构建方式进行一些更改。

现在每个源文件都被编译成一个相当大的可执行文件,它被(手动)打包并发送到下载区域。一切皆好。

但我的目标是模块化应用程序,将每个“功能”编译到共享库中,并且用户(开发人员)将能够选择他想要编译的组件。这些“功能”放置在源代码树的目录中(例如:query_builder、reverse_engineer、mysql_DB_support、version_managemen 目录等),当用户构建应用程序时,他只需告诉构建系统使用查询构建器编译应用程序, 和 mysql,但没有反向工程,在这种情况下,构建系统从指定目录添加源文件并从中创建一个库。

我还有其他要求,例如:

  • windows构建,linux构建
  • 可选包构建(deb,rpm)
  • 支持 QT 和可能的 QT5
  • 多个可执行文件(GUI 客户端、CLI 客户端)

经过一些“市场调查”后,我最终将 CMake 和 SCons 作为我可能使用的两个可能的系统。我有一些 CMake 经验和一些 python 经验,但还没有 SCons。

但我不知道哪一个最适合我的情况,这是我需要你帮助的地方。你能详细说明我应该使用哪个吗?如果您认为我的要求可以通过 qmake 实现,请也告诉我,

干杯,F。

4

1 回答 1

8

这个问题没有正确答案,通常归结为个人喜好,有点像 vi 与 emacs(正确答案当然是 vi :)

您应该研究每种方法的优缺点,并评估它们如何满足您的要求和需求。

我偏爱 SCons,主要是因为我无法忍受 CMake 语法,但这是个人喜好。在我看来,以下是每种方法的一些优点和缺点:

制作

优点:

  • 类似于 QMake,考虑到它是一个 makefile 生成器
  • CMake 被广泛使用,因此有很多参考资料和帮助可用
  • 有一个 GUI(我自己不知道,基于下面的 Calvin1602 评论)

缺点:

  • CMake 有自己发明的语法,许多人(包括我自己)觉得这种语法不直观。
  • 2步构建过程,首先创建Makefiles,然后实际执行编译
  • 几乎不可能读取生成的 Makefile

缺点

优点:

  • 语法是 Python,它被广泛使用并且相对容易学习。(而且 Python 很酷:)
  • 构建过程是一步,只需执行 SCons,它就会编译。无需生成或维护中间构建文件。
  • 过去 SCons 比 CMake 慢,但从那以后它要快得多,可能与 CMake 一样快或更快,因为它不必生成 makefile。
  • 丰富的功能集,支持多种语言,而 CMake 专注于 C/C++
  • 非常准确的隐式依赖系统:无需显式列出依赖的头文件、库等。如果需要,可以指定显式依赖。
  • 可以使用 Eclipse 插件。Eclipse 也有可用于 Python 的插件。
  • 具有为 Qt 项目创建的工具,用于处理此处提到的 MOC 和其他相关代码生成。

缺点:

  • SCons 可能不像 CMake 那样广泛使用,但仍然有很多可用的支持。
  • 根据项目的大小,SCons 可能会使用大量内存,因为它会在实际编译任何内容之前解析所有构建脚本并在内存中构建依赖关系树。然而,这确实允许更准确的依赖性检查。
于 2013-01-07T14:25:40.827 回答