5

据说 Maven采用了Convention over Configuration的一种形式。

我不想进行任何错误的比较,但据我了解,cmake可以为 C++ 项目填充类似的内容,就像 maven 可以为 Java 项目填充一样。

那么, cmake是否有一些优于配置的约定,或者每个项目的配置是否唯一?(Wrt. 文件布局、测试布局、构建输出等)

4

2 回答 2

2

我们强烈鼓励的一种约定是进行“源外”构建,其中构建目录包含所有构建产品,并且与源代码树完全分离,通常源和构建是兄弟姐妹:

projects
  proj1-build-x86
  proj1-build-x64
  proj1-src

我们始终推荐此策略的两个主要原因是(1)保持源代码树清洁构建产品,因此很容易判断自您的版本控制系统上次更新以来发生了什么变化,以及(2)这样您可能有多个为任何给定的源树构建树,而不必担心来自一个干扰另一个的构建产品和/或设置。

我最近注意到我正在处理的一个项目无意中在源代码树中生成了一些 python 文件。不过,当我尝试在不同的构建树中同时构建 x86 和 x64 构建时,我才注意到它......突然生成的 python 文件有一些重复和混合的行。将其更改为生成到构建树中,一切都很好。

然而,这只是 CMake 良好实践的一部分,除了运行这些项目的聪明人的常识和纪律之外,并没有任何其他东西强制执行......

于 2011-11-16T15:40:05.310 回答
2

在体验了 Maven 3 的优雅之后,我还寻找了一个约定而不是配置 C 的 maven 样式系统。...

我还检查了 CMAKE,在创建了一个骨架之后,一些东西脱颖而出。

  1. CMAKE 有时是声明性的,有时是程序性的,你总是会得到一个丑陋的组合。又名,它是不带括号的 C 的 ANT。

  2. CMAKE 本身是可移植的,可惜您的项目需要处理平台细节,您最好提前了解它们。CMAKE 模块的存在据说可以帮助解决这个问题,不幸的是,它们的可重用性似乎更像是 Ansible 角色的承诺......理论上是可能的,但实际上它们最终成为您组织所有所需复杂性的体面方式。

换句话说,CMAKE 与 Maven 不同。它更像是一个较低级别的 ANT,它允许您使用“跨平台”DSL 来生成特定于平台的 makefile。

于 2016-01-02T02:05:31.357 回答