Makefile规则

2914阅读 0评论2012-03-16 FreedomXura
分类:Python/Ruby

Makefile的基本标准为:

点击(此处)折叠或打开

  1. target: tar_1 tar_2 tar_3 ...
  2.        command1
  3.        command2
  4.        ...
注意:其中command必须用tab空格。
eg:

点击(此处)折叠或打开

  1. main: main.o stack.o maze.o
  2.      gcc main.o stack.o maze.o -o main
常用的特殊变量有:

eg:上面的可以改写为: 

  1. main: main.o stack.o maze.o
  2.     gcc $^ -o $@
如果一个目标在Makefile中的所有规则都没有命令列表,make会尝试在内建的隐含规则(Implicit Rule)数据库中查找适用的规则。make的隐含规则数据库可以用make -p命令打印,打印出来的格式也是Makefile的格式,包括很多变量和规则,其中和我们这个例子有关的隐含规则有:

点击(此处)折叠或打开

  1. # default
  2. OUTPUT_OPTION = -o  $@

  3. # default
  4. CC = cc

  5. # default
  6. COMPILE.c = $(CC)  $(CFLAGS)  $(CPPFLAGS)  $(TARGET_ARCH)  -c

  7. %.o: %.c
  8. # commands to execute (built-in):
  9.    $(COMPILE.c)  $(OUTPUT_OPTION)  $<
#为注释符号,如前面所述,$@指目标文件通常把CFLAGS定义成一些编译选项,例如-O、-g等,而把CPPFLAGS定义成一些预处理选项,例如-D、-I等。

%.o 和 %.c 是一种特殊规则,称为模式规则,在上面的脚本中发现main.o没有command列表,所以make会自动寻找隐含规则,发现隐藏规则中有这样一种模式规则,main.o符合%.o的格式,则说明此时此刻 % 就等于 main. %.c 也就等于 main.c

同理,stack.o也没有command列表,则make到隐藏规则中找隐含规则, 此时% == stack。


上一篇:计算1byte数据有多少位被置1
下一篇:shell的if判断