教程
Make 命令教程
使用 Make 构建网站
动态参数
脚本
1
2
3
4
|
.PHONY: test
test:
echo '${ok}'
|
调用
make ok=123
结果
1
2
3
|
➜ ~ make ok=123123
echo '123123'
123123
|
实践
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
# 介绍
value = 1
.PHONY: Gramma
# 如果Make命令运行时没有指定目标,默认会执行Makefile文件的第一个目标。
Gramma: gone
# 这是测试
gone:
@# 这是测试2
# 由于在构建过程中,需要了解当前在执行哪条命令,所以通常只在注释和纯显示的echo命令前面加上@
@echo TODO
.PHONY: clean
2.txt: 1.txt
cat 1.txt > 2.txt
1.txt: gin-xterm
touch 1.txt
echo "123" > 1.txt
gin-xterm: var-kept
pwd
git clone https://github.com/lflxp/gin-xterm.git
var-kept: var-kept-three
export foo=bar; echo "foo=[$$foo]"
export xo=90; \
echo $$xo
.ONESHELL:
var-kept-three:
export xy=ooo;
echo $$xy
.PHONY: install
install: 2.txt gotty.txt Gramma
gotty.txt: 989
touch gotty.txt
989:
export xo=90; \
echo $$xo
echo "989"
.PHONY: wildcard
wildcard:
@echo 解释:通配符(wildcard)用来指定一组符合条件的文件名。Makefile 的通配符与 Bash 一致,主要有星号(*)、问号(?)和 [...] 。比如, *.o 表示所有后缀名为o的文件。
ls -l *.txt
txt = Hello world
txttest:
@echo $(txt)
@echo $(value)
.PHONY: envtest
envtest: now change
now:
pwd
cd /tmp; \
pwd
pwd
change: a b c d
pwd
# 同时构建多个目标文件
a b c d:
@echo $@指代当前目标,就是Make命令当前构建的那个目标。比如,make foo的 $@ 就指代foo
@echo $< 指代第一个前置条件。比如,规则为 t: p1 p2,那么$< 就指代p1
@echo $? 指代比目标更新的所有前置条件,之间以空格分隔。比如,规则为 t: p1 p2,其中 p2 的时间戳比 t 新,$?就指代p2。
@echo $^ 指代所有前置条件,之间以空格分隔。比如,规则为 t: p1 p2,那么 $^ 就指代 p1 p2
@echo $* 指代匹配符 % 匹配的部分, 比如% 匹配 f1.txt 中的f1 ,$* 就表示 f1
@echo $(@D) 和 $(@F) 分别指向 $@ 的目录名和文件名。比如,$@是 src/input.c,那么$(@D) 的值为 src ,$(@F) 的值为 input.c。
@echo $(<D) 和 $(<F) 分别指向 $< 的目录名和文件名
touch $@
# cp $< $@
echo '$(@D) $(@F)'
# 判断
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
LIST = one two three
list:
@echo 循环
for i in $(LIST); do \
echo $$i; \
done
echo '$(subst ee,EE,feet on the street)'
clean:
rm -f a b c d
rm -f *.txt
rm -rf gin-xterm/
|
文章作者
lixueping
上次更新
2020-03-09
(a9655ff)
许可协议
MIT