# 定义目标列表
TARGETS = base nbody1-parallel nbody1 nbody2-shared-memory nbody2 nbody3-multiple-thread nbody4-unroll nbody5-position-mul-thread

# 默认目标：编译所有目标
all: $(TARGETS)

# 编译器及编译选项（默认不开优化）
NVCC = nvcc
NVCCFLAGS = -O0

# 每个目标都需要对应的 .cu 文件以及 timer.c 和 check.c 文件
base: base.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody1-parallel: nbody1-parallel.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody1: nbody1.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody2-shared-memory: nbody2-shared-memory.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody2: nbody2.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody3-multiple-thread: nbody3-multiple-thread.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody4-unroll: nbody4-unroll.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

nbody5-position-mul-thread: nbody5-position-mul-thread.cu timer.c check.c
	$(NVCC) $(NVCCFLAGS) $^ -o $@

# clean 目标用于清理生成的目标文件
clean:
	rm -f $(TARGETS) *.o
