zoukankan      html  css  js  c++  java
  • Makefile export

    1)

    1.在(parent,上层的)makefile中export出来变量,子makefile(sub make)中,是可以访问的。

    2. 而同一级别的makefile(可通过makefile中内置变量MAKELEVEL查看得知当前makefile的levlel),是无法通过export来传递变量的,即一个makefile中export出来一个变量,同一级的另外一个makefile中,是无法访问/得到的。

    3.makefile中的export是导出变量到子makfile,而目标对应执行的动作中的export,是属于shell中的export,其作用是导出变量到当前shell。此两个export的作用是不同的。

    https://blog.csdn.net/yu704645129/article/details/50441963

    2)

    向子make 通讯变量

    https://www.cnblogs.com/gaojian/archive/2012/10/01/2709739.html

    通过显式的需求,顶级make的变量可以被传递给子make,但是不会覆盖子make的值,除非你使用了 -e选项(*note Summary of Options: Options Summary.)。

    为了下传,或者导出一个变量,make 追加此变量和它的值到片段运行的每一行的环境中。子make,依照顺序,使用环境来初始化它自己的变量表。*Note Variables from the Environment: Environment.

    除了被显式地请求,make仅仅当一个变量或者定义在环境里或者被设置在命令行里的时候,才会导出此变量,并且它的名字只能由 字母,数字和下划线组成。有些shell 不能 处理变量名含有其他字符的情况。

    make 变量 SHELL 的值不会导出。反而,SHELL 变量的值从激活shell的环境中传递到子make, 你可通过export 指令,强迫 make 为SHELL变量导出值,下面会有讲述。*Note Choosing the Shell::

    特殊变量 MAKEFLAGS 总是要导出的(除非你特意不导出),如果你设置它为任何值,它都要导出。

    make 通过把变量值放入 MAKEFLAGS 里,自动地传递那些命令行中定义的变量值。*Note Options/Recursion::

    如果变量是由make缺省地创建的,那么通常不会传递下去(*note Variables Used by Implicit Rules:Implicit Variables),子make将会自己定义这些值。

    如果你想要导出特定的变量到一个子make, 使用 export 指令,像如下这样:

    export VARIABLE ...

    如果你想防止一个变量被导出,使用unexport 指令,像这样:

    unexport VARIABLE ...

    在上述的试样中,需要导出和限制导出的参数被扩展,这样变量或者函数可以被导出。

    作为一个方便的方法,你可以在将变量定义和导出放在一起:

    export VARIABLE = value

    和如下的有同样的效果:

    VARIABLE = value
    export VARIABLE

    或者

    export VARIABLE := value

    和如下的有同样的效果:

    VARIABLE := value
    export VARIABLE

    与此类似,

    export VARIABLE += value

    就像是:

    VARIABLE += value
    export VARIABLE

    https://www.cnblogs.com/gaojian/archive/2012/10/01/2709770.html

    你也许注意到了 export 和 unexport 指令在make的工作方式和shell的工作方式一致。

    如果你想要所有的变量都被缺省地导出,你可以用 export 自身:

    export

    这告诉make ,没有被显式地在export 或者unexport 中提及的变量,将被导出。任何在unexport指令 中给出的变量仍然不会到处。如果你使用了export自身来缺省地导出变量,名字中包含其他字符的变量将不会导出,除非你在export 指令中特别提及。

    被一个export 自身指令引出的行为在旧版本的GNU make 中是缺省的。如果你的makefile依赖于这种行为而且你想要保持对旧版本make的兼容性,你可以为特殊目的 .EXPORT_ALL_VARIABLES 写一个规则,而不是用 export 指令。这个将被旧版本的 make 忽略掉,此时,export 指令会导致一个语法错误。

    类似地,你可以使用 unexport 自身来告诉make 缺省地不要到处变量。因为这是缺省的行为,如果export 自身已经被之前使用了(也许是在一个被包含了的makefile里面)你只需要使用 unexport自身就行了。你不能在某些片段里通过使用export自身来导出某些变量同时又通过使用 unexport自身来缺省不导出某些变量。最后出现的export 或者 unexport 指令会决定整个make的行为。

    作为一个特殊的功能,变量 MAKELEVEL 在从一层向下一层传递的时候会改变。这个变量的值是一个字符串,是一个10进制数字的深度值。顶级make为0,子make为1,子-子make为2,以此类推。make为一个片段设置环境的时候,发生数值增长。

    MAKELEVEL的主要用途是在一个条件性的指令中测试(*note Conditional Parts of Makefiles:Conditionals.);这样你可以写一个makefile, 在某种条件下递归运行,另外一种条件下直接运行。

    你可以使用变量 MAKEFILES来导致所有的make 命令用额外的makefile。MAKEFILES的值是一个空格分隔的文件名字列表。这个值,被定义在外层makefile中,在环境中向下传递;然后给子make提供一个增强makefile列表来读取。*Note The Variable 'MAKEFILES': MAKEFEILES 变量。

    <3>

    通过简单地声明 .EXPORT_ALL_VARIABLES ,可以告诉 make 来到出所有的变量给 子进程。

    *Note Communicating Variables to a Sub-make: Variables/Recursion.

    https://www.cnblogs.com/gaojian/archive/2012/09/25/2701375.html

    为了学习 .EXPORT_ALL_VARIABLES ,查阅了如下的文章:

    http://blog.csdn.net/zplove003/article/details/7066595 

    这个文章写得很棒,演示了makefile 的嵌套调用。

    这里我把其中的 顶层 Makefile改一下,用 .EXPORT_ALL_VARIABLES 来代替。

    复制代码
    //顶层目录下的Makeflie文件
    cc=gcc                                                                                                       
    SUBDIRS=f1 
            f2 
            main 
            obj
    OBJS=f1.o f2.o main.o
    BIN=myapp
    OBJS_DIR=obj
    BIN_DIR=bin
    
    #export CC OBJS BIN OBJS_DIR BIN_DIR OBJS
    ./EXPORT_ALL_VARIABLES
    
    all:CHECK_DIR $(SUBDIRS)
    CHECK_DIR:
        mkdir -p $(BIN_DIR)
    $(SUBDIRS):ECHO
        make -C $@
    ECHO:
        @echo $(SUBDIRS)
        @echo begin compile
    CLEAN:
        @$(RM) $(OBJS_DIR)/*.o
        @rm -rf $(BIN_DIR)
    复制代码

    改动后,也是可以完成编译动作。

  • 相关阅读:
    python字符串的常用方法
    python基础之数据类型
    python自定义带参数和不带参数的装饰器
    python中logging结合pytest打印日志
    本地的项目上传到gitee仓库步骤--适合小白上手
    Python中的分数运算
    2018年6月23日开通我的Python学习博客
    python多版本兼容性问题:当同时安装Python2和Python3后,如何兼容并切换
    github之关联远程仓库
    SHH验证
  • 原文地址:https://www.cnblogs.com/lelin/p/11628082.html
Copyright © 2011-2022 走看看