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

时间:2010-10-04 10:27:11

标签: linux makefile

是否可以在Makefile规则中将目录指定为依赖项?实际上我在目录中有一个Makefile,另一个目录包含所有源文件。

.
.
|_ Makefile
|_ src
    |_a.c
    |_a.h

现在我希望每当我在src目录中进行任何更改时,即在a.c或a.h中,我的Makefile中的特定规则在发出make命令时被调用。像

这样的东西
Makefile
.
.
.
build: src
    <commands>

clean:
    <commands>

2 个答案:

答案 0 :(得分:4)

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

directory:
        @mkdir -p directory

directory/file : directory
        commands-to-make-the-file

这会做你的想法。但是,只要commands-to-make-the-file早于file,它就会执行directory,这可能不是您想要的。

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

因此,更新目录的一些不相关的操作将导致文件过时,也许是不必要的,这将触发命令重新创建它。

答案 1 :(得分: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...>