在Makefile中,可以使用通配符(wildcard)來獲取文件夾下所有文件的列表,然后使用規則來編譯這些文件。
以下是一個示例的Makefile,用于編譯文件夾下的所有.c文件:
# 獲取文件夾下所有的.c文件
SRCS := $(wildcard *.c)
# 生成對應的目標文件列表
OBJS := $(SRCS:.c=.o)
# 目標文件
TARGET := myprogram
# 編譯規則
$(TARGET): $(OBJS)
gcc $^ -o $@
%.o: %.c
gcc -c $< -o $@
.PHONY: clean
clean:
rm -f $(OBJS) $(TARGET)
在這個Makefile中,首先使用通配符$(wildcard *.c)
獲取當前文件夾下所有的.c文件,并將它們保存到變量SRCS
中。然后,通過將.c
替換為.o
,生成對應的目標文件列表OBJS
。
接下來,定義了兩個規則。第一個規則$(TARGET): $(OBJS)
表示生成目標文件$(TARGET)
的依賴是所有的目標文件列表$(OBJS)
。在規則的命令中,使用$^
表示所有的依賴文件,$@
表示目標文件,通過gcc命令將目標文件鏈接成可執行程序。
第二個規則%.o: %.c
表示根據.c文件生成對應的目標文件。在規則的命令中,使用$<
表示第一個依賴文件,通過gcc命令將.c文件編譯成目標文件。
最后,定義了一個偽目標.PHONY: clean
用于清理編譯生成的目標文件和可執行程序。
要編譯文件夾下的所有文件,只需在命令行中輸入make
即可。如果需要清理編譯生成的文件,可以輸入make clean
。