C项目的基本makefile

时间:2015-06-04 23:11:23

标签: c makefile

如何在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

1 个答案:

答案 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