first commit
diff --git a/Makefile b/Makefile
index e69de29..24e537c 100644
--- a/Makefile
+++ b/Makefile
@@ -0,0 +1,4 @@
+all clean jupiter:
+	cd src && $(MAKE) $@
+
+.PHONY: all clean
diff --git a/src/Makefile b/src/Makefile
index e69de29..fdb5604 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -0,0 +1,9 @@
+all: jupiter
+
+jupiter: main.c
+	gcc -g -O0 -o $@ main.c
+
+clean:
+	-rm jupiter
+
+.PHONY all clean
diff --git a/src/main.c b/src/main.c
index e69de29..8e3e7d9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -0,0 +1,8 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int main(int argc, char *argv[])
+{
+    fprintf(stdout, "Hello from %s\n", argv[0]);
+    return 0;
+}
diff --git a/src/Makefile b/src/Makefile
index fdb5604..6209602 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -6,4 +6,4 @@ jupiter: main.c
 clean:
 	-rm jupiter

-.PHONY all clean
+.PHONY: all clean
diff --git a/Makefile b/Makefile
index 24e537c..84dd206 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
 all clean jupiter:
-	cd src && $(MAKE) $@
+	cd src && $(MAKE) $@				# 当有tab时，make就认为这是一个命令

 .PHONY: all clean
diff --git a/README.md b/README.md
index 6634c66..ba987c6 100644
--- a/README.md
+++ b/README.md
@@ -2,3 +2,16 @@ jupiter
 =======

 learn how to use autotools
+
+make 规则
+1、make处理makefile分为两个阶段：第一阶段收集所有变量和规则到表中等内部结构，
+第二阶段，根据规则解析依赖关系，调用必需的规则根文件系统时间戳
+2、前面有一个tab，make会把它视为command；
+3、make为每一个command开启一个单独的shell，这
+意味着，前一个命令export的变量，对后者来说是不可见的；
+4、针对2的问题有三种解决方法
+   1） [tab]cmmand1; \(后面没有空格)
+       [tab]command2
+   2)  [tab]command1; command2
+   3)  TMPDIR=/var/tmp gcc -o ... (TMPDIR变量只对子进程中运行的gcc可见)
+   这三种方法都可以看做是一个单独的命令
diff --git a/README.md b/README.md
index ba987c6..8959696 100644
--- a/README.md
+++ b/README.md
@@ -5,7 +5,8 @@ learn how to use autotools

 make 规则
 1、make处理makefile分为两个阶段：第一阶段收集所有变量和规则到表中等内部结构，
-第二阶段，根据规则解析依赖关系，调用必需的规则根文件系统时间戳
+第二阶段，根据规则解析依赖关系，调用必需的规则根据文件系统时间戳，重新生成依赖，
+一些变量在第一阶段处理规则时就立刻被解析，其他的在第二阶段执行时才解析；
 2、前面有一个tab，make会把它视为command；
 3、make为每一个command开启一个单独的shell，这
 意味着，前一个命令export的变量，对后者来说是不可见的；
diff --git a/README.md b/README.md
index 8959696..ff71b3b 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,8 @@ learn how to use autotools
 make 规则
 1、make处理makefile分为两个阶段：第一阶段收集所有变量和规则到表中等内部结构，
 第二阶段，根据规则解析依赖关系，调用必需的规则根据文件系统时间戳，重新生成依赖，
-一些变量在第一阶段处理规则时就立刻被解析，其他的在第二阶段执行时才解析；
+一些变量在第一阶段处理规则时就立刻被解析，其他的在第二阶段执行时才解析
+(这意味着，command中的待解析的变量可以在command后面定义)；
 2、前面有一个tab，make会把它视为command；
 3、make为每一个command开启一个单独的shell，这
 意味着，前一个命令export的变量，对后者来说是不可见的；
diff --git a/README.md b/README.md
index ff71b3b..9a75b6c 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,9 @@ make 规则
 第二阶段，根据规则解析依赖关系，调用必需的规则根据文件系统时间戳，重新生成依赖，
 一些变量在第一阶段处理规则时就立刻被解析，其他的在第二阶段执行时才解析
 (这意味着，command中的待解析的变量可以在command后面定义)；
+rule在第一阶段解析时，会reference变量；
+command会在第二阶段，reference变量；
+因此var最好在rule前定义后就不要改变了，否则，command解析的是修改后的var
 2、前面有一个tab，make会把它视为command；
 3、make为每一个command开启一个单独的shell，这
 意味着，前一个命令export的变量，对后者来说是不可见的；
diff --git a/README.md b/README.md
index 9a75b6c..bd014ff 100644
--- a/README.md
+++ b/README.md
@@ -20,3 +20,10 @@ command会在第二阶段，reference变量；
    2)  [tab]command1; command2
    3)  TMPDIR=/var/tmp gcc -o ... (TMPDIR变量只对子进程中运行的gcc可见)
    这三种方法都可以看做是一个单独的命令
+5、自动变量
+$@ 所有目标名字的引用 (explicit/implicit)
+$% 当前的target是静态库 (explicit/implicit)
+$? 比当前target新的依赖列表的引用 (explicit/implicit)
+$< 依赖列表中被target规则选中的的引用 (implicit)
+$* 当前target名字（去掉后缀）的引用 (implicit)
+由于可移植性，除了$@，其他的不推荐使用
diff --git a/README.md b/README.md
index bd014ff..2d29d85 100644
--- a/README.md
+++ b/README.md
@@ -27,3 +27,10 @@ $? 比当前target新的依赖列表的引用 (explicit/implicit)
 $< 依赖列表中被target规则选中的的引用 (implicit)
 $* 当前target名字（去掉后缀）的引用 (implicit)
 由于可移植性，除了$@，其他的不推荐使用
+6、implicit rule （功能强大，但不要过度使用）
+可自己定义，可重载
+7、makefile中第一个出现的规则，作为makefile的default规则。
+8、支持多个目标（依赖相同的依赖）
+eg:
+all clean target:
+    cd src && $(MAKE) $@
diff --git a/README.md b/README.md
index 2d29d85..54576aa 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ command会在第二阶段，reference变量；
    3)  TMPDIR=/var/tmp gcc -o ... (TMPDIR变量只对子进程中运行的gcc可见)
    这三种方法都可以看做是一个单独的命令
 5、自动变量
-$@ 所有目标名字的引用 (explicit/implicit)
+$@ 目标名字的引用 (explicit/implicit)
 $% 当前的target是静态库 (explicit/implicit)
 $? 比当前target新的依赖列表的引用 (explicit/implicit)
 $< 依赖列表中被target规则选中的的引用 (implicit)
@@ -34,3 +34,4 @@ $* 当前target名字（去掉后缀）的引用 (implicit)
 eg:
 all clean target:
     cd src && $(MAKE) $@
+一个rule在任意给定时间内，只能在一个target上执行，因此$@可以仅仅引用一个target，尽管，规则中有多个。