【发布时间】:2021-08-05 19:30:11
【问题描述】:
玩具示例:
prog.sh:
#!/usr/bin/bash
echo $*
制作文件:
%.sh_log: %.sh
sh $< $(OPTARGS) > $@ 2>&1
targ1: OPTARGS=hello world
targ1: prog.sh_log
targ2: OPTARGS=goodbye
targ2: targ1 prog.sh_log
当我创建targ2 时,targ1 会按预期执行,但由于其结果是prog.sh_log,因此满足了targ2 的依赖关系并且它不会触发。由于 make 基于时间戳,如何在 makefile 的不同部分使用具有不同参数的相同程序。我的真实世界程序是一个多步程序,它将步数作为命令行参数。由于源系统的变化,我在步骤之间添加了其他程序。
【问题讨论】:
-
你需要确保你依赖于一个不同的规则。可能需要使用
define或其他东西来动态生成规则,但您可能可以使用 variable 来包含命令和参数,甚至只是将$%拆分为第一名。 -
我很困惑(很容易做到)。你是说
targ1的配方使用prog.sh_log,而targ2的配方使用不同prog.sh_log?然后 make 依赖项不会帮助你。听起来有点可疑。你至少应该产生一个prog.sh_log_targ1和一个单独的prog.sh_log_targ2methinks。