2011-02-11 4 views
6

さまざまなCFLAGSを使って同じ* .cファイルから同じ* .cファイルを作成する必要があります。同じ* .cから異なる* .oファイルを生成するためにpatsubstを使いたかったのです。私は次のステートメントを間違ってやっています。(私は($ <)_O0.oと($ <)_O2.oを持つオブジェクトファイルのセットを同じソースファイルのセットから生成したい)助けてください。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]