在Makefile中替换文件名

时间:2013-10-25 13:37:22

标签: makefile

我通常使用此行OBJECTS = $(SOURCES:.cpp=.o)将SOURCES中.cpp文件扩展名替换为.o扩展名。 我的项目现在有.c扩展名和.cpp的文件。如何修改该行以使其将所有.c和.cpp扩展名替换为.o?

我不喜欢下面的两行解决方案:

OBJECTS_TMP = $(SOURCES:.cpp=.o)

OBJECTS = $(OBJECT_TMP:.c=.o)

我想要像

这样的东西

OBJECTS = $(SOURCES:(.cpp|.c)=.o)

甚至

OBJECTS = $(SOURCES:.*=.o)

这可能吗?怎么样?谢谢!

1 个答案:

答案 0 :(得分:3)

你不能只用速记来做。你必须使用patsubst函数:

OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCES)))

或者你可以使用其中一个:

OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES:.c=.o))

或者,您可以这样做:

OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))