makefile上的patsubst

makefile上的patsubst,makefile,Makefile,我必须使用不同的cflag从同一组*.c创建不同的*.o文件。我想使用patsubst从相同的*.c生成不同的*.o文件。我做错了以下语句,请帮助(我想生成一组对象文件,其中($使用patsubst创建要生成的对象的列表,然后对每种类型的生成使用单独的规则) 大概是这样的: SRC_FILES = source1.c source2.c OBJ_FILES_O0 = $(patsubst %.c,%_O0.o,$(SRC_FILES)) OBJ_FILES_O2 = $(patsubst

我必须使用不同的cflag从同一组*.c创建不同的*.o文件。我想使用patsubst从相同的*.c生成不同的*.o文件。我做错了以下语句,请帮助(我想生成一组对象文件,其中($使用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 $@
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
全部:$(对象文件0)$(对象文件2)
$(对象文件0):%\uo0.o:%.c
$(CC)$(CFLAGS_O0)-c$<-o$@
$(OBJ_文件_O2):%\u O2.o:%.c
$(CC)$(CFLAGS_O2)-c$<-o$@

您还可以使用通配符指定目录中的所有文件

例如:

#通用生成文件。
CC:=g++
LD:=g++
CFLAGS:=-c
LDFLAGS:=-L-L\
-L-L>libname>\
......................
ifeq(${TARGETARCH},调试)
CFLAGS+=-g-O0
埃利夫
CFLAGS+=-O4-DNDEBUG
SRCFILES:=$(通配符*.cpp)
OBJFILES:=$(patsubst%.cpp、%.o、${SRCFILES})
全部:主要
main:${OBJFILES}
@回声“[链接]”$@
${LD}${LDFLAGS}${OBJFILES}
%.o:%.cpp
@echo“[编译]”$@
${CC}${CFLAGS}$^-o$@

谢谢你的描述,我明白了。
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 $@
#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 $@