【一】makefile的基本规则

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaoxu2050/article/details/83927487

1、基本格式:

target(目标):prerequisites(依赖)
    command
    ...
    ...

注意:command的缩进必须使用tab,使用空格时会error。例子:

image_bs: image_bs.o ../common/profile.o
g++ -o image_bs image_bs.o ../common/profile.o

说明:

  • 目标image_bs依赖于image_bs.o和../common/profile.o,当两者都存在时,则执行执行shell命令,生成image_bs。
  • 如果image_bs.o文件不存在,makefile会搜索目标image_bs.o,然后执行该目标的shell名称生成image_bs.o对象(如果没有目标image_bs.o,makefile通过“隐式规则”,生成该文件)。
  • 如果image_bs已经生成了,再执行make image_bs,会发生什么呢?    这时候make命令会检查他依赖项是否发生变化(即image_bs.o和 ../common/profile.o),有变化则重行执行shell命令,否则什么都不做喽。
  • 4、需要特别说明的是:第三条的检测是递归的。    目标A依赖目标B,目标B依赖于目标C,目标C依赖于文件D(例如cpp或者.h文件),文件D的变化将引起目标C、B、A一次被编译。

2、隐式规则:

A.o: define.h
#没有定义command命令,make会根据预定义的隐式规则,执行以下操作:
#g++ -c test.cpp -o A.o

3、总结原则

1、依赖项使用完整路径,可以使用相对路径

A:../B.o

2、被依赖项名称要一致:

A: ../B.o
../B.o: ../B.cpp

A依赖上级目录的B.o。如果不指名相对路径,系统将会推测B.o的生成命令    g++ -c B.cpp -o B.o    这个可能就不是你想要的了。

3、依赖需要写完整,包括.h文件

B.o:B.cpp B.h
g++ -c B.cpp -o B.o

如果不说明依赖B.h,那么头文件变化时,不会重新,导致头文件的变化不会体现到B.o中

猜你喜欢

转载自blog.csdn.net/xiaoxu2050/article/details/83927487