Makefile解释

# Makefile
#

#CROSS_COMPILE = arm-linux-gnu-

CC = $(CROSS_COMPILE)gcc

ifdef CROSS_COMPILE
TARGET = /opt/filesystem
endif


#DEBUG = -g -O0 -Wall
DEBUG = -g -O2
CFLAGS += $(DEBUG)

PROGS = ${patsubst %.c, %, ${wildcard *.c}} 

all : $(PROGS)

install: $(PROGS)
ifdef CROSS_COMPILE
	mkdir $(TARGET)/root/net -p
	cp $(PROGS) $(TARGET)/root/net -f
endif
%.o : %.c
	$(CC)  $(CFLAGS) -c $< -o $@

.PHONY: uninstall clean dist

uninstall :
ifdef CROSS_COMPILE
	cd $(TARGET)/root/net && rm -f $(PROGS)
endif

clean : uninstall
	- rm -f $(PROGS) core *.gz

dist: clean
	tar czf ../makeru_2_dns_demo.tar.gz ../2_dns_demo	

加注释

# Makefile
#

# 使用交叉编译器时,可以设置CROSS_COMPILE变量为交叉编译器前缀
# CROSS_COMPILE = arm-linux-gnu-

# 设置编译器
CC = $(CROSS_COMPILE)gcc

# 如果设置了CROSS_COMPILE变量,则设置目标文件夹为/opt/filesystem
ifdef CROSS_COMPILE
TARGET = /opt/filesystem
endif

# 调试选项
# 使用-g选项启用调试信息
# 使用-O2选项启用优化
# 使用-Wall选项启用额外的警告信息
# 将调试选项赋值给CFLAGS变量
DEBUG = -g -O2
CFLAGS += $(DEBUG)

# 需要编译的程序列表
# ${wildcard *.c}获取当前目录下的所有.c文件的列表
# ${patsubst %.c, %, ${wildcard *.c}}对每个.c文件去掉扩展名,生成对应的可执行文件名列表
PROGS = ${patsubst %.c, %, ${wildcard *.c}} 

# 默认目标,编译所有的程序
all : $(PROGS)

# 安装目标,将可执行文件复制到指定目录
install: $(PROGS)
ifdef CROSS_COMPILE
	# 创建目标文件夹
	mkdir $(TARGET)/root/net -p
	# 将可执行文件复制到目标文件夹
	cp $(PROGS) $(TARGET)/root/net -f
endif

# 编译.c文件为.o文件
%.o : %.c
	$(CC)  $(CFLAGS) -c $< -o $@

# 卸载目标,删除指定目录中的可执行文件
uninstall :
ifdef CROSS_COMPILE
	cd $(TARGET)/root/net && rm -f $(PROGS)
endif

# 清理目标,删除生成的可执行文件和中间文件
clean : uninstall
	- rm -f $(PROGS) core *.gz

# 打包目标,将代码压缩为.tar.gz文件
dist: clean
	tar czf ../makeru_2_dns_demo.tar.gz ../2_dns_demo

Makefile文件2

CROSS_COMPILE=arm-linux-
CC=$(CROSS_COMPILE)gcc
CFLAGS= -c -g
#LDFLAGS= -lpthread -L ./lib -lsqlite3
LDFLAGS= -lpthread

OBJS=main.o data_global.o pthread_transfer.o \
	 pthread_client_request.o pthread_buzzer.o pthread_led.o\
	 pthread_sqlite.o \
	 pthread_refresh.o pthread_sms.o

monitor_obj :$(OBJS)
	$(CC) -o $@ $^ $(LDFLAGS)
	mv *o ./obj
$(OBJS):%.o:%.c
	$(CC) $(CFLAGS) $< -o $@

install:
	sudo cp monitor_obj ~/source/rootfs/ 

.PHONY:clean
clean:
	rm *.o monitor_obj -rf 
CROSS_COMPILE=arm-linux-
# 设置交叉编译器前缀

CC=$(CROSS_COMPILE)gcc
# 设置编译器为交叉编译器

CFLAGS= -c -g
# 设置编译选项,包括-c(只编译不链接)和-g(生成调试信息)

LDFLAGS= -lpthread
# 设置链接选项,包括链接pthread库

OBJS=main.o data_global.o pthread_transfer.o \
	 pthread_client_request.o pthread_buzzer.o pthread_led.o\
	 pthread_sqlite.o \
	 pthread_refresh.o pthread_sms.o
# 定义目标文件列表

monitor_obj :$(OBJS)
	$(CC) -o $@ $^ $(LDFLAGS)
	mv *o ./obj
# 目标文件 monitor_obj 的依赖是 $(OBJS),使用$(CC)将所有目标文件链接成可执行文件 monitor_obj,并将中间文件移到 ./obj 目录下

$(OBJS):%.o:%.c
	$(CC) $(CFLAGS) $< -o $@
# 使用模式规则将.c文件编译成.o文件

install:
	sudo cp monitor_obj ~/source/rootfs/
# 安装目标,将可执行文件 monitor_obj 复制到 ~/source/rootfs/ 目录下

.PHONY:clean
clean:
	rm *.o monitor_obj -rf
# 清理目标,删除所有.o文件和可执行文件 monitor_obj

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值