makefile FAQ
Q1. = , :=, +=, ?= 的区别
Q:在看mk脚本的时候经常有看到 := ,+=,容易混淆,这四者间什么区别呢。
A: 稍微解释一下,在结合实例看看
= 是最基本的赋值
:= 是覆盖之前的值?= 是如果没有被赋值过就赋予等号后面的值
+= 是添加等号后面的值
对于“=”,make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:
equal.mk
[cpp] www.zzzyk.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
补充:软件开发 , C++ ,