partir de la ligne de commande, vous pouvez faire plusieurs répertoires comme ceci:Comment puis-je passer une liste de répertoires séparés par des virgules à mkdir à partir d'un Makefile?
mkdir -p build/linux/{src,test,debug}
Comment la même chose peut être réalisée à partir d'un Makefile? Je suis venu avec ceci:
# The architecture/OS to compile for
ARCH := linux
# Object files go here, under the architecture/OS directory
BUILD_DIR := build/$(ARCH)
# List of source code directories
SOURCES := src test debug
# e.g. The object files for
# src/foo.c test/bar.c debug/bort.c
# will be in
# build/$(ARCH)/src/foo.o
# build/$(ARCH)/test/bar.o
# build/$(ARCH)/debug/bort.o
# Make a comma separated list of the source directories
# Is there a more concise way of doing this?
comma :=,
empty :=
space := $(empty) $(empty)
DIRECTORIES := $(subst $(space),$(comma),$(SOURCES))
default:
mkdir -p $(BUILD_DIR)/{$(DIRECTORIES)}
clean:
rm -fr $(BUILD_DIR)
Ce qui fait juste un répertoire appelé « {src, test, débogage} » au lieu de trois répertoires distincts. Je soupçonne que le problème pourrait être avec/autour des accolades ... Qu'est-ce que je fais mal?
Éditer: Il semble que ce soit le shell qui soit utilisé. L'exemple en haut était en bash, mais sh échoue:
$ sh
$ mkdir -p build/linux/{src,test,debug}
$ ls build/linux
{src,test,debug}
Lorsque j'exécute votre fichier makefile, il crée les répertoires correctement. J'utilise GNUMake (3.81). Et vous? – Beta
Le problème n'est pas make, mais le shell que make appelle. Le make de drtwox utilise (probablement) un shell qui ne supporte pas la syntaxe {}. –