diff --git a/README.md b/README.md
index 54576aa..1155754 100644
--- a/README.md
+++ b/README.md
@@ -35,3 +35,49 @@ eg:
 all clean target:
     cd src && $(MAKE) $@
 一个rule在任意给定时间内，只能在一个target上执行，因此$@可以仅仅引用一个target，尽管，规则中有多个。
+
+
+
+Standard targets
+
+all              install        install-html
+install-dvi      install-pdf    install-ps
+install-strip    uninstall      clean
+distclean        mostlyclean    maintainer-clean
+TAGS             info           dvi
+html             pdf            ps
+dist             check          installcheck
+installdirs
+
+
+
+Prefix Variables and Their Default Values
+
+Value                           Default Value
+prefix                          /usr/local
+exec_prefix                     $(prefix)
+bindir                          $(exec_prefix)/bin
+sbindir                         $(exec_prefix)/sbin
+libexecdir                      $(exec_prefix)/libexec
+datarootdir                     $(prefix)/share
+datadir                         $(datarootdir)
+sysconfdir                      $(prefix)/etc
+sharedstatedir                  $(prefix)/com
+localstatedir                   $(prefix)/var
+includedir                      $(prefix)/include
+oldincludedir                   /usr/include
+docdir                          $(datarootdir)/doc/$(package)
+infodir                         $(datarootdir)/info
+htmldir                         $(docdir)
+dvidir                          $(docdir)
+pdfdir                          $(docdir)
+psdir                           $(docdir)
+libdir                          $(exec_prefix)/lib
+lispdir                         $(datarootdir)/emacs/site-lisp
+localedir                       $(datarootdir)/locale
+mandir                          $(datarootdir)/man
+manNdir                         $(mandir)/manN (N = 1..9)
+manext                          .1
+manNext                         .N (N = 1..9)
+srcdir                          The source-tree directory corresponding to the
+                                current directory in the build tree
diff --git a/Makefile b/Makefile
index 44275cf..7b1c80b 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,12 @@ version = 1.0
 tarname = $(package)
 distdir = $(tarname)-$(version)
 prefix = /usr/local				# 命令行传入可覆盖
+exec_prefix = $(prefix)
+bindir = $(exec_prefix)/bin
+
 export prefix					# 属于GNU make，不具有可移植性
+export exec_prefix
+export bindir

 all clean check install uninstall jupiter:
 	cd src && $(MAKE) $@
diff --git a/src/Makefile b/src/Makefile
index b2c4c6c..346dc29 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -8,11 +8,11 @@ check: all
 	@echo "*** ALL TESTS PASSWD ***"

 install:
-	install -d $(prefix)/bin
-	install -m 0755 jupiter $(prefix)/bin
+	install -d $(bindir)
+	install -m 0755 jupiter $(bindir)

 uninstall:
-	-rm $(prefix)/bin/jupiter
+	-rm $(bindir)/jupiter

 clean:
 	-rm jupiter
diff --git a/src/Makefile b/src/Makefile
index 346dc29..990e5ad 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -8,11 +8,12 @@ check: all
 	@echo "*** ALL TESTS PASSWD ***"

 install:
-	install -d $(bindir)
-	install -m 0755 jupiter $(bindir)
+	install -d $(DESTDIR)$(bindir)		# to supported staged installation
+										# $(DESTDIR) 这个变量不用定义，提供给RPM或APT等包管理器进行处理
+	install -m 0755 jupiter $(DESTDIR)$(bindir)

 uninstall:
-	-rm $(bindir)/jupiter
+	-rm $(DESTDIR)$(bindir)/jupiter

 clean:
 	-rm jupiter
diff --git a/Makefile b/Makefile
index 7b1c80b..8656db8 100644
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,16 @@
+# 不要在每一行的后面名加注释，以免在变量后面引入空格，
+# 比如之前在prefix变量后面有注释，造成bindir的值为/usr/local /bin
+# 命令行传入可覆盖
 package = jupiter
 version = 1.0
 tarname = $(package)
 distdir = $(tarname)-$(version)
-prefix = /usr/local				# 命令行传入可覆盖
+prefix = /usr/local
 exec_prefix = $(prefix)
 bindir = $(exec_prefix)/bin

-export prefix					# 属于GNU make，不具有可移植性
+# export 属于GNU make，不具有可移植性
+export prefix
 export exec_prefix
 export bindir

@@ -15,32 +19,43 @@ all clean check install uninstall jupiter:

 dist: $(distdir).tar.bz2

