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

Linux 目录作为make规则中的依赖项,linux,makefile,Linux,Makefile,是否可以将目录指定为Makefile规则中的依赖项?实际上,我在一个目录中有一个Makefile,另一个目录包含所有源文件 . . |_ Makefile |_ src |_a.c |_a.h 现在,我希望每当我在src目录中进行任何更改时,即在a.c或a.h中进行任何更改时,都会在发出make命令时调用Makefile中的特定规则。差不多 Makefile . . . build: src <commands> clean: <comman

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

.
.
|_ Makefile
|_ src
    |_a.c
    |_a.h
现在,我希望每当我在src目录中进行任何更改时,即在a.c或a.h中进行任何更改时,都会在发出make命令时调用Makefile中的特定规则。差不多

Makefile
.
.
.
build: src
    <commands>

clean:
    <commands>
Makefile
.
.
.
构建:src
清洁:
可以将目录作为依赖项,也就是说,如果它不存在,它将被重建。甚至可以安排一条规则,当目录中的任何内容发生更改时执行,但这很棘手。在这种情况下,几乎可以肯定这是过度的

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

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...>
OBJ_FILES=foo.o bar.o baz.o
#有一些方法更简洁,但现在我们将保持简单。
生成:$(OBJ_文件)
%.o:src/%.c src/%.h
清洁:#这不需要先决条件

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

directory:
        @mkdir -p directory

directory/file : directory
        commands-to-make-the-file
这会符合你的想法。但是,只要
文件
早于
目录
,它就会执行
命令使文件
,这可能不是您想要的

您需要考虑“代码>目录< /代码>的时间戳被更新的场景。无论何时将文件添加到目录或从目录中删除,都会发生这种情况,但修改现有文件时不会发生这种情况


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

。。。
.c
.h
文件的常规规则不应该已经处理了吗?目录时间戳仅在添加或删除文件时才会更改。当目录中的文件内容发生更改时,目录时间戳不会得到更新。通常,正如您的答案已经明确指出的那样:没有很好地指定目录作为依赖项的要求。有时(但很少)您希望在目录本身有更新修改时间时重建,有时目录中的任何现有文件发生更改时重建,有时特定类型的任何文件发生更改时重建,有时还希望在添加、删除或重命名特定类型的文件时重建,有时你想要递归地包含子目录的内容,这是相当昂贵的。这正是我的问题。有什么解决办法吗?我真正需要的是:如果
目录
不存在,请在构建
文件
之前创建它。我可以将
mkdir-p directory
放在
命令之前,以生成文件
,但这与每当
文件
过期时定位
目录
是一样的。。。完全按照我的需要工作,但很难看=(@matheuscscp Makefile文档正好解决了这种情况: