目录作为make规则中的依赖项

Rav*_*pta 5 linux makefile

是否可以在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)

sta*_*fry 6

虽然可以将目录作为依赖项,但需要注意一些事项。考虑一下:

directory:
        @mkdir -p directory

directory/file : directory
        commands-to-make-the-file
Run Code Online (Sandbox Code Playgroud)

这将按照您的想法进行。但是,它会执行commands-to-make-the-filewhenfile早于directory,这可能不是您想要的。

您需要考虑directory更新时间戳的场景。每当将文件添加到目录中或从目录中删除文件时都会发生这种情况,但在修改现有文件时不会发生这种情况。

因此,一些更新目录的无关操作将导致文件过时,可能是不必要的,这将触发命令重新制作它。


Bet*_*eta 2

可以有一个目录作为依赖项,从某种意义上说,如果它不存在,它将被重建甚至可以安排一个规则,当目录中的任何内容发生更改时执行,但这很棘手。在这种情况下,这几乎肯定是矫枉过正了。

如果你的意图很普通,通常的方法就足够了:

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)