正文
NAME = xiaoming
hello:
> @
echo
Hello
${NAME}
输出结果为:
$ make -f anyfile hello
Hello xiaoming
make
的开发目的是跟踪目标之间的相互依赖关系,并在任何文件发生更改时,仅执行必要的步骤。例如,如果你已经有一个基因组索引,
make
命令将跳过索引步骤。
# Set the prefix from tabs to >
.RECIPEPREFIX = >
counts.txt:
> echo 100 > counts.txt
names.txt:
> echo Joe > names.txt
results.txt: counts.txt names.txt
> cat counts.txt names.txt > results.txt
在上面的 Makefile 中,输入
make results.txt
将首先生成
counts.txt
和
names.txt
,如果它们不存在的话。然后,它将从这两个文件生成
results.txt
。如果你再次运行
make
,它将不会执行任何操作,因为所有文件已经存在。
makefile 的小技巧
默认设置
在 Makefile 中添加上这些设置后可以让 makefile 更加强大:
.RECIPEPREFIX = >
.DELETE_ON_ERROR:
SHELL := bash
.ONESHELL:
.SHELLFLAGS := -eu -o pipefail -c
MAKEFLAGS += --warn-undefined-variables --no-print-directory
.DELETE_ON_ERROR:
这个特殊目标告诉
make
在命令执行失败时删除生成的目标文件,以防止生成不完整或损坏的文件。
SHELL := bash
这行代码指定
make
使用
bash
作为默认的 shell 来执行命令。默认情况下,
make