2011-02-11 14 views
6

Devo creare diversi file * .o da uno stesso set di * .c utilizzando vari CFLAG. Volevo usare patsubst per generare diversi file * .o dallo stesso * .c. Sto facendo qualcosa di sbagliato nella seguente dichiarazione, per favore aiuto (Voglio generare un set di file oggetto che hanno ($ <) _O0.o e l'altro ($ <) _O2.o dallo stesso set di file sorgente c):patsubst su makefile

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

Grazie

risposta

16

usa patsubst per fare le liste degli oggetti che si vuole costruire, e quindi utilizzare regole separate per ogni tipo di corporatura.

Qualcosa di simile a questo:

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

Grazie per essere così descrittiva, ho reso l'idea. – Sayan

5

È inoltre possibile utilizzare i caratteri jolly per specificare tutti i file nella directory.

esempio:

#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]