我最近觉得有必要学习一个构建工具。我正在通过 StackOverflow 寻找建议,而 Gnu Make 几乎没有被提及。相反,我看到了 Ant、Maven、CMake、Scon 和许多其他人。但是,当我查看有时必须编译的小“流氓源”(如不在仓库中)时,它们都需要这些make && make install
步骤。
学习是不是比学习另一种工具更浪费时间?
如果是这样,为什么 Make 仍然如此受欢迎?
Make 是所有 C/C++的标准构建工具。许多其他人已经步入正轨,但即使它们有用且成功,它们也从未实现过无处不在的make。
Make 安装在几乎所有类 Unix 机器上。无论您使用的是 AIX、Solaris、Irix、BSD 还是 Linux,只要安装了编译器,就会有 make。
一些“替代品”(如 Automake、CMake)甚至会创建 Makefile,然后由 make 执行。
我肯定会建议熟悉make。如果由花时间学习make 的人来处理,它是一个强大的工具,可以以多种方式使用,甚至与软件开发无关。
即使您最终使用不同的构建工具,您也将能够“回收”从 make 中学到的经验,因为基本概念非常相似。大量构建项目意味着您总是有机会找出现有的 Makefile。
不过有一件事。从一开始就做好。
我认为您没有看到 (GNU) make 的原因是它通常是默认设置。如果你有一个 GNU 工具链,你就已经有了 make。因此,大多数人开始谈论构建工具时,都会谈论其他东西。
根据我的经验,make 很好,但是让它完全按照你的意愿去做可能有点棘手。它可能有点神秘,但它已经被证明并且有效。
Make 很受欢迎,因为它(主要)用于 Linux/*nix 项目中的 C/C++ 源代码,并且比您提到的任何其他工具都要古老得多,因此它经受住了时间的考验并且已经成熟。有点像焦油。
老实说,我只知道make。上面的那些其他工具可能更好,但是很多项目只使用一个基本的 Makefile,你最好至少了解一点。不仅适用于您自己的工作项目,还适用于您在网上找到的大多数开源项目。
这真的取决于你会使用多少。
如果您经常使用 C/C++ make 项目,那么是的,我建议您更多地了解它,因为大型 make 文件比您提到的其他构建工具具有更陡峭的学习曲线。
如果您不使用 make 或使用其他语言(如 C#、Java 或 PHP)工作,那么您最好学习与这些语言相关的构建工具。
像所有工具一样,如果您使用它,您应该花一些时间来相当熟练地使用它。此外,某些工具(例如 CMake)会生成 makefile,您可能有一天需要处理这些生成的文件。
GNU make 有一本很好的手册——当然值得花一两个小时阅读它。
例如,Make 是 Linux 系统上的事实标准。它是一个非常复杂的工具,也是一个非常强大的工具。
如果您正在开发 C 或 C++,它非常适合学习,尤其是针对 Linux/*nix 时。
make 的功能之一是您可以设置何时重建文件的依赖关系。例如,每个 c 或 c++ 文件都构建到一个 .obj 文件中,最后,所有 .obj 文件都链接到一个可执行文件。但也许可执行文件是一个静态链接库,它与其他 .obj 文件链接到另一个可执行文件。
Make 可以确保您的编译时间尽可能短,因为您可以定义仅当 ac 文件或任何依赖的头文件比 .obj 文件更新时才应编译该文件。因此,只有当该步骤的当前源文件比目标文件更新时,才会执行任何编译或链接步骤。
如果您正在使用例如 C# 进行开发,则不需要这种依赖项检查,因为所有 .cs 文件都会立即编译为单个可执行文件。
所以结论是你应该使用一个非常适合你选择的编程语言的构建工具。
即使您最终更喜欢另一个构建工具(我个人喜欢 VS...我知道...)知道 make 可能会证明更有用。
Make 有许多应用程序,虽然它对于单个任务并不总是理想的,但在处理新技术时它是坚定而灵活的。
我想你工作的地方可能不同,但我知道,如果我至少没有学会如何阅读 Makefile,那么无论我在哪里工作,我都会成为一个价值低得多的员工。即使在所有 Windows-VisualStudio 环境中,它也会时不时出现。
例如,我们刚刚得到一份工作,涉及将一堆旧的 CX/UX 代码移植到 Windows。旧代码是使用 makefile 构建的。如果不知道如何阅读那些旧的 makefile,就无法理解他们的旧系统。