【问题标题】:Passing variables from include directive to sub-make将变量从 include 指令传递到 sub-make
【发布时间】:2012-10-02 19:33:36
【问题描述】:

寻求一些帮助,将变量从一个级别传递到生成文件中的下一个级别。我有一个需要构建以在各种目标架构上运行的源代码树。为了保持更高级别的 makefile 干净,我创建了单独的 makefile,其中包含特定于体系结构的信息,并且仅包含使用 include 指令所需的那个:)

稍后在 makefile 中,我转移到另一个目录来构建源文件。构建失败,我看到失败是由于未传递特定于体系结构的变量造成的。

ifeq ($(ARCH), my_arch)        |
include build/my_archdefs.mk   |  section 1 
endif                          |

<more commands>
debug:
      $(MAKE) -C src debug

用于构建代码树的 makefile 位于 src 目录中。作为权宜之计,我在较低级别的 makefile 中包含了上面引用的第 1 节,在这种情况下,我注意到变量 ARCH 没有被传递下去。

这里有几个我发现似乎相关的链接,但我无法弄清楚我需要做什么才能完成这项工作。 http://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion http://www.gnu.org/software/make/manual/html_node/Include.html

在我看来,我需要的信息隐藏在我上面引用的链接中,但我只是没有看到它。任何指针将不胜感激。

谢谢。

【问题讨论】:

    标签: makefile


    【解决方案1】:

    此链接应该会有所帮助:http://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion

    在您的顶级 Makefile 中,只需添加行 export,您的所有变量都将导出到您的 submakes。

    例子:

    文件Makefile

    ID=asdf
    export
    all:
        @echo ${ID}
        @make -f Makefile2
    

    文件Makefile2

    all:
        @echo ${ID}
    

    输出:

    $ make
    asdf
    make[1]: Entering directory `/home/user/Desktop/a'
    asdf
    make[1]: Leaving directory `/home/user/Desktop/a'
    

    【讨论】:

    • 感谢您的链接。这就是我需要的。只想指出页面上可能与稍后引用此内容的任何其他人相关的一行。 “如果默认情况下单独使用 export 导出变量,则名称中包含字母数字和下划线以外的字符的变量将不会被导出,除非在导出指令中特别提及。”
    • 如何只导出到子make而不导出到其他进程?
    【解决方案2】:

    供您参考的示例:

    下面是顶层的“Makefile”。

    生成文件

    export ROOT_DIR=${PWD}
    
    all:        
           $(MAKE) -C test
    

    然后,在“test”文件夹内(相对于当前位置)还有另一个“Makefile”,如下:

    生成文件

    all:    
            echo $(ROOT_DIR)
    

    当您在顶级文件夹中说“make all”时,它将随后根据当前位置-Makefile 构建,然后随后根据所述规则在“test”文件夹位置(将 Makefile 放在“测试“构建规则的位置)。因此,当父 Makefile 导出某个变量时,对于该构建环境,导出的变量将对所有子目录 Makefile 可见。

    但是,如果您尝试显式进入“test”文件夹并尝试“make all”,那么您必须在它之前显式设置环境变量(在以前的情况下,设置在顶部-级 Makefile)。

    More Info.

    【讨论】:

      猜你喜欢
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多