gpt4 book ai didi

c - C 项目的基本 makefile

转载 作者:行者123 更新时间:2023-11-30 20:38:04 27 4
gpt4 key购买 nike

如何制作一个简单的 makefile 来从 src 目录中的任意数量的 c 源文件和头文件生成目标文件并在 bin 目录中输出二进制文件?在此示例结构中,main 包括 module_a.h 和 module_b.h。 module_a.h 和 module_b.h 均仅包含 stdio.h。

我可以管理 clean 规则,但不知道如何自动生成 .o 文件和依赖项。

├── bin
├── makefile
├── README.md
└── src
├── main.c
├── module_a.c
├── module_a.h
├── module_b.c
└── module_b.h

最佳答案

这是我使用的一个简单的 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

关于c - C 项目的基本 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655737/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com