在不带mkdir -p的Makefile中创建子目录>> [

问题描述 投票:1回答:2
GNU standard表示最好不要对-p使用mkdir命令:

例如,不要使用'mkdir -p',这可能很方便,因为很少有系统根本不支持它,而其他系统则完全不支持,因此并行执行并不安全

我想遵守此标准,因此我的Makefile中遇到问题。

我正在递归地编译src目录中所有目录的所有C源代码,并希望将它们放置在obj目录中。相同的目录结构在obj目录中进行镜像,但是这些目录最初不存在。

我可以很容易地执行mkdir -p $(@D)创建目录,但是按照GNU的标准,我不能这样做,这使我想到了一个问题:如何在Makefile中解决该问题?

下面的我的Makefile:

SRCDIR=src OBJDIR=obj CC=cc CFLAGS= CFLAGS=-g -O2 -pedantic -Wall ALL_CFLAGS=-std=c89 $(CFLAGS) # Copied from https://stackoverflow.com/questions/2483182/recursive-wildcards-in-gnu-make/18258352#18258352 rwildcard=$(foreach d, $(wildcard $1/*), $(call rwildcard, $d, $2) $(filter $(subst *, %, $2), $d)) SOURCES=$(call rwildcard, $(SRCDIR), *.c) OBJECTS=$(subst $(SRCDIR),$(OBJDIR),$(SOURCES:.c=.o)) all: $(OBJECTS) $(OBJDIR)/%.o: $(SRCDIR)/%.c $(CC) $(ALL_CFLAGS) -c -o $@ $<

GNU标准说,对mkdir不使用-p命令是一个好主意:例如,不要使用'mkdir -p',这可能会很方便,因为一些系统不支持它。全部并带有...
unix makefile gnu-make standards mkdir
2个回答
1
投票
GNU标准在许多地方已经过时了。这似乎是其中之一。

0
投票
您可以只使用

make

© www.soinside.com 2019 - 2024. All rights reserved.