Makefile入门

浅谈Makefile

Makefile是一种配置文件,类似于shell脚本。一个工程中往往包含很多个文件,使用Makefile能把所有文件(.c&.CPP&.h)编译、联系起来,确定它们的编译顺序,及那些需要重新编译,然后你仅仅需要在shell命令行执行make来实现工程中所有文件的自动化编译


从源代码到可执行文件

  • 源代码(.c,.cpp)通过compile生成中间文件(.o)
g++/gcc -c *.c
g++ -c *.cpp
  • 然后把全部中间文件链接起来,合成可执行文件。
g++/gcc -o filename *.o

Makefile规则

target … : prerequisites …
command

  • target是一个目标文件,可以是中间文件(.o),也可以是可执行文件,还可以是标签。

  • prerequisites就是生成target需要的文件。

  • command就是需要执行的shell命令。

  • target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是Makefile的规则。也就是Makefile中最核心的内容。


实例

#obj=main.o my_print.o my_print2.o

#run: $(obj)
#   g++ -o run $(obj)

#my_print.o: my_print.c
#   g++ -c my_print.c

#my_print2.o: my_print2.c
#   g++ -c my_print2.c

#main.o: main.c all.h
#   g++ -c main.c

#clean:
#   rm run $(obj)


#只要make看到一个[.o]文件,它就会自动的把[.c]文件加在依赖关系中,如  
#果make找到一个whatever.o,那么whatever.c,就会是whatever.o的依  
#赖文件。并且 cc -c whatever.c 也会被推导出来,下面是简易版
obj=main.o my_print.o my_print2.o

run: $(obj)
    g++ -o run $(obj)

main.o:all.h
my_print.o:
my_print2.o:

.PHONY #表示clean是一个伪目标文件
clean:
    rm run $(obj)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值