Makefile简单讲解

        Makefile教程

-------作者:陈颢文

====================================================

由于水平有限,文档中难免有错误的地方,希望大家踊跃提出。

 

一、Makefile简介

什么是Makefile?很多做windows的程序员都没有听说过这个东东。因为windows的很多开发环境中都已经帮你做了这些东西了。但是如果你想要才成为一个专业的认识,或者需要在我们的Linux系统中编程的话,你就需要了解我们的Makefile。Makfile,又有人把它称为“工程管理器”,它的作用主要是用来在我们的工作管理中指定一系列规则,规定我们哪些文件需要优先编译,哪些文件需要后编译,哪些文件需要重新编译。对与一个team来说,我们做一个项目,每个人都是做了一个部分。当我们所有人写的程序放在一起的时候,我们就需要指定哪些东西先执行,哪些文件后执行。只有这样才能够实现我们想要的功能。本文默认使用的是我们的LINUX系统下的GCC编译器。

二、Makfile的工作

(1)前言

在我们学习任何语言的时候,我们都是从一个”hello world”的文件开始学习起来的。虽然我们的Makefile不是一门编程语言。但是,为了更好的学习,我们就来看看,如何通过Makefile来输出一个hello world。

<1>进入ubuntu系统中新建一个Makefile文件

 

<2>输入我们要写的”hello world”的内容

 

注意:echo hello world前面不是空格而是TAB键

<3>运行我们的Makefile

 

 

好了,完成了上述操作之后,可能大家还是一头雾水,不知道为什么要这么写,下面我们分析下,我们写的内容。

 

在我们的Makefile中第一个很重要个概念就是目标。顾名思义,目标就是我们make运行时候需要寻找的对象,在上图中就是all.

目标放在我们的”:”之前,它可以由字母和下划线”_”组成。

echo Hello world我们称为生成目标的命令

all目标的定义,其实就是定义了如何生成all目标,我们称之为规则。例如,上图就是我们Makefile中定义了一个生成all目标的规则。

   那我们之后的运行的make又是一个什么东西呢?不要急,我们先看看。下面几种运行方式。

 

make + 目标   运行我们的Makefile程序

第一种运行方法,不指定目标,默认生成我们的第一个目标

第二种运行方法,告诉make工具,我们生成all目标

第三种运行方法,默认make为我们生成test目标,由于我们根本没有定义test目标,所以运行结果是可想而知的。make报错,找不到目标。

(2)我们来增加多个目标看看

 

 

 

 

运行结果:

 

好,由上面的运行结果我们可以得到一下信息:

<1>一个Makeifle可以定义多个目标

<2>我们调用make命令时,默认运行第一个目标

 

这里大家觉得我们的echo “Hello world”似乎输出了不好看啊!于是,我们也可以这样来修改一下。

 

 

@------它的作用是告诉make,在运行时不要将这一行命令显示出来。更改之后相应的运行结果如下。

 

 

好了,若是我们想要让”hello world”和”Just for test”都输出来该怎么办呢?

 

 

我们来运行看看

 

 

 

好了,这个时候我们就要正式的说说我们的Makefile了。

 

(3)Makefile的构建规则

目标(Target):先决条件(prerequisites)

<TAB键>     命令

 

如上图中Makefile中的内容

 

目标--------->all

先决条件--------->test

命令--------------->echo “Hello world”

 

详解:目标与先决条件之间表达就是依赖关系。这种依赖关系指定在构建目标之前,必须先满足先决条件先满足。而先决条件一般常为其他的目标。因此,在构建我们当前目标的时候,它的其它目标一般需要先被构建出来。

 

因此,我们就可以来写一个简单的Makefile了。

head.h

 

 

 

 

 

 

add.c

 

sub.c

 

main.c

 

 

我们首先自己来运行看一下:

 

 

 

好了,我们自己来写一个Makefile来看看。

 

运行结果:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值