程序员多久会被要求编写一个makefile文件?

时间:2010-03-31 21:16:54

标签: c++ makefile compilation

makefile是高级问题还是程序员的一般问题? 对于C ++程序员,他会多久被要求编写一个makefile文件?

11 个答案:

答案 0 :(得分:24)

没有人写过Makefile。他们采用现有的Makefile并对其进行修改。

感谢你不必处理IMakefile。 (对于那些有幸从不处理这个问题,或者设法忘记了的人来说,IMakefile是一个文件,它是一个基于X Window系统的项目的meta-Makefile,用于生成一个知道的Makefile你在哪里安装了所有的X Windows库和二进制文件。不用说,它很糟糕。)

答案 1 :(得分:16)

设置有意义的构建系统是该工艺的一部分。我希望任何非超级初级开发人员能够提出一个makefile。

答案 2 :(得分:4)

他经常被要求开始一个全新的项目,这个项目与现有的项目不同,后者的构建脚本可以进行调整。我猜这不是一个好的答案,但根据我的经验,我总能有一些代码/资源/构建脚本可以适应。

另一方面,对于任何C ++程序员来说,了解他的代码是如何构建的非常重要。 Makefile,Ant脚本等只是实现机制。所以我认为学习它是非常重要的。

答案 3 :(得分:2)

程序员需要知道如何构建他们的项目。通常(根据我的经验),“生产构建”基于原始程序员的makefile。许多程序员在整理他们的makefile时盲目地摸索他们的整个职业生涯,但每个程序员都必须这样做。

答案 4 :(得分:1)

我从未想过将makefile作为问题,它们非常有用......

频率取决于您正在使用的平台和您的角色。

例如,在某些组织中,存在一个相当固定的构建文件,该文件通常不会发生变化,而在其他组织中则会频繁更改。有些组织依赖IDE来处理构建等。您不必是构建工程师。

我认为大多数C / C ++开发人员至少应该对makefile的工作方式有一些基本的了解,尽管他们不一定是大师。在我的母校,这是第一年CS的一部分。

答案 5 :(得分:1)

需要注意的一点是,如果构建系统是以模块化方式设置的,那么一种做法就是不为整个事物构建一个巨大的makefile,而是为可以从主makefile中递归调用的位创建文件。这是一个很棒的功能,因为它意味着不同的产品(库?)可以构建为独立的单元,通常是并行的。

Makefile旨在自动化构建过程。因此,他们绝对不是一件苦差事;他们会一直拯救你写gcc -c *.c等。不仅如此,而且正确编写的makefile还有用于清理,重建等的音频。在我的大多数项目中,make rebuild都是这样做的 - 清理所有内容并重新开始。

Makefile非常有用。我说不够。

答案 6 :(得分:1)

即使您使用的IDE处理为您构建项目的详细信息,makefile仍然非常有用。有时您需要在构建过程中使用一些额外的功能,例如运行预处理步骤以编程方式生成c ++文件(如果使用Qt,则可能需要在头文件上运行moc或者资源文件上的rcc。您可能需要处理.idl文件以生成实现文件),或者作为将文件复制到目标的构建后步骤。在这些情况下,您通常有两种选择:

  • 每次运行脚本作为构建前或构建后的步骤,这意味着每次构建时都会重建应用程序
  • 创建一个makefile来执行将包含依赖关系规则的操作,这样只有在输入文件的时间戳比输出文件的时间戳更新时才会调用该步骤。构建一个已经最新的项目将无能为力

如果C ++开发人员不在Linux / Unix上工作,他们可能会花费很多年而不需要创建Makefile,但是一个体面的开发人员会试图了解Makefiles如何工作,因为他们可能会改进你当前工作流程的一部分。

答案 7 :(得分:1)

我想这取决于......

就个人而言,我对Makefiles的语法非常着迷。在对象的路径上进行任何类型的simple操作都是非常棘手的。

另一方面,能够构建是必要的,并且理解编译行上的各种参数也是如此。虽然也许不适合大三学生。

我离开学校后不到一年就不得不重写我们应用程序的构建系统。我是用scons做的,效果很好。构建时间从1h30到10m,因为我终于可以进行并行编译并对所使用的库进行自动本地复制。

士气是:如果你要求某人接受一个构建机制,不要强迫Makefile对他。让他选择一个更新的工具。

答案 8 :(得分:1)

make的一个强大功能是可以在每个规则中编写的shell代码。 因此,不仅学习make很重要,而且理解像bash这样的shell语言并将其应用到项目中是非常有用的

答案 9 :(得分:0)

这取决于您为项目使用的工具/库/框架。对于我的工作,我使用Qt进行编码,所以我永远不必编写Makefile,qmake为我做了,虽然我必须知道如何创建一个qmake项目文件。

我坦率地承认,除了最简单的Makefile之外,我可能无法编写任何内容而无需从头开始学习。我不认为这很快就会改变,因为如果我被迫,我只会学习它。为什么学习一些你可能永远不需要的东西?

答案 10 :(得分:0)

在过去的五年里,我没有被要求写一个makefile。有时我可以修改现有的makefile。

但是当你有工具在没有make程序的情况下完成工作时,没有必要关心makefile。关于你的问题,当一个C ++程序员被要求写这样一个文件时:这取决于。