是否可以在Makefile规则中将目录指定为依赖项?实际上我在目录中有一个Makefile,另一个目录包含所有源文件.
.
.
|_ Makefile
|_ src
|_a.c
|_a.h
Run Code Online (Sandbox Code Playgroud)
现在我希望每当我在src目录中进行任何更改时,即在ac或ah中,我的Makefile中的特定规则在发出make命令时被调用.就像是
Makefile
.
.
.
build: src
<commands>
clean:
<commands>
Run Code Online (Sandbox Code Playgroud)
虽然可以将目录作为依赖项,但需要注意一些事项。考虑一下:
directory:
@mkdir -p directory
directory/file : directory
commands-to-make-the-file
Run Code Online (Sandbox Code Playgroud)
这将按照您的想法进行。但是,它会执行commands-to-make-the-file
whenfile
早于directory
,这可能不是您想要的。
您需要考虑directory
更新时间戳的场景。每当将文件添加到目录中或从目录中删除文件时都会发生这种情况,但在修改现有文件时不会发生这种情况。
因此,一些更新目录的无关操作将导致文件过时,可能是不必要的,这将触发命令重新制作它。
可以有一个目录作为依赖项,从某种意义上说,如果它不存在,它将被重建。甚至可以安排一个规则,当目录中的任何内容发生更改时执行,但这很棘手。在这种情况下,这几乎肯定是矫枉过正了。
如果你的意图很普通,通常的方法就足够了:
OBJ_FILES = foo.o bar.o baz.o
# There are ways to be more succinct, but for now we'll keep it simple.
build: $(OBJ_FILES)
<commands...>
%.o: src/%.c src/%.h
<commands for building something.o>
clean: # This should not require prerequisites
<commands...>
Run Code Online (Sandbox Code Playgroud)