如何编写一个项目的Makefile文件

Makefile结构如下:

顶级目录:

                Makefile

                Makefile.bulid

子目录:

                Makefile

我的源码文件目录结构如下:

./(根目录) 
    main.c
    Makefile
    Makefile.build

    display/ 
            disp_manager.c
            fb.c
            crt.c
            Makefile
    draw/ 
            draw.c
            Makefile
    encoding/ 
            ascii.c
            encoding_manager.c
            utf-16be.c
            utf-16le.c
            utf-8.c
            Makefile
    fonts/ 
            ascii.c
            fonts_manager.c
            freetype.c
            gbk.c
            Makefile

#顶级目录Makefile

CROSS_COMPILE = 
AS		= $(CROSS_COMPILE)as
LD		= $(CROSS_COMPILE)ld
CC		= $(CROSS_COMPILE)gcc
CPP		= $(CC) -E
AR		= $(CROSS_COMPILE)ar
NM		= $(CROSS_COMPILE)nm

STRIP		= $(CROSS_COMPILE)strip
OBJCOPY		= $(CROSS_COMPILE)objcopy
OBJDUMP		= $(CROSS_COMPILE)objdump

export AS LD CC CPP AR NM
export STRIP OBJCOPY OBJDUMP

CFLAGS := -Wall -O2 -g
CFLAGS += -I $(shell pwd)/include -I /usr/include/freetype2

LDFLAGS := -lm -lfreetype -lvga -lvgagl

export CFLAGS LDFLAGS

TOPDIR := $(shell pwd)
export TOPDIR

TARGET := show_file


obj-y += main.o
obj-y += display/
obj-y += draw/
obj-y += encoding/
obj-y += fonts/


all : 
	make -C ./ -f $(TOPDIR)/Makefile.build
	$(CC) $(LDFLAGS) -o $(TARGET) built-in.o


clean:
	rm -f $(shell find -name "*.o")
	rm -f $(TARGET)

distclean:
	rm -f $(shell find -name "*.o")
	rm -f $(shell find -name "*.d")
	rm -f $(TARGET)
	

包括内容:定义工具链、编译参数、 链接参数,以及obj-y指定了根目录下要编进去的文件和子目录。这里对变量不解释了,直接从all开始。
all是一个伪目标,没有依赖文件,其下面的命令会直接执行;

make -C ./ -f $(TOPDIR)/Makefile.build

-C指定了文件当前所在文件夹的目录,然后调用$(TOPDIR)/目录下(也就是顶级目录下)的Makefile.build执行编译工作。

$(CC) $(LDFLAGS) -o $(TARGET) built-in.o

gcc -链接参数 -o 目标文件名 依赖文件名

清除就不多解释了,简单的shell命令和变量替换。

明天解释最麻烦的Makefile.build,这个是Makefile的核心。

如何编写一个项目的Makefile文件_hubert937的博客-CSDN博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值