如何在bin
目录中的任意数量的c源文件和头文件中创建一个简单的makefile来生成src
目录中的目标文件和输出二进制文件?在此示例结构中,main包含module_a.h和module_b.h。 module_a.h和module_b.h每个都只包含stdio.h。
我可以管理干净规则,但不知道如何自动生成.o文件和依赖项。
├── bin
├── makefile
├── README.md
└── src
├── main.c
├── module_a.c
├── module_a.h
├── module_b.c
└── module_b.h
答案 0 :(得分:0)
这是我使用的简单Makefile。我不是一个Makefile大师,所以很有可能它可以改进。但它应该给你一些东西开始。唯一棘手的是依赖性处理。我知道还有其他方法可以做到这一点。该示例显示了一种方法 - 为每个目标文件生成.d文件,该文件列出了该目标文件的依赖项。然后将所有.d文件包含到Makefile中以获取所有这些依赖性规则。
BIN := bin/my_binary
# Include all C files in the src directory
SRCS := $(shell find src -name '*.c')
# List of object files to link
OBJS := $(patsubst %.c,%.o,$(SRCS))
# Link rule
$(BIN): $(OBJS)
$(CC) -o $@ $(OBJS)
# Include Dependency files
-include $(OBJS:.o=.d)
# Builds object file and generates dependency
%.o: %.c
$(CC) -c $(CFLAGS) $*.c -o $*.o
$(CC) -MM $(CFLAGS) $*.c > $*.d
mv -f $*.d $*.d.tmp
sed -e 's|.*:|$*.o:|' < $*.d.tmp > $*.d
rm $*.d.tmp