作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一系列(数十个)项目,其中包含 git 存储库中的大量内容。每个存储库都有一个通用工具包的 git 子模块。该工具包包含处理内容存储库和构建可发布结果所需的库和脚本。所有存储库都被推送到运行 CI 并发布结果的主机。这个想法是将重复的代码保持在绝对最低限度,并且大部分内容都在存储库中,并且依赖于工具包以将每个项目以相同的方式组合在一起。
每个项目都有一个顶级 Makefile,通常只有几行,例如:
STAGE = stage
include toolkit/Makefile
STAGE = stage
%-target.fmt:
commands
include toolkit/Makefile
Sometimes it is useful to have a makefile that is mostly just like another makefile. You can often use the ‘include’ directive to include one in the other, and add more targets or variable definitions. However, it is invalid for two makefiles to give different recipes for the same target.
$(call do_thing)
将使用我的覆盖:
STAGE = stage
include toolkit/Makefile
define do_thing
commands
endef
makeoverflow.com
进入我的浏览器,很困惑为什么没有自动完成。
最佳答案
更新答案:
如果您的配方具有依赖项,则默认情况下无法覆盖这些依赖项。然后 $(eval) 可能会像这样为您节省:
在工具包中有一个带有通用规则的宏定义:
ifndef TARGET_FMT_COMMANDS
define TARGET_FMT_COMMANDS
command1 # note this these commands should be prefixed with TAB character
command2
endef
endif
define RULE_TEMPLATE
%-target.fmt: $(1)
$$(call TARGET_FMT_COMMANDS)
endef
# define the default dependencies, notice the ?= assignment
TARGET_DEPS?=list dependencies here
# instantiate the template for the default case
$(eval $(call RULE_TEMPLATE,$(TARGET_DEPS)))
define TARGET_FMT_COMMANDS
command1 # note this these commands should be prefixed with TAB character
command2
endef
%-target.fmt:
$(call TARGET_FMT_COMMANDS)
include toolkit/Makefile
之后简单地重新定义 TARGET_FMT_COMMANDS
关于makefile - 使溢出¹,或 “How to override a target?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41391847/
我是一名优秀的程序员,十分优秀!