• make几个知识点


    即时变量和延时变量

    在下面代码中,定义了一个值为x的x变量,以延时变量的方式将它的值赋给y,以即时变量的方式将它的值赋给z。
    因为y为延时变量,所以y的取值并不会立即计算,而是在整个文件解析完成之后才开始计算y的值。
    因为z为即时变量,所以运行到z:=$(x)这句话时,z的值立即计算得出。

    x = x
    y = $(x)
    z := $(x)
    x = nothing
    one:
    	@echo $(x)
    two:
    	@echo $(y)
    three:
    	@echo $(z)
    

    运行命令make one two three
    输出为

    nothing
    nothing
    x
    

    自动变量

    $@  规则目标的文件名.如果目标是档案文件的一个成员,"$@"就是档案文件的名称
    $%   当目标是档案文件的一个成员时,"$%"是该成员的名称.否则"$%"为空
    $< 第一个依赖文件的名称
    $?  以空格隔开的比目标新的所有依赖文件名.若依赖文件是档案文件的成员,只使用成员的名称
    $^  以空格隔开的所有依赖文件名.若依赖文件是档案文件的成员,只使用成员名称.无论一个依赖文件出现过多少次,"$^"值中只包含其名称的一个拷贝
    $+  与"$^"相似,但多次列出的依赖文件按照它们在构造文件中出现的顺序复制.这对于链接命令中以特定顺序重复出现的库文件名有作用
    $*  隐含规则匹配的词干.若目标为"dir/a.foo.b"且目标模式为"a.%.b",则词干为"dir/foo".对静态模式规则,词干是文件名中与目标模式中"%"匹配的部分.应避免在隐含规则或静态模式规则之外使用"$*"
    $(@D)  删除结尾斜杠的目标文件名的目录部分.若"$@"的值为"dir/foo.o",则"$(@D)"为"dir".若"$@"不包含斜杠,则"$(@D)"为"."
    $(@F)  目标文件名中目录下的文件部分.如果"$@"的值为"dir/foo.o",那么"$(@F)"为"foo.o".它等同于"$(notdir $@)"
    $(*D)   词干中的目录部分,例如上例中的"dir"
    $(*F)   词干中的目录下文件部分,例如上例中的"foo"
    $(%D)  目标档案文件成员的目录部分.仅对形为"archive(member)"的档案文件成员目标有意义,且仅在member包含目录名时有用
    $(%F)  目标档案文件成员中的目录下文件部分
    $(<D)  第一个依赖文件的目录部分
    $(<F)  第一个依赖文件的目录下文件部分
    $(^D)  所有依赖文件的目录部分
    $(^F)   所有依赖文件的目录下文件部分
    $(?D)  比目标新的所有依赖文件的目录部分
    $(?F)  比目标新的所有依赖文件的目录部分

    one.java:two.java three.java
    	@echo 目标名称:$@
    	@echo 不带扩展名的目标名称(这个变量只能在含有%目标名的命令中使用):$*
    	@echo 第一个依赖文件的名称:$<
    	@echo 全部依赖,去重:$^
    	@echo 全部依赖,不去重,按照出现顺序出现:$+
    	@echo 全部需要重新构建的依赖:$?
    %.java:
    	@echo this is $*.java
    

    输入make命令,输出为:

    this is two.java
    this is three.java
    目标名称:one.java
    不带扩展名的目标名称:
    第一个依赖文件的名称:two.java
    全部依赖,去重:two.java three.java
    全部依赖,不去重,按照出现顺序出现:two.java three.java
    全部需要重新构建的依赖:two.java three.java
    

    预定义变量

    AR      归档维护程序的名称,默认值为 ar。
    ARFLAGS   归档维护程序的选项。
    AS      汇编程序的名称,默认值为 as。
    ASFLAGS   汇编程序的选项。
    CC      C编译器的名称,默认值为 cc。
    CCFLAGS   C编译器的选项。
    CPP     C预编译器的名称,默认值为 $(CC) -E
    CPPFLAGS  C预编译的选项。
    CXX     C++编译器的名称,默认值为 g++。
    CXXFLAGS  C++编译器的选项。
    FC      FORTRAN编译器的名称,默认值为 f77。
    FFLAGS    FORTRAN编译器的选项。

  • 相关阅读:
    开发工具分享
    图形学杂记
    keyle的Shader-学习手札
    Keyle的3D数学-学习手札
    SuperStrange项目主页
    Unity3d基础知识(水文)
    和Keyle一起学ShaderForge – Custom Blinn-Phong
    和Keyle一起学ShaderForge – Create Base Shader
    和Keyle一起学ShaderForge
    和Keyle一起学StrangeIoc – 教程目录
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/11042191.html
Copyright © 2020-2023  润新知