2011-02-11 14 views
6

Мне нужно создать разные файлы * .o из одного и того же набора * .c, используя различные CFLAGS. Я хотел использовать patsubst для генерации разных файлов * .o из тех же * .c. Я делаю что-то неправильно в следующем утверждении, пожалуйста, помогите (я хочу сгенерировать один набор объектных файлов, имеющих ($ <) _O0.o, а другой ($ <) _O2.o из того же набора исходных файлов c):patsubst on makefile

$(CC) $(CFLAGS_02) -c $< -o $(patsubst %.c,%_O2.o,$<) 

Благодаря

ответ

16

Использование patsubst составлять списки объектов, которые вы хотите создать, а затем использовать отдельные правила для каждого типа телосложения.

Что-то вроде этого:

SRC_FILES = source1.c source2.c 

OBJ_FILES_O0 = $(patsubst %.c,%_O0.o,$(SRC_FILES)) 
OBJ_FILES_O2 = $(patsubst %.c,%_O2.o,$(SRC_FILES)) 

CFLAGS_O0 := -O0 
CFLAGS_O2 := -O2 

all: $(OBJ_FILES_O0) $(OBJ_FILES_O2) 

$(OBJ_FILES_O0): %_O0.o: %.c 
    $(CC) $(CFLAGS_O0) -c $< -o [email protected] 

$(OBJ_FILES_O2): %_O2.o: %.c 
    $(CC) $(CFLAGS_O2) -c $< -o [email protected] 
+1

Спасибо за то, что описательная, я получаю идею. – Sayan

5

Вы также можете использовать дикие карты, чтобы указать все файлы в каталоге.

например:

#Generic Makefile. 

CC := g++ 

LD := g++ 

CFLAGS := -c 

LDFLAGS := -L<path to lib> -l<libname> \ 

      -L<path to lib> -l>libname> \ 
      ...................... 

ifeq (${TARGETARCH}, debug) 

    CFLAGS += -g -O0 

elif 

    CFLAGS += -O4 -DNDEBUG 

SRCFILES := $(wildcard *.cpp) 

OBJFILES := $(patsubst %.cpp, %.o, ${SRCFILES}) 


all: main 

main: ${OBJFILES} 

    @echo "[Linking]"[email protected] 

    ${LD} ${LDFLAGS} ${OBJFILES} 

%.o: %.cpp 

    @echo "[Compiling]"[email protected] 

    ${CC} ${CFLAGS} $^ -o [email protected] 
Смежные вопросы