仅执行一次Makefile规则

时间:2012-07-30 23:49:30

标签: linux makefile

我有一个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

1 个答案:

答案 0 :(得分:11)

以下是我认为您正在寻找的快速示例:

all: file1.x file2.x

%.x: doWork
    :

doWork:
    touch file1.x
    touch file2.x

doWork规则将运行一次,然后:规则中的%.x(无操作)运行两次。您确实需要:或至少某些作为该规则的配方,否则您将收到一条错误消息,指出没有规则来生成.x文件。这是用于取消模式规则作为无食谱规则的语法的副作用。