#@author:       gr
#@date: 2014-07-20
#@email: [email protected]

一、Contents

  1. $@表示目标文件
  2. $^表示依赖文件
  3. $<表示第一个依赖文件
    main: main.o h1.o h2.o
gcc -o main main.o h1.o h2.o
#上面可以简化为如下
gcc -o $@ $^
#-------------------------------#
main.o: main.c h1.h h2.h
#编译命令可以简写为
gcc -c $<
  1. 缺省规则,这个规则表示所有的 .o文件都是依赖与相应的.cpp件的.例如

     .cpp.o:
    g++ -c $<

5. `make clean`: `-rm edit $(objects)`前面的`-`表示如果出错不要管,继续后面的操作.`make clean`不要放在第一个,否则会变成默认项. 6. `pkg-config`问题:
&nbsp;&nbsp;&nbsp;&nbsp;使用pkg-config可以检索系统中安装*库文件*的信息。-–cflags 参数可以给出在编译时所需要的选项,而 -–libs 参数可以给出连接时的选项。

gcc -c pkg-config –-cflags glib-2.0 sample.c


7. 变量的高级用法
+ 第一种是变量值的**替换**。其格式是`$(var:a=b)`或是`${var:a=b}`,其意思是,把变量`var`中所有以“a”字串“结尾”的“a”替换成“b”字串。 ```bash
foo=main.o h1.o h2.o
#$(foo)中所有以“.o”字串结尾全部替换成“.c”
$new=$(foo:.o=.c)
#$(bar)的值就是“a.c b.c c.c”。
  • 第二种是把变量的值再当成变量.
    x = y
y = z
a := $($(x))

在这个例子中,$(x)的值是“y”,所以$($(x))就是$(y),于是$(a)的值就是“z”。(注意,是x=y,而不是x=$(y)

二、最后学习得到的最后结果。


#file start

CC=g++
CFLAGS=`pkg-config --cflags opencv`
LFLAGS=`pkg-config --libs opencv`
SOURCES=main.cpp stl.cpp non-member.cpp
OBJECTS=$(SOURCES:.cpp=.o)
RUN=stlDemo all: $(RUN) depend:
$(CC) $(CFLAGS) -MM $(SOURCES) > .deps clean:
-rm -rf $(RUN) $(OBJECTS) $(RUN): $(OBJECTS)
$(CC) -o $@ $^ $(LFLAGS)
.cpp.o:
$(CC) -c $< $(CFLAGS) include .deps #file end
05-11 19:25