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