找回密码
 立即注册
搜索
查看: 894|回复: 0

Makefile

[复制链接]

267

主题

0

回帖

1154

积分

管理员

积分
1154
发表于 2024-2-22 22:34:28 | 显示全部楼层 |阅读模式

make 命令

作用是读入一个名为 Makefile 的文件,然后执行这个文件中指定的指令。

Makefile

Makefile 告诉 make 怎样执行一系列的指令去依靠源文件生成一个目标文件。Makefile 中声明了一个依赖关系的列表,这个列表应当包含所有文件(无论是源文件或者目标)作为输入 。

Makefile 文件一般命名为 Makefile 或 makefile ,如果 m 小写有时候可能会出现错误。

$@ 表示当前目标文件的名字

$^ 表示用空格隔开的所有依赖文件

$< 表示第一个依赖文件

驱动的 Makefile 与一般应用程序的 Makefile 有所不同,驱动的 Makefile 要指定内核源代码的位置。

KDIR := /home/matt/linux-3.2.0-psp04.06.00.11
$(MAKE) -C $(KDIR) M=$(PWD) modules

\$(MAKE) 为自带的变量
-C \$(KDIR) 指明跳转到内核源码目录下读取那里的 Makefile
M=\$(PWD) 表明然后返回到当前目录继续读入、执行当前的 Makefile

方便起见一般都会先定义编译器链接器:

CC = gcc 
LD = gcc

正则表达式表示目录下所有 .c 文件,相当于:SRCS = main.c a.c b.c

SRCS = $(wildcard *.c)

OBJS 表示 SRCS 中把列表中的 .c 全部替换为 .o,相当于:OBJS = main.o a.o b.o

OBJS = $(patsubst %c, %o, $(SRCS))

可执行文件的名字:

TARGET = Hello

.PHONE伪目标,具体含义百度一下一大堆介绍

.PHONY:all clean

要生成的目标文件:

all: $(TARGET)

第一行依赖关系:冒号后面为依赖的文件,相当于Hello: main.o a.o b.o

第二行规则:\$@表示目标文件,\$^表示所有依赖文件,\$<表示第一个依赖文件

$(TARGET): $(OBJS)
    $(LD) -o $@ $^

上一句目标文件依赖一大堆.o文件,这句表示所有.o都由相应名字的.c文件自动生成

%o:%c
    $(CC) -c $^

make clean 删除所有 .o 和目标文件:

clean:
    rm -f $(OBJS) $(TARGET)

注意:命令前必须以 tab 键开头,不能是空格


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|棱讯科技 ( 粤ICP备2024228160号-2|粤公网安备44030002003510号 )

GMT+8, 2024-11-21 17:43 , Processed in 0.016389 second(s), 3 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表