-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',这可能会很方便,因为一些系统不支持它。全部并带有...
make