我通常使用这一行
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)
这可能吗?如何实现?
你不能只用速记来做到这一点。您必须使用 patsubst 函数:
OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCES)))
或者您可以使用其中之一:
OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES:.c=.o))
或者,你可以这样做:
OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))