make 运行下载器,由下载器决定如何使用代理。对 GNU make 来说,当每条相关配方都应收到变量时,请在 Makefile 作用域导出这些变量:

export http_proxy := http://proxy.example:8080
export https_proxy := http://proxy.example:8080

fetch:
	curl --fail --output package.tar.gz https://downloads.example/package.tar.gz

配方行以制表符开头。export 指令属于 make 的语法,会把值传入命令的环境。

单条配方行上的 shell export 通常会在下一行之前消失,因为 GNU make 会为每一行调用单独的 shell。对于单个命令,请改为把 shell 赋值直接写在那个命令上:

fetch:
	http_proxy=http://proxy.example:8080 https_proxy=http://proxy.example:8080 curl --fail https://downloads.example/package.tar.gz

使用下载器文档中记录的变量名和代理协议。如果构建可以使用公共 HTTP 端点,请从 HTTP 代理列表中为这些环境值挑选一个候选。忽略这些变量的可执行文件需要自己的代理选项。凭据最好通过构建环境提供,而不是写进 Makefile。

这些导出只影响子命令。make 退出后,它们并不会 改变父终端的环境。

相关文章