关于Makefile的使用

本周主要学习在Linux系统下使用Makefile对多个C语言源程序进行编译。

对于多个C语言源程序编译的时候,可以进行合并编译,例如下:

$ gcc main.c stack.c maze.c -o main

但是这种办法并不是很好,由于一般大型软件大多由上千个源程序组成,所以当其中的一个出错,还需把所有源文件重新编译一遍,而全部编译一遍需要几个小时,所以这种方法并不是首选,除非源程序数量极少。

还有一种方法如下:

$ gcc -c main.c

$ gcc -c stack.c

$ gcc -c maze.c

$ gcc main.o stack.o maze.o -o main

如果编译之后又对maze.c做了修改,要重新编译只需要做两步:

$ gcc -c maze.c

$ gcc main.o stack.o maze.o -o main

然而这样也与上一种方法有着类似的弊端,比如说寻找错误困难,重新编译耗时长。

所以使用Makefile对C语言进行编译不失为一种首选方法。

make 程序利用Makefile的数据和每个文件最新一次更改的时间来确定哪些文件需要更新;对每个需要更新的文件,make程序使用Makefile中定义的命令来更新它。

Makefile一般格式:

target(要生成的文件): dependencies(被依赖的文件)

#命令前面用的是“tab”而非空格。误用空格是初学者容易犯的错误!

命令1

命令2

命令3

.

.

.

命令n

目标和条件之间的关系是:欲更新目标,必须首先更新它的所有条件;所有条件中只要有一个条件被更新了,目标也必须随之被更新。所谓“更新”就是执行一遍规则中的命令列表,命令列表中的每条命令必须以一个Tab开头,注意不能是空格,Makefile的格式不像C语言的缩进那么随意,对于Makefile中的每个以Tab开头的命令,make会创建一个Shell进程去执行它。

所以将源程序和头文件放在同一目录下,在该目录下运行make命令即可进行编译。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容