zoukankan      html  css  js  c++  java
  • Makefile学习之通配符和自动变量($@、$<、$^)

    规则中的通配符 “*” ,“?” ,“ [...]”, " % " , " wildcard "

    1.“*”  *.c表示所有后缀为.C的文件;

       如果文件中用到通配符,使用“*”;

    2.通配符在变量中的使用;

      objects=*.c

      注意:这里的通配符就是用在变量中的,不过,objects的值就是“*.o”,并不会展开;

      如果希望展开的话,可以这么使用:

        objects := $(wildcard *.o);

        wildcard是Makefile中的关键字;

    3.Makefile中的自动变量

      $@  :表示所在的规则中的所有的目标。

        $^    : 生成目标($@)时所有的依赖集合, 以空格分隔。

            如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。 

      $<   :所有的依赖集合中的第一个依赖

        如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。 

    all: test1    test2
        @echo "11" $@                                  
        @echo "22" $^
        @echo "33" $<
    
    test1:
        @echo "test1"
    test2:
        @echo "test2"

     输出:

    test1
    test2
    11 all           //目标
    22 test1 test2    //生成目标所有的依赖集合
    33 test1        

      $? : 所有比目标新的依赖目标的集合。以空格分隔。   

      $%   :仅当目标是函数库文件中,表示规则中的目标成员名。

          例如,如果一个目标是"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。

          如果目标不是函数库文件(Unix下是[.a],Windows 下是[.lib]),那么,其值为空。 

      $+  :这个变量很像"$^",也是所有依赖目标的集合。只是它不去除重复的依赖目标。

  • 相关阅读:
    百度mp3地址解密码
    VB 在EXE后附加信息
    截屏函数
    Base64和StrToByte
    The Android ION memory allocator, DMABUF is mentioned as well
    DDC EDID 介绍
    Memory management for graphic processors TTM的由来
    科普 写display driver的必看 How video card works [2D的四种主要操作]
    GEM vs TTM
    DMABUF 背景介绍文章 Sharing buffers between devices
  • 原文地址:https://www.cnblogs.com/weiyouqing/p/8599971.html
Copyright © 2011-2022 走看看