3

我通常使用这一行将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)

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

4

1 回答 1

3

你不能只用速记来做到这一点。您必须使用 patsubst 函数:

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

或者您可以使用其中的一种:

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

或者,您可以这样做:

OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
于 2013-10-25T14:09:13.737 回答