我最近觉得有必要学习构建工具。我正在通过StackOverflow寻找建议,而Gnu Make几乎没有被提及。相反,我看到Ant,Maven,CMake,Scon和其他许多人。但是,当我看到我有时必须编译的小“流氓来源”(如不在回购中)时,它们都需要make && make install
步骤。
学习是否比学习其他工具更省钱?
如果是这样,为什么Make仍然如此受欢迎?
答案 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构建的。如果不知道如何阅读那些旧的文件,就无法理解他们的旧系统。