SCons或CMake而不是qmake

Fer*_*eak 11 qmake cmake scons

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

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

现在每个源文件都被编译成一个非常大的可执行文件,这是打包(手动)并发送到下载区域.一切都很好.

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

我还有其他要求,例如:

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

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

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

干杯,f.

Bra*_*ady 7

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

您应该研究每种方法的优缺点,并评估符合您要求和需求的方法.

我偏爱SCons,主要是因为我无法忍受CMake语法,但这是个人偏好.以下是我看到的每个方面的优点和缺点:

CMake的

优点:

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

缺点:

  • CMake有自己的发明语法,许多人认为(包括我自己)并不直观.
  • 2步构建过程,首先创建Makefile,然后实际执行编译
  • 它几乎无法读取生成的Makefile

使用SCons

优点:

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

缺点:

  • SCons可能没有像CMake那样广泛使用,但仍有大量支持可用.
  • 根据项目的大小,SCons可能会使用大量内存,因为它会解析所有构建脚本,并在实际编译任何内容之前在内存中构建依赖树.但这确实允许更准确的依赖性检查.

  • 对于很多人(特别是Windows开发人员)来说,你"con"的"2步构建过程,首先创建Makefile,然后实际执行编译"实际上是一个**巨大的**专业版.这是因为CMake可以直接使用本机VS编译器生成Visual Studio解决方案和项目.与SCons不同,SCons生成一个包装器,其中命中"build"意味着"运行SCons来进行构建". (12认同)