你推荐什么GNU替代?

时间:2009-09-08 14:34:55

标签: c++ command-line build-process makefile

想象一下,您可以自由选择像GNU make这样的工具来实现新的C ++项目。你会选择什么?那里有可用的替代品吗?

它应该是

  • 命令行界面
  • “易于理解”
  • 易于设置默认的c ++项目
  • 可能支持src/bin分离,因为Java
  • 可能不会向其他软件/库添加太多依赖项
  • 平台独立(
  • 特点:
    • 以人类可读的方式构建规则/模板,例如make
    • 递归抓取目录并在没有其他规则时应用规则 “生成文件”
    • 异常配置

注意:

GNU make没什么问题。我只是不喜欢它的语法,这些年来增长的所有东西和愚蠢的递归都会产生问题。我现在使用gmake多年了。

9 个答案:

答案 0 :(得分:18)

我使用cmake,我很高兴我做了转换。

修改

wikipedia article中的功能列表:

  
      
  • 配置文件是CMake脚本,它使用编程   专门用于软件构建的语言
  •   
  • 内置于C,C ++,Fortran和Java的自动依赖性分析
  •   
  • 通过CMake脚本语言支持SWIG,Qt
  •   
  • 内置支持许多版本的Microsoft Visual Studio,包括版本6,7,7.1,8.0和9.0
  •   
  • 为Eclipse CDT(C / C ++开发工具)生成构建文件
  •   
  • 使用传统时间戳检测文件内容更改
  •   
  • 支持并行构建
  •   
  • 交叉编译
  •   
  • 所有依赖关系的全局视图,使用CMake输出graphviz图
  •   
  • 支持跨平台构建,并且已知可以继续使用      
        
    • Linux和其他POSIX系统(包括AIX,* BSD系统,HP-UX,IRIX / SGI和Solaris)
    •   
    • Mac OS X
    •   
    • Windows 95/98 / NT / 2000 / XP,Windows Vista和MinGW / MSYS
    •   
  •   
  • 与DART(软件),CDash,CTest和CPack集成,这是一套用于软件测试和发布的工具
  •   

但说实话:几乎任何东西都比gnu toolchain好。

答案 1 :(得分:8)

SConswaf很好(好吧,恕我直言)构建系统,并且只依赖于Python。

答案 2 :(得分:7)

“gnu make”怎么样?

你问过类似的东西而没有说明gnu make不支持你想要的功能。

答案 3 :(得分:7)

Boost.Jam

它具有您命名的功能

  • 命令行界面;
  • 容易;
  • 它来自C ++库集合Boost,因此它对C ++有很好的支持(并且它也不仅限于C ++);
  • 它将可执行文件存储在bin目录下的位置,具体取决于您命令的构建请求。如果您使用gcc 4.3.2,那么您将获得可执行文件
    • bin/gcc-4.3.2/debug - 执行bjam
    • bin/gcc-4.3.2/release - 执行bjam release
    • bin/gcc-4.3.2/release/inlining-off/threading-multi - 执行bjam release inlining=off threading=multi
    • bin/gcc-4.3.2/release/threading-multi - 对于bjam release inlining=full threading=multi因为inlining = full是发布的默认值。
  • 它不需要完整的Boost库集合,只需要Boost.Build和Boost.Jam;
  • 平台独立;
  • Jamfile语法很简单,但功能强大;
  • 您可以将构建配置划分为子目录中的许多Jamfiles。

答案 4 :(得分:6)

如果不是全部满足您的要求,

CMake应该回答最多。

  • 它将为您生成Makefile。

  • 它具有良好的特定领域原语,以及您需要做一些特殊事情的简单语言。

  • 它解决了递归制作的大部分问题(参见recursive make is considered harmful论文)。

  • 它使用了源代码内部版本,因​​此您将bin / src分开。

我发现它易于编写,易于维护和快速构建。

...加:

  • 这是跨平台。

  • 使用CText和CDash,它具有设置持续集成服务所需的功能。

另请参阅this

Recursive Make - friend or foe?回答

答案 5 :(得分:5)

答案 6 :(得分:2)

gmake出了什么问题?

它有什么问题意味着您想要使用它。如果它与gmake具有相同的感知问题,则推荐其他工具是没有意义的。

我们在构建系统中使用gmake,我们对它的性能,灵活性和功能非常满意

答案 7 :(得分:2)

天儿真好,

我同意这几个答案,到目前为止,建议坚持使用gmake。

阅读Robert Mecklenburg出版的“使用GNU Make管理项目”(sanitised Amazon link)的前几章后,或许再看看。

或者,甚至更好的是,搜索安德鲁·奥拉姆和史蒂夫·塔尔博特的前一版“管理项目与制作”的副本。前几章给出了(g)make和[mm] akefile基础知识的优秀描述。

我看到你可以购买第二版的二手副本。来自亚马逊的0.01美元的王子! (sanitised Amazon link

在阅读完介绍之后,您甚至会理解make是如何进行反向链接的,这只是在查看make的行为时有点不直观。

HTH

欢呼声,

答案 8 :(得分:2)

Autotools - autoconf / automake / libtool它们是非常强大的构建工具。

花一些时间从他们开始,但之后 - 他们很好地为你服务。

更重要的是,他们的替代品明显更强大(CMake,BJam,SCons等)。

它们如何更强大?

  • 通过libtool构建静态和共享库的透明支持。
  • 支持卸载(在CMake中没有)
  • 支持标准安装路径 - 在包装中非常重要。
  • 全面支持和集成gettext。
  • 交叉编译的透明和明确的支持。

很多事情。 CMake可以完成大部分工作,但对于每一个,你应该编写长脚本或手动指定很多东西。