当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,