makefile 基础应用

  • Makefile,由复杂到简的优化

一、基础

创建名字为 Makefile 的文件,输入make默认执行第一个目标,可带参数指定执行哪些目标如make clean

CC 编译器名字

约定成俗 gcc g++等

CFLAGS 用到的参数

-c

-g

-Wall

-o

选择性追加 -c -g -Wall等

只激活编译前三步,不把*.o链接成一个文件

生成一个debug模式的可执行文件

开启:显示所有的警告信息

指定生成目标文件名字,-o 后必须紧跟名字

.PHONY

隐式目标声明,用来避免目标名和生成文件名重复,导致目标无法执行

编译四步:

预处理,生成.i文件

编译,将处理后的文件转化为汇编语言.s文件

汇编,将.s文件生成为 机器码文件 .o (可以是单个的,最后再连接一起)

连接,.o文件连接成可执行程序

二、完整

CC=gcc
CFLAG=-c -g -Wall
OBJS=main.o add.o swap.o

target:$(OBJS)
    $(CC) $(CFLAG) -o endfile

main.o:main.c
    $(CC) $(CFLAG) main.c -o main.o
add.o:add.c
    $(CC) $(CFLAG) add.c -o add.o
 swap.o:swap.c
     $(CC) $(CFLAG) swap.c -o swap.o
 
 .PHONY:clean
 
 clean:
    rm *.o endfile -f

三、精简

$^

所有不重复的依赖项

$<

第一个依赖项

$@

目标名 的变量

目标项:依赖性

target:$(OBJS)

target 是 目标项,:后面的就是依赖项

CC=gcc
# 参数按需添加
CFLAG=-c -g -Wall -o 
# 一般添加什么文件在其后写入即可
OBJS=main.o add.o swap.o

# 依赖$(OBJS)里的.o文件生成目标文件
target:$(OBJS)
#即 gcc main.o add.o swap.o -o target
    $(CC) $^ -o $@

#   :<<'标识符'   标识符 这是多行注释,效果不如 单行# ,''最好加上
:<<'EOF'
main.o:main.c 
	$(CC) $(CFLAG) $@ $<
add.o:add.c
	$(CC) $(CFLAG) $@ $<
swap.o:swap.c
	$(CC) $(CFLAG) $@ $<
EOF

# 上几行可简化为
%.o:%.c 
	$(CC) $(CFLAG) $@ $<

.PHONY:clean
clean:
	rm *.o target -f

 常这么用:

CC=gcc
CFLAG=-c -g -Wall -o 
OBJS=main.o add.o swap.o sul.o

target:$(OBJS)
	$(CC) $^ -o $@

%.o:%.c 
	$(CC) $(CFLAG) $@ $<

.PHONY:clean
clean:
	rm *.o target -f
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值