Posts

Showing posts with the label 编译

浅析 ./configure; make; make install

Image
00 intro 大意翻译自:http://tldp.org/LDP/LG/current/smith.html,并参考wikipedia make 词条 在*nix系统中,我们经常会用到configure; make; make install 这三步来安装程序。可悲的是,很多计算机使用者,甚至部分码农(比如我- - )并不知道这些操作的意义。我们更喜欢双击一个安装包来安装,比如pkg 比如exe... 但是作为*nix使用者,原理还是科普一下比较好。 01 make configure相对另外两个步骤来说比较新,反正这三步有明确的独立的目的。我们先来解释make。make,暂且把它翻译成编译。make这一模块内置于历代Unix中。这一模块被设计用来减轻程序员的工作量。有一个很好的说法是,这一举措减少了程序员需要记录(document)的东西。这个想法是:让我们建立起一套规则,用一种更码农友好的方式来把源代码生成可执行的程序。make模块有一套内置的规则,然而开发者也可以自己制定一些规则,并且保存在自己的文件目录里-----这就是makefile。经过编译,会生成对应的.o 文件。具体的生成规则同样可以在makefile里自定义。 假如你在目录里输入make love 然后make 模块会在目录里寻找对应的makefile 即这里的love。如果不提供对应的makefile,那系统就会用它内置的规则进行编译。大多数linux系统下的原文件都是用c写的,所以一般makefile是一个.c 文件。make的过程会检查是否存在应有的.o文件,如果然后查看时间戳这是不是最新的.o文件。如果不存在这个文件,或者不是最新的,那就重新make。make之所以被广泛应用的一个原因就是它支持多种语言,如果源文件是.c 拿它就会用gcc 来编译,如果是其他语言就会选择对应的编译器。 嗯 有这么一个古老的unix段子: The old UNIX joke, by the way, is what early versions of make said when it could not find the necessary files. In the example above, if there was no love.o, love.c or any ...