我通常使用这一行将OBJECTS = $(SOURCES:.cpp=.o)SOURCES 中文件的 .cpp 扩展名替换为 .o 扩展名。我的项目现在包含扩展名为 .c 的文件和 .cpp。如何修改该行以使其将所有 .c 和 .cpp 扩展名替换为 .o?
我不喜欢如下所示的两行解决方案:
OBJECTS_TMP = $(SOURCES:.cpp=.o)
OBJECTS = $(OBJECT_TMP:.c=.o)
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
OBJECTS = $(SOURCES:(.cpp|.c)=.o)
Run Code Online (Sandbox Code Playgroud)
甚至
OBJECTS = $(SOURCES:.*=.o)
Run Code Online (Sandbox Code Playgroud)
这可能吗?如何实现?
你不能只用速记来做到这一点。您必须使用 patsubst 函数:
OBJECTS = $(patsubst %.cpp,%.o,$(patsubst %.c,%.o,$(SOURCES)))
Run Code Online (Sandbox Code Playgroud)
或者您可以使用其中之一:
OBJECTS = $(patsubst %.cpp,%.o,$(SOURCES:.c=.o))
Run Code Online (Sandbox Code Playgroud)
或者,你可以这样做:
OBJECTS = $(addsuffix .o,$(basename $(SOURCES)))
Run Code Online (Sandbox Code Playgroud)