是否值得学习GNU Make?

时间:2009-08-27 13:36:27

标签: makefile automake

我最近觉得有必要学习构建工具。我正在通过StackOverflow寻找建议,而Gnu Make几乎没有被提及。相反,我看到Ant,Maven,CMake,Scon和其他许多人。但是,当我看到我有时必须编译的小“流氓来源”(如不在回购中)时,它们都需要make && make install步骤。

学习是否比学习其他工具更省钱?

如果是这样,为什么Make仍然如此受欢迎?

8 个答案:

答案 0 :(得分:24)

Make是 标准构建工具,适用于所有C / C ++。许多其他人已经步入正轨,但即使它们有用且成功,它们也从未实现无处不在的制造。

Make几乎安装在每个类似Unix的机器上。无论您是使用AIX,Solaris,Irix,BSD还是Linux,如果安装了编译器,也可以使用。

一些“替换”(如Automake,CMake)甚至创建Makefile,然后由make执行。

肯定建议熟悉make。如果由花时间学习有关make的人处理,它是一个强大的工具,可以通过多种方式使用,甚至不一定与软件开发相关。

即使您最终使用不同的构建工具,您也可以“回收”使用make学到的经验教训,因为基本概念非常相似。而且,大量的make-built项目意味着你总是有机会找出现有的Makefile。

但有一件事是。 Get it right from the beginning.

答案 1 :(得分:8)

我认为你没有看到(GNU)提到的原因是它通常是默认的;如果你有一个GNU工具链,你就已经有了。因此,大多数人开始谈论构建工具,谈论其他事情。

根据我的经验,make很好,但要让它完全符合您的要求可能会有点棘手。它可能有些神秘,但它已被证明并且有效。

答案 2 :(得分:3)

Make很受欢迎,因为它主要用于Linux / * nix项目中的C / C ++源代码,并且比你提到的任何其他工具都要老,因此它经受住了时间的考验并且已经成熟。有点像焦油。

老实说,我只知道make。上面的其他工具可能会更好,但是很多项目只使用一个基本的Makefile,你最好知道它至少有一点点。不仅适用于您自己的工作项目,也适用于您在网上找到的大多数开源项目。

答案 3 :(得分:2)

这取决于你将使用多少。

如果yoy在C / C ++制作项目中工作很多,那么是的,我建议学习更多关于它的内容,因为大型make文件比你提到的其他构建工具有更陡峭的学习曲线。

如果您不使用make,或使用其他语言(如C#,Java或PHP),那么您最好学习与这些语言相关的构建工具。

答案 4 :(得分:1)

与所有工具一样,如果你完全使用它,你应该花些时间 变得合情合理。此外,一些工具(例如CMake)生成makefile,你可能有一天需要弄乱那些生成的文件。

GNU make有一个excellent manual - 一定要花一两个小时阅读它。

答案 5 :(得分:1)

例如,

Make是Linux系统的事实标准。它是一个非常复杂的工具,也是一个非常强大的工具。

非常适合了解您是在开发C或C ++,特别是在定位Linux / * nix时。

make的一个功能是,您可以设置何时重建文件的依赖关系。例如。每个c或c ++文件都构建为.obj文件,最后,所有.obj文件都链接到可执行文件。但也许可执行文件是一个静态链接库,它与其他.obj文件链接到另一个可执行文件。

Make可以确保您的编译时间尽可能短,因为您可以定义只应编译c文件,如果它或任何相关的头文件比.obj文件更新。因此,只有当步骤的当前源文件比目标文件更新时,才会执行任何编译或链接步骤。

如果您正在开发例如C#,则不需要这种依赖性检查,因为所有.cs文件一次编译为单个可执行文件。

所以结论是你应该使用一个非常适合你选择编程语言的构建工具。

答案 6 :(得分:0)

即使你最终更喜欢另一种构建工具(我个人喜欢VS ......我知道......)知道make可能会更有用。

Make有许多应用程序,虽然它并不总是理想的单一任务,但在处理新技术时,它是坚定而灵活的。

答案 7 :(得分:0)

我猜你工作的地方可能有所不同,但我知道,无论我到哪里工作,如果我至少没有学过如何阅读Makefile,那么我本来就是一个不那么有价值的员工。即使在所有Windows-VisualStudio环境中,它也会偶尔出现。

例如,我们刚刚完成了一项涉及将一堆旧的CX / UX代码移植到Windows的工作。旧代码是使用makefile构建的。如果不知道如何阅读那些旧的文件,就无法理解他们的旧系统。