makefile基础

1:一个简单规则可以表述为

   规则(rule)目标文件:依赖文件(不同文件以空格分隔)

                      <tab>得到目标文件需要的命令

   规则的常见种类有:

       a:Explicit Rule:         最简单的rule,明确指出了目标和依赖,以及如何有依赖得到目标。
	Hello.o:hello.cpp
	    g++ -c hello.cp
       b:Pattern Rule:使用了wildcard(通配符)的规则
            makefile中的通配符是百分号%,相当于bash中的*,在描述规则的时候使用的都是%。makefile中也可以看到通配符*
       prog:*.c
   	    g++ -o prog $^
      c: Suffix Rule 顾名思义,是只使用后缀来描述的rule,描述的时候不使用pattern。

这个suffix rule的作用和下面这个pattern rule的作用是完全一样的。区别仅在于描述依赖的时候,一个把目标放在后,一个把目标放在前面。

       .c.o:       
	   $(COMPILE.C) $(OUTPUT_OPTION) $<
             上面代码等价于下面
       %.o:%.c
    	   $(COMPILE.C) $(OUTPUT_OPTION) $<

         d: Implicit Rule : 就是看不到的rule,这些rule是make的内置rule。

    makefile有众多的build-in rule,这些规则为我们编写makefile带来了很大的便利。它们可以通过make –p 来查看

2:Makefile中只应该有一个最终目标,其它的目标都是被这个目标所连带出来的,   所以一定要让make知道你的最终目标是什么。

   一般来说,定义在Makefile中的目标可能会有很多,但是第一条规则中的目标将被确立为最终的目标。

3:伪目标一定被执行。

       “.PHONY”来显示地指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。

4:自动变量 

    a: $@表示规则的当前目标文件名。            
     bigoutput littleoutput : text.g 
            	generate text.g -$(subst output,,$@) > $@ 

   上述规则等价于:          

     bigoutput : text.g 
           	generate text.g -big > bigoutput 
     littleoutput : text.g 
           	generate text.g -little > littleoutput 

 其中,-$(subst output,,$@)中的“$”表示执行一个Makefile的函数,函数名为subst,后面的为参数。

   “$@”这里是表示目标的集合,就像一个数组,“$@”依次取出目标,并执于命令。

    b:$ <表示所有的依赖目标集。    
     objects = foo.o bar.o 
     all: $(objects) 
     $(objects): %.o: %.c 
            $(CC) -c $(CFLAGS) $ < -o $@  

  其中,“$ <”表示所有的依赖目标集(也就是“foo.c bar.c”)

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值