0
在命令行中,你可以做多个目录,如下所示:如何从Makefile中将逗号分隔的目录列表传递给mkdir?
mkdir -p build/linux/{src,test,debug}
如何同样的事情从一个Makefile可以实现吗?我想出了这个:
# 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)
这只是使一个目录名为'{src,test,debug}',而不是三个不同的目录。
$ make
mkdir -p build/linux/{src,test,debug}
$ ls build/linux/
{src,test,debug}
$ make clean
rm -fr build/linux
$ mkdir -p build/linux/{src,test,debug}
$ ls build/linux/
debug src test
我怀疑这个问题可能与花括号/围绕着...我做错了什么?
编辑:它似乎是壳使用。顶部的示例是bash,但是sh失败:
$ sh
$ mkdir -p build/linux/{src,test,debug}
$ ls build/linux
{src,test,debug}
当我运行makefile时,它会正确创建目录。我正在使用GNUMake(3.81)。你呢? – Beta 2010-07-08 01:30:04
问题不在于make,而在于调用的shell。 drtwox的make是(可能)使用不支持{}语法的shell。 – 2010-07-08 01:58:10