用wildcard获得一级子目录和二级子目录下所有的.c和.cpp,并写makefile
时间: 2024-02-11 18:07:18 浏览: 183
以下是一个通过wildcard获取一级子目录和二级子目录下所有的.c和.cpp文件的makefile示例:
```
CC = gcc
CXX = g++
CFLAGS = -Wall -Werror
CXXFLAGS = -std=c++11 -Wall -Werror
SRCDIRS := .
SRCDIRS += $(wildcard */)
SRCDIRS += $(wildcard */*/)
SRCS = $(foreach dir,$(SRCDIRS),$(wildcard $(dir)*.c $(dir)*.cpp))
OBJS = $(SRCS:.c=.o) $(SRCS:.cpp=.o)
TARGET = myprogram
all: $(TARGET)
$(TARGET): $(OBJS)
$(CXX) $(CFLAGS) $(OBJS) -o $(TARGET)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(TARGET)
```
在这个示例中,我们使用wildcard函数获取所有一级子目录和二级子目录下的.c和.cpp文件。我们首先定义一个SRCDIRS变量,它包含当前目录和所有一级子目录和二级子目录。我们使用wildcard函数获取每个目录下的所有.c和.cpp文件,并将它们保存到SRCS变量中。
接下来,我们使用foreach函数遍历SRCDIRS变量中的所有目录,并在每个目录下使用wildcard函数获取所有.c和.cpp文件。我们将所有的.c和.cpp文件保存到SRCS变量中。
最后,我们与之前的makefile示例一样编写了all、$(TARGET)、%.o和clean规则。注意,在%.o规则中,我们并没有指定头文件的搜索路径。因此,如果你的源文件中包含了头文件,你需要添加-I选项来告诉编译器头文件的搜索路径。
阅读全文