20

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

学习是不是比学习另一种工具更浪费时间?

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

4

8 回答 8

24

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

Make 安装在几乎所有类 Unix 机器上。无论您使用的是 AIX、Solaris、Irix、BSD 还是 Linux,只要安装了编译器,就会有 make。

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

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

即使您最终使用不同的构建工具,您也将能够“回收”从 make 中学到的经验,因为基本概念非常相似。大量构建项目意味着您总是有机会找出现有的 Makefile。

不过有一件事。从一开始就做好。

于 2009-08-27T13:54:15.180 回答
8

我认为您没有看到 (GNU) make 的原因是它通常是默认设置。如果你有一个 GNU 工具链,你就已经有了 make。因此,大多数人开始谈论构建工具时,都会谈论其他东西。

根据我的经验,make 很好,但是让它完全按照你的意愿去做可能有点棘手。它可能有点神秘,但它已经被证明并且有效。

于 2009-08-27T13:40:45.773 回答
3

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

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

于 2009-08-27T13:39:07.930 回答
2

这真的取决于你会使用多少。

如果您经常使用 C/C++ make 项目,那么是的,我建议您更多地了解它,因为大型 make 文件比您提到的其他构建工具具有更陡峭的学习曲线。

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

于 2009-08-27T13:40:33.327 回答
1

像所有工具一样,如果您使用它,您应该花一些时间来相当熟练地使用它。此外,某些工具(例如 CMake)会生成 makefile,您可能有一天需要处理这些生成的文件。

GNU make 有一本很好的手册——当然值得花一两个小时阅读它。

于 2009-08-27T13:41:04.073 回答
1

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

如果您正在开发 C 或 C++,它非常适合学习,尤其是针对 Linux/*nix 时。

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

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

如果您正在使用例如 C# 进行开发,则不需要这种依赖项检查,因为所有 .cs 文件都会立即编译为单个可执行文件。

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

于 2009-08-27T14:42:01.240 回答
0

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

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

于 2009-08-27T13:40:45.213 回答
0

我想你工作的地方可能不同,但我知道,如果我至少没有学会如何阅读 Makefile,那么无论我在哪里工作,我都会成为一个价值低得多的员工。即使在所有 Windows-VisualStudio 环境中,它也会时不时出现。

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

于 2009-08-27T14:27:31.280 回答