Makefile的简单应用

一、概述

        在学习linux时,相信makefile是必须掌握的内容之一,因为学习Linux的过程中离不开敲代码,如果每一个文件都需要一一的gcc,那效率就太慢了,所以makefile就是加快效率的好帮手,写一次makefile省略千千万万次手动gcc。

二、应用场景一

        相同目录下模块化程序文件的编译。

1.编译过程如下图所示

2.makefile代码如下

​
  1 src=$(wildcard *.c) #把所有的.c文件放在src变量中
  2 obj=$(patsubst %.c,%.o,$(src)) #把src中的.c文件替换成.o文件
  3
  4 message=-Wall -g  #编译时打印出警告信息 编译完成后的文件可以进行gdb调试
  5
  6 ALL:main #指定终极目标
  7
  8 main:$(obj)
  9         gcc $^ -o $@ $(message)   #相当于  gcc hello.c -o hello
 10
 11 $(obj):%.o:%.c
 12         gcc -c $< -o $@ $(message) #相当于 gcc -c hello.c -o hello.o
 13
 14 clean:
 15         -rm -rf $(obj) main   #执行该命令时会删去 .o和可执行文件main
 16
 17 .PHONY:clean ALL  #防止目录中有文件名与之重复时编译不成功

​

三、应用场景二

        头文件和 .c文件 .o文件不在同一目录下的情况

1.编译过程如下图所示

 2.makefile代码如下

  1 src=$(wildcard ./inr/*.c) #把所有的.c文件放在src变量中
  2 obj=$(patsubst ./inr/%.c, ./ino/%.o, $(src)) #把src中的.c文件替换成.o文件
  3
  4 path=./include
  5 message=-Wall -g  #编译时打印出警告信息 编译完成后的文件可以进行gdb调试
  6
  7 ALL:main #指定终极目标
  8
  9 main:$(obj)
 10         gcc $^ -o $@ $(message)   #相当于  gcc hello.c -o hello
 11
 12 $(obj):./ino/%.o:./inr/%.c
 13         gcc -c $< -o $@ $(message) -I $(path)  #相当于 gcc -c hello.c -o hello.o
 14
 15 clean:
 16         -rm -rf $(obj) main   #执行该命令时会删去 .o和可执行文件main
 17
 18 .PHONY:clean ALL  #防止目录中有文件名与之重复时编译不成功

四、应用场景三

        相同目录下 多个.c编译

1.编译过程如下

2.makefile代码如下所示

  1 src=$(wildcard *.c) #把所有的.c文件放在src变量中
  2 obj=$(patsubst %.c, %, $(src)) #把src中的.c文件替换成可执行文件
  3
  4 ALL:$(obj) #指定终极目标
  5
  6 %:%.c
  7         gcc  $< -o $@  #相当于 gcc  hello.c -o hello
  8
  9 clean:
 10         -rm -rf $(obj)
 11
 12 .PHONY:clean ALL  #防止目录中有文件名与之重复时编译不成功

         以上就是我总结的makefile简单的应用,更深入的层次可自行查阅makefile相关的书籍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值