Makefile Basics
这段代码是 isaacs 的一段 gist,可以学到 make 的最基本知识,而关于更多的知识,可查看 gnu make man:http://www.gnu.org/software/make/manual/make.html
make -f <filename>
可以指定运行哪个 Makefile,默认使用./Makefile
- 语法如下,target 是必须的,依赖和命令是可选的
<target>: <prerequiresites>...
<commands>
@
加在命令前面不输出命令- 多条
<commands
之间不会互相共享环境变量
var-lost:
export foo=bar
echo "foo=[$$foo]" # 这里 $foo 不会被赋值上 bar,因为上下是隔离的环境
- 共享的方法是写到一行去
var-kept:
export foo=bar; \
echo "foo=[$$foo]"
- 依赖可以是文件名,target 只会在所有依赖有变动的时候才会运行。例如
source.txt
是依赖,如果文件时间戳没变,依赖它的 target 就不会被运行 - 每个文件都写依赖不现实,可以在 commands 中用
$@
表示当前 target,$<
表示第一个依赖 target,$^
表示所有依赖 targets,$?
表示更新的依赖列表,$$
是 $ 的转义,$*
是 % 的引用。 .PHONY
依赖所有文件