Makefile语法和使用示例

Makefile的基本知识

Makefile语法规则:

目标:依赖文件列表
<Tab>:命令列表

示例1-简单的makefile编写

首先写一个main.h,代码如下:

#define PI 3.14

在同目录下,再写一个main.c,代码如下:

#include <stdio.h>
#include "main.h"
int main()
{
	printf("hello world %lf\n",PI);
	return 0;
}

在终端执行vim Makefile命令,在Makefile文件中写入以下内容

main:mian.c main.h 
	gcc main.c -o main
clean:
	rm main

make命令格式

make [-f file] [option] [targets]
[-f file]:make 默认工作目录中寻找名为GUNmakefile,makefile,Makefile作为makefile输入文件,-f 可以指定其他名字的文件作为makefile输入文件
[option] :
-v:显示make工具的版本信息
-w:在处理makefile之前和之后显示工作路径
-C dir:读取makefile之前改变工作路径至dir目录
-n: 只打印执行的命令但不执行
-s:执行但不显示执行命令

Makefile中的变量

1、自定义变量
在makefile中定义的变量
make工具传给makefile的变量
2、系统环境变量
make工具解析makefile之前,读取环境变量并且设置为makefile的变量
3、预定义变量
这些变量具有特殊含义,可直接在makefile中使用
$@: 目标名
$*目标名中除含扩展名的部分,扩展名包括:S,s,C,c,cc,cp,cpp,o等
$<:依赖文件列表中的第一个文件
$^:依赖列表文件中除去重复文件的部分
$+:依赖列表中所有的文件
$?:依赖列表中比目标文件新的文件

示例2-使用变量的makefile编写

1、用vim写一个简单的hello.c

#include <stdio.h>
int main()
{
	printf("hello world");
	return 0;
}

2、在终端执行vim Makefile命令,在Makefile文件中写入以下内容

cc=gcc
exec=hello
cflags=-Wall -g
obj=hello.o
$(exec):$(obj)
	$(cc) $(obj) -o $@ $(cflags)
$(obj):hello.c
	$(cc) -c $< -o $@ $(cflags)
clean:
	rm *.c,$(exec),*.o

执行结果如下图所示:
在这里插入图片描述

编写多文件编程的Makefile

当需要makefile多个文件该如何编写呢?即,源文件中需要调用头文件中的包含的库或函数该如何写makefile。以下这个例子可以供作参考:

示例3-多文件编程的Makefile

1、写一个hello.h文件内容如下:

#include <stdio.h>

2、写一个hello.c文件内容如下:

#include "hello.h"
int main()
{
	printf("hello world");
	return 0;
}

可用两种方法实现,这里直接放代码截图

方法1

在这里插入图片描述

方法2

在这里插入图片描述
可以用变量对这两个方法进行优化,这里我偷懒就不做了。

使用autotools生成包含多文件的Makefile

这里不说autotools如何安装了,大家可以自行百度。

1、新建一个名为“auto”文件夹,将示例2的hello.c拷贝进去。
2、使用autoscan生成configure.scan。(以上命令运行截图如下所示)
在这里插入图片描述
3、编辑configure.scan,修改相关内容,并将其重命名为configure.ac(configure.ac的内容截图如下所示)。
在这里插入图片描述
4、使用aclocal生成aclocal.m4。
5、使用autoconf生成configure。
6、使用autoheader生成config.h.in。(以上几个命令的运行如下图所示)
在这里插入图片描述
7、创建Makefile.am并且编辑。文件内容如下图所示:
在这里插入图片描述
8、使用automake --add-missing生成Makefile.in。
9、使用./configure生成Makefile。命令执行如下图所示:
在这里插入图片描述
10、使用make生成hello可执行文件,并在当前目录下运行hello查看结果。
结果如下图所示:
在这里插入图片描述
11、也可以make install将hello安装到系统目录下,运行查看结果。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_17616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值