2013-09-08 11 views
1

Я написал Makefile, но мне нужно, чтобы создать папку OBJ, поэтому, для этого, я попробовал много вещей ... на основе этой ссылке: https://stackoverflow.com/questions/askСоздать каталог с помощью Makefile

Итак, что мой 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 [email protected] $< $(CFLAGS) 

$(OUTPUTDIR)/test: $(OBJ) 
    $(CC) -o [email protected] $^ $(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

Возможный дубликат [Как создать каталог при необходимости?] (Http://stackoverflow.com/questions/16344719/how-to-create-directory-if-needed) – Beta

+0

Непонятно, почему [ Задайте вопрос] (http://stackoverflow.com/questions/ask) - полезная ссылка. –

+0

Последний фрагмент будет работать, если вы определите 'OUT_DIR = $ {ODIR}' или другое подходящее значение. Символ трубы в среднем фрагменте озадачен; Я не думаю, что раньше видел эти записи. –

ответ

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: 
2

Другой подход заключается в фиктивную переменную, которая оценивает в начале синтаксического анализа в Makefile и производит требуемую папку.

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

Тогда остальная часть Makefile может с уверенностью предположить, что существует $ (ODIR).

Я использовал это в различных вариантах Linux, а Solaris - с GNU Make 3,81.

Смежные вопросы