是否可以从与特定扩展名匹配的变量中选择文件,然后丢弃其余文件?
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
变量? 最佳答案
我看到了两种可能的解决方法(但它们会给您带来一些不同
项目组织)。首先是拥有:
SRCS := file1 file2 file3
OBJS := $(SRCS:%=%.o)
然后,您可以使用相关性定义目标以检查
源文件是C或C++文件:
%.o: %.cpp
g++ $< [...]
%.o: %.c
gcc $< [...]
或者,您可以拥有
file1.c.o
/file3.cpp.o
之类的目标文件。那意味着您可以使用同名的C和C++文件,这可能会很有用。
然后,您只需要做:
SRCS := file1.c file2.c file3.cpp
OBJS := $(SRCS:%=%.o)
%.cpp.o: %.cpp
g++ $< [...]
%.c.o: %.c
gcc $< [...]
希望我能帮到:)