将变量从include伪指令传递给sub-make

din*_*esh 7 makefile

寻找一些帮助在makefile中将变量从一个级别传递到下一个级别.我有一个源树,需要构建为在各种目标体系结构上运行.为了保持更高级别的makefile干净,我创建了包含特定于体系结构的信息的单独的makefile,并且只包含使用include伪指令所需的那个.

稍后在makefile中我转移到另一个目录来构建源文件.构建失败,我发现失败是由未传递的体系结构特定变量引起的.

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

<more commands>
debug:
      $(MAKE) -C src debug
Run Code Online (Sandbox Code Playgroud)

构建代码树的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

在我看来,我需要的信息潜伏在我上面引用的链接中,但我只是没有看到它.任何指针都将非常感激.

谢谢.

Kri*_*ina 10

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

在您的顶级Makefile中添加该行export,您的所有变量都将导出到您的子制作中.

例:

档案Makefile:

ID=asdf
export
all:
    @echo ${ID}
    @make -f Makefile2
Run Code Online (Sandbox Code Playgroud)

档案Makefile2:

all:
    @echo ${ID}
Run Code Online (Sandbox Code Playgroud)

输出:

$ make
asdf
make[1]: Entering directory `/home/user/Desktop/a'
asdf
make[1]: Leaving directory `/home/user/Desktop/a'
Run Code Online (Sandbox Code Playgroud)