我必须使用各种CFLAGS从同一组* .c创建不同的* .o文件。我想使用patsubst从相同的* .c生成不同的* .o文件。我做错了以下语句,请帮忙(我想生成一组具有($<)_ O0.o的对象文件和另一组($<)_ O2.o来自同一组c源文件) :
$(CC) $(CFLAGS_02) -c $< -o $(patsubst %.c,%_O2.o,$<)
由于
答案 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 $@