本文主要是介绍非典型性C语言教程- x.3 make,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前面介绍了两种IDE的使用,大部分IDE的使用都大同小异。对于C/C++来说,所有的IDE都是通过著名的make程序来管理工程的。下面简单介绍一下make。IDE里面会有工程(project)的概念,一个工程最后构建出一个可执行体。实际上每一个工程都是用make程序来管理的。什么是make呢? 可以参考下面两个链接 Gnu的make, wiki百科的make词条。后一个连接可能需要用代理才能打开(被伟大的G*F*W*e*d了)。
在这里转中文wiki百科关于make的介绍
Make
维基百科,自由的百科全书
make是一个自动转化文件形式的工具,同时它也会检查文件的从属关系,如果需要的话,它会调用一些外部的软件来完成任务。它的依靠关系检查系统非常简单,主要是使用输入文件的修改时间。大多数情况下,它被用来编译源代码,生成结果代码,然后把结果代码连接起来生成可执行文件或者库文件。它使用叫做"makefile"的文件来确定一个输出文件的从属关系,然后把编译脚本程序传给shell去编译这个文件。"makefile"这个词是来自于它通常的文件名"makefile"和后来的"Makefile"
目录
|
起源
现在有不少的从属关系检查工具,但是make是被使用最广泛的一个之一,主要是归功于它被包含在Unix系统中。Stuart Feldman 在1977年在贝尔实验室里制作了这个软件。2003年Feldman因发明了这样一个重要的工具而接受了美国计算机协会(ACM)颁发的软件系统奖。
在make诞生之前,Unix系统的编译系统主要由"make"和"install"shell脚本程序和程序的源代码组成。它可以把不同目标的命令组成一个文件,而且可以抽象化从属关系的检查和存档。这是向现代编译环境发展的重要一步。
现在版本
make程序已经被多次重写,其中包括几次用相同的文件格式和算法原理从新编写,并且添加了一些不常见的改进。三个不同的make程序是:
- BSD make, 是从Adam de Boor的制作的版本上发展成的。它编译目标的时候有并行计算的能力。它在FreeBSD,NetBSD 和 OpenBSD 中不同程度的修改下存活了下来。
- GNU make, 是大多数GUN Linux 安装的一部分,常常被和GNU编译系统一起使用。
- NMAKE, Visual C++使用的编译系统。
优点和缺点
就像其他和make有着悠久历史的软件一样,它有着很多的拥护者和反对者。它的很多问题因现代大型的软件项目的出现而暴露出来。但是很多人争论说它在常见的情况下可以很好的工作,而且使用非常的简单,功能强大,表达清楚。无论如何,make仍然被用来编译很多完整的操作系统,而且现在替代品们在基本的操作上与它没有太大差别。
随着现代的集成开发环境(IDE)的诞生,特别是非Unix的平台上,很多程序员不再手动管理依靠关系检查,甚至不用去管哪些文件是这个项目的一部分,而是把这些任务交给了他们的开发环境去做。类似的,很多现代的编程语言有自己特别的高效的从属关系的设置方法。
Makefile的结构
一 个makefile是由定义一个文件或者一些规定依靠关系的文本组成。比如说,输出文件被标记着要依靠它的源文件,而源文件被标记着要依靠它内部 include的文件。在每个依靠关系都被列出来之后,一系列的文本就会来定义如何把输入文件转化成输出文件。这些定义会被称为编译脚本程序,并且被转到 shell去生成目标文件。它的基本结构是:
# Comments use the pound sign (aka hash)
target: dependencies
command 1
command 2
.
.
.
command n
makefile 文件也可以包含变量的定义和其他的makefile。makefile里面的变量可以被命令窗口调用make工具时的参数而改变。 这样就允许用户去设定编译脚本的不同功能。比如说,CC变量在makefile里面通常被用来指一个C的编译器,用户可以通过设定参数去使用不同的编译 器。
makefile 例子
下面是一个非常简单的例子。这段命令让makefile用C编译器来编译一个叫helloworld.c源文件。
helloworld: helloworld.o
cc -o $@ ___FCKpd___1lt; helloworld.o: helloworld.c cc -c -o $@ ___FCKpd___1lt; .PHONY: clean clean: -rm -f helloworld helloworld.o
当C 语言编写的软件规模很大时,将整个程序完整的编译出来,有时需要很多步骤,可能需要编译上10万个源文件,还有额外的拷贝,建文件等步骤,有时有些头文件 和源文件还需要其他的自动生成工具生成。手工敲一个一个编译命令会让人发疯。这是需要写一个批处理脚本,自动的执行大量的编译命令。make实际上就是这 么一个脚本工具的增强版本。 上面提到,make会自动检查依赖关系。
make是一个工具,make工具执行时需要一个makefile 文件。这个Makefile文件和Unix脚本一样可以使用宏变量,管道,条件分支,循环等一系列复杂的语法,还可以使用一切shell可以执行的程序。 看一看Linux内核的make文件就知道make可以写到多么复杂了。
这篇关于非典型性C语言教程- x.3 make的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!