Linux之Ubuntu入门 (四)

Linux入门之Ubuntu(四)

  • 初识Makefile和make
  • Makefile基础知识
    • 1、变量的定义
    • 2、显式规则
    • 3、隐晦规则
    • 4、文件指示
    • 5、注释
  • Makefile与C语言的多文件编译
    • Makefile多文件编译入门视频
    • 第一个多文件编译实验
  • 作者的话


初识Makefile和make

Makefile算是一种脚本,建立makefile文件可以帮助使用Linux的程序员完成多个C源文件的多文件编译。Makefile 的好处是能够使用一行命令来完成“自动化编译”,一旦提供一个(通常对于一个工程来说会是多个)正确的 Makefile。编译整个工程你所要做的事就是在shell 提示符下输入make命令。整个工程完全自动编译,极大提高了效率。

make是一个命令工具,它解释Makefile 中的指令。在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。Makefile 有自己的书写格式、关键字、函数。本文初步介绍一下最简单的makefile文件应该如何构建。


Makefile基础知识

Makefile里主要包含了五个东西:变量定义、显式规则、隐晦规则、文件指示和注释。


1、变量的定义

在Makefile中我们要定义一系列的变量,变量一般都是字符串,这个有点像C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。


2、显式规则

显式规则说明了,如何生成一个或多的的目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。 刚才写的疑似shell脚本的Makefile全部都是显示规则。


3、隐晦规则

由于我们的make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。


4、文件指示

其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样。


5、注释

Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。如果你要在你的Makefile中使用“#”字符。

Makefile与C语言的多文件编译

小白请先点击观看下面的教程视频


Makefile多文件编译入门视频

点击此处观看


第一个多文件编译实验

  1. 实验目的
    掌握通配符和makefile的基本语法,初步体验多文件编程
  2. 实验工具
    一台可以联网的电脑,一台安装Ubuntu系统和gcc工具的云服务器(可参考如何申领一台免费的云服务器)
  3. 实验过程

(1)新建一个文件夹

$ mkdir ex1 //新建ex1文件夹 

(2)进入文件夹

$ cd ex1

(3)建立分别实现加减乘除运算的四个C源文件和输出运算结果的main文件

$ vi add.c //新建加法的C源程序
$ vi sub.c //新建减法的C源程序
$ vi mul.c //新建乘法的C源程序
$ vi div.c //新建除法的C源程序
$ vi main.c //新建main的C源程序

举两个C源文件的例子

加法的C源文件

int add(int x, int y)
{return x + y;
}

main的C源文件

#include"head.h"
int main()
{int a, b, c, d;a = add(10, 5);b = sub(10, 5);c = mul(10, 5);d = div(10, 5);
}

我想但凡有过C编程经历的同学应该已经发现了这两个源程序都是有问题的。首先C的库里没有名为head的头文件,这里也没有我们写C代码经常用到的stdio.h头文件。这样的代码在IDE里是绝对编译不过的。但是使用makefile就可以,接下来我们继续。

(4)创建head.h头文件

$ vi head.h

编写head,h头文件

#include"stdio.h"
int add(int x, int y);
int sub(int x, int y);
int mul(int x, int y);
int div(int x, int y);

接下来我们可以写我们的makefile文件了

(5)编写Makefile文件

$ vi Makefile
TAR = test
# Define a macro for the object file
OBJ = main.o add.o div.o mul.o sub.o
# Define macros for name of compiler
CC := gcc
CFLAGS = -c
$(TAR):$(OBJ)$(CC) $^ -o $@
%.o:%.c$(CC) $(CFLAGS) $^ -o $@
# Transfer all c file into executable filerm -rf $<
.PHONY:
clearall:rm -rf $(OBJ) $(TAR)
# Remove all object file

这一段脚本大量使用了通配符,建议先看完前面提到的视频再来理解。看完视频以后相信你们也能给出这段脚本的注释了。同学们可以试着使用英文注释,这是一个好习惯。


作者的话

小白看完教程可以跟着尝试一下。软件的学习一定要多上手,只有当你把完整的过程能够在你的服务器上复现之后,才能说明你真正掌握了。加油!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部