Makefile 在结尾处制定目标?

Makefile 在结尾处制定目标?,makefile,target,Makefile,Target,我想编写一个通用的makefile,它可以同时满足我对各种项目的大部分需求。但后来我被以下几点绊倒了: %/: mkdir -p $@ .SECONDEXPANSION: $(objects): $$(dir $$@) %/.: mkdir -p $@ .SECONDEXPANSION: $(objects): $$(dir $$@). 我希望它运行得很好,只要$(objects)中的目标目录需要一个目录,就可以创建一个目录。但不知怎么的,它没有起作用。我检查并发现:目标

我想编写一个通用的makefile,它可以同时满足我对各种项目的大部分需求。但后来我被以下几点绊倒了:

%/:
    mkdir -p $@

.SECONDEXPANSION:
$(objects): $$(dir $$@)
%/.:
    mkdir -p $@

.SECONDEXPANSION:
$(objects): $$(dir $$@).
我希望它运行得很好,只要
$(objects)
中的目标目录需要一个目录,就可以创建一个目录。但不知怎么的,它没有起作用。我检查并发现:目标不能以“/”结尾


有什么方法可以避免这种情况吗?

您只需选择一个后缀,该后缀不能作为文件夹中文件的名称。例如
。因此,规则如下:

%/:
    mkdir -p $@

.SECONDEXPANSION:
$(objects): $$(dir $$@)
%/.:
    mkdir -p $@

.SECONDEXPANSION:
$(objects): $$(dir $$@).

由于
指的是目录本身,因此不应产生任何问题:)

目标不能以“/”结尾不是真的。然而,make在某些情况下会从文件名中删除尾随斜杠,这会导致问题。我猜。虚假目标可以吗?所有东西都被认为是一个文件,不是吗?我测试了规则
all:something/
,它说没有“目标某物的规则”,所以我认为它在目标的末尾去掉了每个
/
。在该规则中,
something/
不是目标,而是先决条件。如果您编写一条规则,如
%/:
,然后运行
make-p
打印规则数据库,您将看到斜杠没有从目标中删除。