这些Makefile结构意味着什么?

Chr*_*lli 4 gcc makefile

有人可以帮我弄清楚下面的make文件吗?

BINS=file1 file2 file3

all: $(BINS)

clean: 
        rm -f $(BINS) *~ 

$*: $@.c
        gcc -g -o $@ $?
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 什么是gcc的-g选项?
  2. 什么是$*和$ @
  3. 如何知道执行最后一个目标?

谢谢!

Jon*_*son 5

来自gccmake文档:

  1. "-g以操作系统的本机格式生成调试信息".

  2. 一个."$*与隐式规则匹配的词干(参见模式匹配).如果目标是dir/a.foo.b且目标模式是.%.b那么词干是dir/foo.词干是用于构造相关文件的名称.在静态模式规则中,词干是文件名的一部分,与目标模式中的'%'匹配."

    湾 "$ @规则目标的文件名.如果目标是归档成员,则'$ @'是归档文件的名称.在具有多个目标的模式规则中(请参阅模式规则简介), '$ @'是导致规则命令运行的任何目标的名称."

    C."$?比目标更新的所有先决条件的名称,它们之间有空格." (没问,但值得补充.)

  3. "'all'编译整个程序.这应该是默认目标."

这个例子makefile有点受限,因为它似乎只构建C程序.在GNU化妆有几个是学习如何写的makefile有用的大量例子.