想象一下,您可以自由选择像GNU make这样的工具来实现新的C ++项目。你会选择什么?那里有可用的替代品吗?
它应该是
src/bin
分离,因为Java 注意:
GNU make没什么问题。我只是不喜欢它的语法,这些年来增长的所有东西和愚蠢的递归都会产生问题。我现在使用gmake多年了。
答案 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)
答案 2 :(得分:7)
“gnu make”怎么样?
你问过类似的东西而没有说明gnu make不支持你想要的功能。
答案 3 :(得分:7)
它具有您命名的功能
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是发布的默认值。Jamfile
语法很简单,但功能强大; 答案 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等)。
它们如何更强大?
很多事情。 CMake可以完成大部分工作,但对于每一个,你应该编写长脚本或手动指定很多东西。