makefile - 制作配方中的管道超出规则?
问题描述
假设我有以下情况:
.SECONDEXPANSION:
rule-%: etc/$$*
some other things
here
something-something -c "cat $< | envsubst | ..." \
> $@
而且我想重写这条规则,因为它是跨 n 项的常见模式,而不会变得聪明:
.SECONDEXPANSION:
rule-%: etc/$$*
some other things
here
make something-something-$< > $@
something-something-%:
something-something -c "cat $* | envsubst | ..."
但是我找不到任何保证这会起作用,假设我将外部规则rule-%
称为来自不同目录的子制作(根据我的经验,制作有时会将目录位置打印到管道中 - 这可以通过默默地执行 make,但我永远不会假设用户知道这一点)。
这在所有情况下都有效吗?或者,我知道我可以:
etc...
make something-something arg1=... arg2=...
something-something:
something-something -c "cat ${arg1} | envsubst | ..." > ${arg2}
但我想避免这种情况。
解决方案
我不认为我理解你的问题,但是:首先你不应该make
在递归调用 make 时使用 raw :你必须始终使用$(MAKE)
变量。
其次,如果您希望递归 make 不打印目录信息,或者甚至静默运行,您可以将这些选项添加到 submake:调用外部 make 的人指定的选项无关紧要:
$(MAKE) -s --no-print-directory something-something-$< > $@
推荐阅读
- r - 无法在 R 中生成核密度估计器的值
- android - 超过100个点的MapboxMapMatching
- jms - Tibco EMS 连接问题
- xcode - Xcode 编译时间:哪种 Mac 配置可提供明显的最佳性能?
- c# - C# 和 Visual Basic 和 VB 代码结构中的代码等效性
- magento - 使用 SSL 在 CentOS 7、Nginx 和 PHP-FPM 上设置 Varnish
- python - 在 django 中单击时重定向到各种博客文章的问题
- arrays - 带有嵌入式“if/else”语句的双嵌套循环用于迭代 R 中的多维数组
- facebook - Facebook Messenger Checkbox Plugin 未显示 - 我哪里出错了?
- php - 在 laravel 中的“存储”资源控制器之后立即显示视图