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 依赖所有文件