写个万能makefile
时间: 2023-10-27 07:08:22 浏览: 197
一个万能的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来定义编译器和编译选项,使用了规则来生成目标文件以及最终的可执行文件。你可以根据具体的项目需求来修改和添加规则和变量。
g++ 万能makefile
g++ 是GNU Compiler Collection(GCC)的一部分,它是一个广泛使用的C++编译器,用于在Unix-like系统上构建C++程序。而"万能Makefile"通常指的是一个通用的Makefile模板,用于管理和编译多个源文件到可执行文件,不论项目结构如何,都能适应不同类型的C++项目。
一个基本的g++ 万能Makefile可能会包含以下几个关键部分:
1. 预定义变量和规则:
```makefile
# 定义编译器和目标可执行文件
CC = g++
EXECUTABLE = your_program
# 源文件扩展名
SRC_EXT = cpp cxx
# 源文件目录
SRC_DIR = src
# 输出目录
OUT_DIR = bin
# 基本规则:编译所有cpp文件
%.o: %.${SRC_EXT}
$(CC) -c $(CPPFLAGS) -o $@ $<
```
2. 全局编译规则:
```makefile
all: $(EXECUTABLE)
$(EXECUTABLE): $(wildcard $(SRC_DIR)/*.${SRC_EXT})
$(CC) -o $@ $(LDFLAGS) $(wildcard $(SRC_DIR)/*.o)
```
3. 清理规则:
```makefile
clean:
-rm -f $(OUT_DIR)/*.o $(EXECUTABLE)
```
4. 打包规则:
```makefile
package: $(EXECUTABLE)
tar -czvf your_project.tar.gz $(EXECUTABLE) $(SRC_DIR) Makefile
```
阅读全文