-$(distdir).tar.bz2: $(distdir)	# 如果$(distdir)已经存在，则不会执行下面的rule，直接打包，会造成错误，解决方法如*所示
+# 如果$(distdir)已经存在，则不会执行下面的rule，直接打包，会造成错误，解决方法如*所示
+# ru前不加'-'，是为了确定上个command一定成功。
+$(distdir).tar.bz2: $(distdir)
 	tar -jcv -f $@ $(distdir)
-	rm -rf $(distdir)			# 这个地方不加'-'，是为了确定上个command一定成功。
+	rm -rf $(distdir)

-$(distdir): FORCE				# * 可以将$(distdir)放在.PHONY中，不过，由于它本是一个真实的target，因此不合理
-                                # 解决方法是，让它依赖于.PHONY的target，从而每次都会执行
+# * 可以将$(distdir)放在.PHONY中，不过，由于它本是一个真实的target，因此不合理
+# 解决方法是，让它依赖于.PHONY的target，从而每次都会执行
+$(distdir): FORCE
 	mkdir -p $(distdir)/src
 	cp Makefile $(distdir)
 	cp src/Makefile $(distdir)/src
 	cp src/main.c $(distdir)/src

+# make执行每个command后会向shell返回一个值，
+# 如果出错，会报出错误信息，并停止运行。
+# 在命令前加 '-' 可以忽略错误，并继续执行。
 FORCE:
-	-rm $(distdir).tar.bz2 >/dev/null 2>&1  # make执行每个command后会向shell返回一个值，
-                                            # 如果出错，会报出错误信息，并停止运行。
-                                            # 在命令前加 '-' 可以忽略错误，并继续执行。
+	-rm $(distdir).tar.bz2 >/dev/null 2>&1
 	-rm -rf $(distdir) >/dev/null 2>&1

+# 注意shell中等号两端不要有空格
+# 注意这个$$，这么用确保make将变量的引用传给shell
+# 而不是在执行make的时候就进行展开。
+# 学习一下，用多个shell命令，反斜线后面不能有空格
+# 无法对软连接，或是深层目录进行检查。
+# to supported staged installation, $(DESTDIR) 这个变量不用定义，提供给RPM或APT等包管理器进行处理
+# 包管理器会在一个临时路径下做一些操作，在这里使用distcheck测试时，会生成这样的测试路径
+# /home/tyrion/Document/_inst/usr/local/bin
 distcheck: $(distdir).tar.bz2
 	tar -jxv -f $(distdir).tar.bz2
 	cd $(distdir) && $(MAKE) all
 	cd $(distdir) && $(MAKE) check
-	cd $(distdir) && $(MAKE) prefix=$${PWD}/_inst install  # 注意等号两端不要有空格
-														   # 注意这个$$，这么用确保make将变量的引用传给shell                                                           # 而不是在执行make的时候就进行展开。
-	cd $(distdir) && $(MAKE) prefix=$${PWD}/_inst uninstall
-	@remaining="`find $${PWD}/$(distdir)/_inst -type f | wc -l`"; \                          # 学习一下
-	if test "$${remaining}" -ne 0; then \                                                    # 只能检查一般文件，无法对软连接，或是深层目录进行检查。
+	cd $(distdir) && $(MAKE) DESTDIR=$${PWD}/_inst install
+	cd $(distdir) && $(MAKE) DESTDIR=$${PWD}/_inst uninstall
+	@remaining="`find $${PWD}/$(distdir)/_inst -type f | wc -l`"; \
+	if test "$${remaining}" -ne 0; then \
 		echo "*** $${remaining} file(s) remaining in stage directory!"; \
 		exit 1; \
 	fi
diff --git a/src/Makefile b/src/Makefile
index 990e5ad..fc3fc8f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -7,11 +7,13 @@ check: all
 	./jupiter | grep "Hello from ./jupiter!"
 	@echo "*** ALL TESTS PASSWD ***"

-install:
-	install -d $(DESTDIR)$(bindir)		# to supported staged installation
-										# $(DESTDIR) 这个变量不用定义，提供给RPM或APT等包管理器进行处理
+# to supported staged installation, $(DESTDIR) 这个变量不用定义，提供给RPM或APT等包管理器进行处理
+
+install:
+	install -d $(DESTDIR)$(bindir)
 	install -m 0755 jupiter $(DESTDIR)$(bindir)

+# 包管理器并不会按照DESTDIR去删除，它有自己的规则，在这里是为了完成distcheck目标
 uninstall:
 	-rm $(DESTDIR)$(bindir)/jupiter