前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Makefile的实战例子

Makefile的实战例子

作者头像
Rice加饭
发布2022-05-10 08:42:45
4770
发布2022-05-10 08:42:45
举报
文章被收录于专栏:Rice嵌入式

前面我们对Makefile的知识点进行描述,现在给出一个例子,来看看如何使用,顺便结束Makefile这个话题。

我们准备的文件目录和文件内容。如下:

代码语言:javascript
复制
$ tree
  .
  ├── inc
  │   ├── add.h
  │   └── sub.h
  ├── Makefile
  └── src
      ├── add.c
      ├── main.c
      └── sub.c

其中Makefile的内容,如下:

代码语言:javascript
复制
VERSION = 1.0.0
SOURCE = $(wildcard ./src/*.c)
OBJECT = $(patsubst %.c, %.o, $(SOURCE))

INCLUEDS = -I ./inc

TARGET  = rice
CC      = gcc
CFLAGS  = -Wall -g
 
$(TARGET): $(OBJECT)
  @mkdir -p output/
  $(CC) $^ $(CFLAGES) -o output/$(TARGET)_$(VERSION)

%.o: %.c
  $(CC) $(INCLUEDS) $(CFLAGES) -c $< -o $@

.PHONY:clean
clean:
  @rm -rf $(OBJECT) output/

分析:

行1:将版本号赋值给变量VERSION

行2:获取当前目录下src所有.c文件,并赋值给变量SOURCE。

行3:将./src目录下的.c结尾的文件,替换成.o文件,并赋值给OBJECT。

行4:通过-I选项指明头文件的目录,并赋值给变量INCLUDES。

行7:最终目标文件的名字rice,赋值给TARGET。

行8:替换CC的默认之cc,改为gcc。

行9:将 显示所有的警告信息选项和gdb调试选项赋值给变量CFLAGS。

行12:创建目录output,并且不再终端现实该条命令。

行13:可执行程序100ask,并将可执行程序生成到output目录,生成可执行文件的后缀添加版本号。

行16:将源文件生成对应的目标文件。

行18:伪目标,避免当前目录有同名的clean文件。

行20:用与执行命令make clean时执行的命令,删除编译过程生成的文件。

最后编译的结果,如下:

代码语言:javascript
复制
$ make
  gcc -I ./inc  -c src/main.c -o src/main.o
  gcc -I ./inc  -c src/add.c -o src/add.o
  gcc -I ./inc  -c src/sub.c -o src/sub.o
  gcc src/main.o src/add.o src/sub.o  -o output/rice
$tree
  .
  ├── inc
  │   ├── add.h
  │   └── sub.h
  ├── Makefile
  ├── output
  │   └── rice_1.0.0
  └── src
      ├── add.c
      ├── add.o
      ├── main.c
      ├── main.o
      ├── sub.c
      └── sub.o
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Rice 嵌入式开发技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档