Стандарт GNU гласит, что не рекомендуется использовать команду -p
для mkdir
:
Например, не используйте 'mkdir -p ', как бы удобно это ни было, поскольку некоторые системы вообще не поддерживают его, а с другими это небезопасно для параллельного выполнения
Я бы хотел придерживаться этого стандарта и поэтомуЯ столкнулся с проблемой в моем Makefile.
Я рекурсивно компилирую все источники C из всех каталогов в каталоге src
и хотел бы поместить их в каталог 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 /2161247/rekursivnye-simvoly-v-gnu-delayt#2161255
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 $@ $<