1

我写了一个 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 创建目录?

4

2 回答 2

2

另一种方法是使用一个虚拟变量,在 Makefile 解析的早期进行评估并生成所需的文件夹。

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

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

我已经在各种 Linux 风格和 Solaris 上使用了它,以及 GNU Make 3.81。

于 2014-04-22T01:23:27.993 回答
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:
于 2013-09-08T07:34:17.397 回答