简单模板
# 你的目标文件和源文件
TARGET = my_program
SOURCE = main.c
# 编译器和编译选项
CC = gcc
CFLAGS = -Wall -O2
# 使用 pkg-config 获取库的编译和链接选项
LIBS = $(shell pkg-config --cflags --libs your-library)
# 指定依赖的头文件目录
INCLUDES = -I/path/to/your-library/include
# 编译规则
$(TARGET): $(SOURCE)
$(CC) $(CFLAGS) $(INCLUDES) -o $(TARGET) $(SOURCE) $(LIBS)
# 清理规则
clean:
rm -f $(TARGET)
SANITIZE_LDFLAGS = -fsanitize=address
SANITIZE_CFGLAGS = $(SANITIZE_LDFLAGS )
# 自动生成规则
# 假设有多个源文件:file1.c, file2.c, ...
OBJS = $(patsubst %.c, %.o, $(wildcard *.c))
$(patsubst pattern,replacement,text)
# 示例1: 替换后缀
SRC_FILES = file1.c file2.cpp file3.c
OBJ_FILES = $(patsubst %.c, %.o, $(SRC_FILES))
# 结果:OBJ_FILES 变量的值为 "file1.o file2.cpp file3.o"
# 示例2: 替换路径
SRC_PATHS = src/file1.c src/file2.c src/file3.c
OBJ_PATHS = $(patsubst src/%, obj/%, $(SRC_PATHS))
# 结果:OBJ_PATHS 变量的值为 "obj/file1.c obj/file2.c obj/file3.c"
# 编译规则
#-c表示不调用linker,用于生成.o
# $<用于引用main.o规则中的依赖项,即main.c文件。
$@用于引用规则的目标
$^表示所有依赖项 即main.o和other.o
main.o: main.c
gcc -c $< -o $@
# 连接规则
my_program: main.o other.o
gcc $^ -o $@
# 清理规则
clean:
rm -f $@ my_program main.o other.o