在以下示例Makefile中:
EXTENS := .c .C .cc .c++ .cpp .cxx
SOURCES := 1.c 2.C 3.cc 4.c++ 5.cpp 6.cxx
OBJECTS := $(SOURCES)
REPLACE_EXTENS = $(foreach f,$(EXTENS),$(eval $(1) := $(patsubst %$(f),%.o,$($(1)))))
$(call REPLACE_EXTENS, OBJECTS)
all:
@echo $(SOURCES)
@echo $(OBJECTS)
我希望输出行@echo $(OBJECTS)
:
1.o 2.o 3.o 4.o 5.o 6.o
然而它什么也没输出。我做错了什么以及做正确的方法是什么?
答案 0 :(得分:1)
将$(call REPLACE_EXTENS, OBJECTS)
更改为$(call REPLACE_EXTENS,OBJECTS)
。调用参数之间没有空格。
答案 1 :(得分:1)
这样做的正确方法是完全抛弃EXTENS和REPLACE_EXTENS调用,然后写:
SOURCES := 1.c 2.C 3.cc 4.c++ 5.cpp 6.cxx
OBJECTS := $(addsuffix .o,$(basename $(SOURCES))
all:
@echo $(SOURCES)
@echo $(OBJECTS)