makefile上的patsubst

Say*_*yan 8 makefile

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

 $(CC) $(CFLAGS_02) -c $< -o $(patsubst %.c,%_O2.o,$<)
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 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 $@
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你这么描述,我明白了. (2认同)

小智 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 $@
Run Code Online (Sandbox Code Playgroud)