写个万能makefile
时间: 2023-10-27 17:08:22 浏览: 43
一个万能的Makefile应该能够支持多种编程语言和不同的目录结构。以下是一个示例Makefile:
```
# 定义编译器和编译选项
CC := gcc
CFLAGS := -Wall -Werror
# 定义源代码、目标文件和可执行文件的路径
SRC_DIR := src
OBJ_DIR := obj
BIN_DIR := bin
# 定义源代码和可执行文件的文件名
TARGET := $(BIN_DIR)/program
SRCS := $(wildcard $(SRC_DIR)/*.c)
OBJS := $(patsubst $(SRC_DIR)/%.c,$(OBJ_DIR)/%.o,$(SRCS))
# 编译规则
all: $(TARGET)
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $^ -o $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c | $(OBJ_DIR)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJ_DIR):
mkdir -p $(OBJ_DIR)
# 清除规则
clean:
rm -rf $(BIN_DIR) $(OBJ_DIR)
.PHONY: clean
```
这个Makefile支持在`src`文件夹下编写C源代码,生成的目标文件存储在`obj`文件夹下,可执行文件存储在`bin`文件夹下。你只需要修改`CC`和`CFLAGS`变量,就可以编译其他编程语言的代码。
相关问题
给我写个万能makefile
好的,以下是一个简单的万能Makefile:
```
CC=gcc
CFLAGS=-Wall -g
all: programprogram: main.o funcs.o
$(CC) $(CFLAGS) main.o funcs.o -o program
main.o: main.c
$(CC) $(CFLAGS) -c main.c
funcs.o: funcs.c
$(CC) $(CFLAGS) -c funcs.c
clean:
rm -f *.o program
```
这个Makefile使用了变量CC和CFLAGS来定义编译器和编译选项,使用了规则来生成目标文件以及最终的可执行文件。你可以根据具体的项目需求来修改和添加规则和变量。
写个8051 makefile
以下是一个基本的8051 Makefile示例:
```
# 8051 Makefile
# 定义编译器和选项
CC = sdcc
CFLAGS = --model-small --xram-loc 0x8000 --xram-size 0x0800
# 定义目标文件
TARGET = main
# 定义源文件
SRCS = main.c
# 定义头文件路径
INCLUDES = -I./include
# 定义依赖文件
DEPS = $(SRCS:.c=.d)
# 定义编译规则
%.rel: %.c
$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@
# 定义链接规则
$(TARGET).ihx: $(SRCS:.c=.rel)
$(CC) $(CFLAGS) $(INCLUDES) $(SRCS:.c=.rel) -o $(TARGET).ihx
# 定义清理规则
clean:
rm -f $(TARGET).ihx $(SRCS:.c=.rel) $(DEPS)
# 定义默认规则
all: $(TARGET).ihx
# 定义依赖规则
%.d: %.c
$(CC) $(INCLUDES) -MM $< > $@
# 引入依赖文件
-include $(DEPS)
```
该Makefile定义了编译器和选项,目标文件,源文件,头文件路径,依赖文件,编译规则,链接规则,清理规则,默认规则和依赖规则。其中,编译规则将每个.c文件编译为.rel文件,链接规则将所有.rel文件链接为一个ihx文件,清理规则将所有生成的文件删除,默认规则将生成目标文件,依赖规则将生成依赖文件。最后,引入依赖文件以确保在头文件被更新时重新编译。