Makefile:如何创建可用于子makefile的全局变量?

Hug*_*lpz 5 variables makefile gnu-make

鉴于master.makefile调用子makefile,例如:

downloads:
    make -f downloads.makefile
Run Code Online (Sandbox Code Playgroud)

还有一个子makefile,downloads.makefile例如:

download: clean
    curl -o ./data/<itemname>.png 'http://www.mysite.com/<itemname>.png'
    echo "downloaded <itemname>: Done!"
Run Code Online (Sandbox Code Playgroud)

如何itemname在我的主文件中设置一个全局变量,可用于我的子制作文件?

注意:我的项目实际上更复杂,有 12 个不同的子 makefile,它们应该重用来自主文件的相同参数/变量。masterfile 应该分配值,而 sub-makefile 应该检索我放置的变量的值<itemname>

Mad*_*ist 7

有多种方法可以做到。

首先,在运行子制作时,始终使用$(MAKE),从不使用make。然后...

1.可以在递归命令行上传递值:

itemname = whatever
downloads:
        $(MAKE) -f downloads.makefile itemname=$(itemname)
Run Code Online (Sandbox Code Playgroud)

2.可以导出父makefile中的变量:

export itemname = myvalue
downloads:
        $(MAKE) -f downloads.makefile
Run Code Online (Sandbox Code Playgroud)

带有子makefile,例如:

download: 
    echo "downloaded $(itemname): Done!"
Run Code Online (Sandbox Code Playgroud)