makefile - 有没有办法让一个makefile自动下载另一个makefile?
问题描述
我知道可以通过简单地包含它们来在生成文件上执行标准规则
hi:; echo hello
include hi
但是有一些方法可以通过这样做来获取外部输入,例如 ftp 服务器,或者,可以说,aws s3 来获取“新生”生成文件,然后将其包含到项目中?在运行时?像
include https://s3.bucket.domain.com/newmk.mk
解决方案
该make
实用程序没有内置的下载支持(甚至有时似乎带有厨房水槽的 GNU 的 make 也不支持),但因为它可以运行任意命令,你可以伪造它
最简单的情况是像这样的片段
your_primary_target: newmk.mk
#...
WGET=wget
WGET_FLAGS=-q
newmk.mk:
$(WGET) $(WGET_FLAGS) https://s3.bucket.domain.com/newmk.mk
#...
仅当不存在此类文件时才会尝试下载该文件。
这里的主要困难是您的用户可能需要编辑 makefile 以指定他们拥有的命令行下载器(可能curl
而不是wget
),或者它设置他们的网络环境所需的任何标志。
要使下载无条件使用不可构建的、不存在的目标
WGET=wget
WGET_FLAGS=-1
newmk.mk: ALWAYS
$(WGET) $(WGET_FLAGS) https://s3.bucket.domain.com/newmk.mk
# Here "ALWAYS" is *not* the name of a file existing in the file-system
ALWAYS:
.PHONY
(或者您可以在 GNU-make中玩一些游戏)。
推荐阅读
- java - 为什么 Spring Batch 从 MASTER 而不是从用户定义的 Schema 中读取元数据表?
- awk - 2个文件,匹配列并从2列中减去
- python - 蜗牛算法 - 控制遍历的最大/最小位置
- python - 将计算变量中的值与 A 列匹配,并创建一个新的 B 列,其中包含 B 列中 A 列的所有匹配行
- javascript - 拆分字符串并在表中搜索
- angular - 有没有办法在为特定组件分离更改检测的同时进行角度重新渲染视图
- r - dplyr:让 top_n 打破关系
- c# - 如何获取 webview 当前持有的网页标题?
- jquery - JQuery Div中的三元运算符条件
- java - 如何进行不同类型的对象状态验证