是否可以从变量中选择与特定扩展名匹配的文件,并丢弃其余文件?
SRCS = file1.c file2.c file3.cpp
OBJS = $(SRCS:%.c=%.o)
OBJS += $(SRCS:%.cpp=%.o)
问题在于 $(SRCS:%.c=%.o)
将 .c 文件转换为 .o 文件,但保留了 . cpp 文件。
在这种情况下,OBJS
变量将等于
file1.o file2.o file3.cpp file1.c file2.c file3.o
而我想要的是
file1.o file2.o file3.o
那么,这可能吗?或者唯一干净的方法是使用 SRCS_C
和 SRCS_CPP
变量?
最佳答案
对于 GNU make,有几个 text processing functions可用的。你可以试试这个:
CSRCS = $(filter %.c,$(SRCS))
CPPSRCS = $(filter %.cpp,$(SRCS))
这会将对象列表一分为二。然后您可以单独处理每个:
OBJS = $(CSRCS:%.c=%.o)
OBJS += %(CPPSRCS:%.cpp=%.o)
另一种选择是一次应用两个过滤器:
OBJS = $($(SRCS:%.c=%.o):%.cpp=%.o)
虽然可读性较差。
关于c++ - 来自变量的 Makefile : select files by extension,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893115/