c++ - 来自变量的 Makefile : select files by extension,

标签 c++ c makefile

是否可以从变量中选择与特定扩展名匹配的文件,并丢弃其余文件?

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_CSRCS_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/

相关文章:

makefile - 将 $ORIGIN 添加到 LDFLAGS 时遇到困难

c++ vector 插入意外行为

c++ - Qt:遍历所有顶级窗口

c++ - "Narrowing conversion from ' int ' to ' char ' inside { }"交叉编译时的合法值

c++ - 使用 GCC,我可以在每个函数的基础上禁用 -Wframe-larger-than 吗?

c - 在 C 或无限 sleep 中挂起主线程

makefile - makefile中分号和双符号的区别

c++ - 客观内存比较

c++ - Hook OutputDebugStringA 引发异常

bash - 使用 ENV 变量或默认值定义 Makefile 变量