使用MakeFile创建目录

时间:2013-09-08 03:20:36

标签: makefile

我写了一个MakeFile,但我需要它来创建文件夹OBJ,所以,为此,我尝试了很多东西......基于这个链接: https://stackoverflow.com/questions/ask

所以,这是我的makefile

IDIR =.
CC=gcc
CFLAGS=-I$(IDIR) -Wall -g

SRCDIR=src
ODIR=obj
LIBS=-ltest

_OBJ = main.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

OUTPUTDIR = ../bin

$(ODIR)/%.o: $(SRCDIR)/%.c
    $(CC) -c -o $@ $< $(CFLAGS)

$(OUTPUTDIR)/test: $(OBJ) 
    $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

我需要创建obj文件夹,我尝试了这个想法:

OBJDIR := objdir
OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)

$(OBJDIR)/%.o : %.c
    $(COMPILE.c) $(OUTPUT_OPTION) $<

all: $(OBJS)

$(OBJS): | $(OBJDIR)

$(OBJDIR):
    mkdir -p $(OBJDIR)

和此:

MKDIR_P = mkdir -p

.PHONY: directories

all: directories program

directories: ${OUT_DIR}

${OUT_DIR}:
        ${MKDIR_P} ${OUT_DIR}

但显然每次调用makefile时,它都会忽略创建目录OBJ的命令并开始直接编译...

如何让makefile创建目录?

2 个答案:

答案 0 :(得分:2)

另一种方法是使用一个虚拟变量,在Makefile的解析中尽早求值并生成所需的文件夹。

   ODIR = obj_64
   dummy_build_folder := $(shell mkdir -p $(ODIR))

然后Makefile的其余部分可以安全地假设$(ODIR)存在。

我已经在各种Linux版本和Solaris上使用了GNU Make 3.81。

答案 1 :(得分:0)

试试这个:

OBJDIR := objdir
OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)

$(OBJDIR)/%.o : %.c
    $(COMPILE.c) $(OUTPUT_OPTION) $<

all: $(OBJS)

$(OBJS): | $(OBJDIR)

$(OBJDIR): FORCE
    mkdir -p $(OBJDIR)

FORCE: