Q1. = , :=, +=, ?= 的區別
Q:在看mk腳本的時候經常有看到 := ,+=,容易混淆,這四者間什麼區別呢。
A: 稍微解釋一下,在結合實例看看
= 是最基本的賦值
:= 是覆蓋之前的值?= 是如果沒有被賦值過就賦予等號後面的值
+= 是添加等號後面的值
對於“=”,make會將整個makefile展開後,再決定變量的值。也就是說,變量的值將會是整個makefile中最後被指定的值。看例子:
equal.mk
[cpp] www.2cto.com
x = foo
y = $(x) bar
x = xyz
[cpp]
對於 “:=”表示變量的值決定於它在makefile中的位置,而不是整個makefile展開後的最終值。
colonequal.mk
[cpp] view plaincopyprint?
x := foo
y := $(x) bar
x := xyz
對於最終y的值來說:equal.mk 來說 y的結果就是xyzbar colonequal.mk中有的結果是foobar
Q2. missing separator. Stop.
跟著大牛的博文敲了一遍makefile 的template,
[python]
edit : main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o /
insert.o search.o files.o utils.o
結果運行了一下:
Q2: missing separator. Stop
A2 :好吧,第二行沒有沒有分隔符,加上,再運行一次,額問題二出現
[cpp]
Makefile:4: *** missing separator (did you mean TAB instead of 8 spaces?). Stop.
Q3:did you mean TAB instead of 8 spaces
A3: 好吧是我賤,一定要用VIM編輯,換其他編輯器多好,沒把Tab 退格設置成4位。 :set tabstop=4