2011-02-11 19 views
6

Tengo que crear diferentes archivos * .o a partir de un mismo conjunto de * c con varios CFLAGS. Quería usar patsubst para generar diferentes archivos * .o del mismo * .c. Estoy haciendo algo mal en la siguiente declaración, por favor ayuda (Quiero generar un conjunto de archivos de objetos que tengan ($ <) _O0.o y el otro ($ <) _O2.o del mismo conjunto de archivos fuente c):patsubst en makefile

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

Gracias

Respuesta

16

uso patsubst para hacer listas de los objetos que desea construir, y luego usar reglas separadas para cada tipo de construcción.

Algo como esto:

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

Gracias por ser tan descriptivo, que consigue la idea. – Sayan

5

También puede utilizar comodines para especificar todos los archivos en el directorio.

por ejemplo:

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