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