makefile中的patsubst

时间:2011-02-11 17:04:40

标签: makefile

我必须使用各种CFLAGS从同一组* .c创建不同的* .o文件。我想使用patsubst从相同的* .c生成不同的* .o文件。我做错了以下语句,请帮忙(我想生成一组具有($<)_ O0.o的对象文件和另一组($<)_ O2.o来自同一组c源文件) :

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

由于

2 个答案:

答案 0 :(得分:19)

使用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 $@

$(OBJ_FILES_O2): %_O2.o: %.c
    $(CC) $(CFLAGS_O2) -c $< -o $@

答案 1 :(得分: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]"$@

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

%.o: %.cpp

  @echo "[Compiling]"$@

  ${CC} ${CFLAGS} $^ -o $@