我有一个Makefile规则,如下所示:
%.b : %.a
[run some commands...]
我想重写我的Makefile,以便从%.a到%.b的所有转换都是通过单次执行命令来处理的,而不是每个文件执行一次。
我尝试了以下内容:
%.b : someDummyFile
someDummyFile :
[run some commands]
问题是即使第一个规则没有请求创建someDummyFile的规则也会被执行,从而导致不良行为。我猜测没有依赖关系的规则会一直执行,即使他们的目标没有被其他规则使用?
我在这里缺少什么?
在尝试调试此问题时,我删除了对第二条规则的所有引用。例如,我将以下规则插入到现有的Makefile中,为什么即使没有其他规则引用它也会执行它?
HELLOWORLD :
echo "# HELLO WORLD! THE NEXT LINE WILL TRIGGER AN ERROR"
DFASDA
答案 0 :(得分:11)
以下是我认为您正在寻找的快速示例:
all: file1.x file2.x
%.x: doWork
:
doWork:
touch file1.x
touch file2.x
doWork
规则将运行一次,然后:
规则中的%.x
(无操作)运行两次。您确实需要:
或至少某些作为该规则的配方,否则您将收到一条错误消息,指出没有规则来生成.x
文件。这是用于取消模式规则作为无食谱规则的语法的副作用。