Makefile

Makefile是一个文件,用来写入源代码编译规则,通过make命令执行。

以hello.c 为例

vi Makefile-------------

hello:hello.c

        gcc hello.c -o hello

---------------------------------

在终端输入指令make,以此查找makefile、Makefile、MAKEFILE文件,进行编译

hello(目标文件):hello.c(依赖文件)

        gcc -o hello hello.c (生成目标所需要的命令)

例如keil等编译器提供三种命令clean(清除编译文件) build(编译) rebuild(重编译)

所以makefile可以这样书写

------------------------------------------

hello:hello.c

        gcc hello.c -o hello

clean:        //清除不依赖文件

        rm hello

rebuild:clean hello//重新编译依赖makefile的两个写好的编译目标指令,不需要命令

注意,如果一个目标依赖于另一个目标,则另一个目标先执行

在编译大型项目时,每次更改程序都导致全部重新编译,为提高效率,

编译过程只进行到汇编,生成机器码,未完成链接,这样一个源文件更改不会影响其他源文件编译。

main:main.o add.o del.o modify.o

        gcc -o main main.o add.o del.o modify.o

main.o:main.c

        gcc -c main.c

add.o:add.c

        gcc -c add.c

del.o:del.c

        gcc -c del.c

modify.o:modify.c

        gcc -c modify.c

以上,虽然效率提高,但肉眼觉得很麻烦,我们可以简化,利用$@$^$<

main:main.o add.o del.o modify.o

        gcc -o $@$^        //$@目标文件完整名称,$^所有依赖文件

.o:.c                               //.o:.c同等与*.o:*.c,意为所有.c文件变为.o文件

        gcc -c $<                //$<代表第一个依赖文件,这里.c代表所有.c文件了

clean:

        rm *.o                //.o在目标文件依赖文件时可以忽略*,clean内部命令仍*.o

        rm main

rebuild: clean main

在Makefile中可以定义变量,以便于后续增加变量或删除变量修改

EXEC = main        //目标文件名称更改改变这个变量即可

OBJS += main.o

OBJS += add.o

OBJS += del.o

OBJS += modify.o  //后续添加参与编译的文件可直接在后面+=

CC  = gcc                //编译器更改改变这个变量即可

$(EXEC):$(OBJS)

        $(CC) -o $@ $^

.o:.c

        $(CC) -c $<

clean:

        rm -f $(OBJS)                //rm -f  删除文件时忽略不存在的文件,这样被删除的文件

                                                不存在也不会报错

        rm -f $(EXEC)

rebuild:clean $(EXEC)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值