Makefile的使用--学习篇

Makefile制定编译规则的语法格式:
目标:依赖1 依赖2 依赖3 …依赖N
(TAB键)命令1
(TAB键)命令2
(TAB键)命令3

语义:根据命令把依赖文件编译生成目标文件,命令是从上往下逐条执行
注意:Makefile的注释用#
例如:利用Makefile把helloworld.c编译生成helloworld可执行程序
vim helloworld.c
vim Makefile 添加如下内容:

#制定编译规则1
helloworld:helloworld.o
	gcc -o helloworld helloworld.o
#制定编译规则2
helloworld.o:helloworld.c
	gcc -c -o helloworld.o helloworld.c

保存退出
make (执行make令进行编译)

Makefile变量:
定义变量的形式:
1.OBJ=helloworld.o 定义初始化变量OBJ为helloworld.o
2.OBJ:=helloworld.o 定义初始化变量OBJ为helloworld.o
3.OBJ=helloworld.o
OBJ+=test.o 在OBJ变量的基础上继续添加test.o,结果OBJ=helloworld.o test.o
等价写法:OBJ=helloworld.o test.o
4.OBJ?=helloworld.o 如果OBJ之前赋过值,此赋值无效,否则有效
5.通过变量访问其值语法:$(OBJ)

技巧:

//技巧
%.o:%.c
	gcc -c -o $@ $<
//作用:将当前目录下所有的.c文件编译生成对应的.o文件
%.o-->$@:目标文件
%.c-->$<:源文件

伪目标:没有依赖的目标
语法:
目标:
(TAB键)命令
语义:只有当执行make 目标名时,自动执行对应的命令
例如:

clean:
	rm helloworld helloworld.o
//当执行make clean时,单独执行rm helloworld helloworld.o命令

注意:命令前面加@可以隐藏命令执行的打印过程

实例:

gcc:此编译器生存的文件运行在电脑上
arm-linux-gcc:此编译器生存的文件运行在安卓手机上
#CROSS_COMPILE=arm-linux-
#如果运行在手机上,只需去掉注释即可,如果运行在电脑上,注释这个变量
CC=$(CROSS_COMPILE)gcc#电脑:CC=gcc, 手机:CC=arm-linux-gcc

#定义变量
BIN=zz
OBJ=qq.o

#CROSS_COMPILE=arm-linux- #如果程序运行在手机上用这条语句编译
cc=$(CROSS_COMPILE)gcc #电脑是cc=gcc, 手机是:cc=arm-linux-gcc

INSTALL_PATH=/home/tarena/exefile
#规则1
$(BIN):$(OBJ)
	@echo "开始编译"
	@$(cc) -o $(BIN) $(OBJ)
	@echo "编译结束"
#编译2
%.o:%.c
	@$(cc) -c $< -o $@
#编译3
clean:
	rm $(BIN) $(OBJ)
	@echo "删除完毕"
#编译4
install:
	cp $(BIN) $(INSTALL_PATH)
	@echo "文件在:/home/tarena/exefile"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值