Ubuntu编译C++,Cuda文件
make编译并链接所有文件
make complie 仅编译
make link链接所有.o文件
make link_only fil1.o fil2.o ... 手动指定链接文件
make clean 清除编译出的结果
# 指定编译器
NVCC = nvcc
CC = g++ # 可用于编译 .c/.cpp
CFLAGS = -I. # 头文件路径
# 查找所有源文件
CU_SRCS := $(wildcard *.cu)
CPP_SRCS := $(wildcard *.cpp)
C_SRCS := $(wildcard *.c)
# 生成目标文件(将 .cu, .cpp, .c 替换为 .o)
OBJS := $(CU_SRCS:.cu=.o) $(CPP_SRCS:.cpp=.o) $(C_SRCS:.c=.o)
# 最终生成的可执行文件
TARGET = output
# 默认规则,编译所有目标并链接
all: $(TARGET)
# 生成可执行文件(链接所有 .o 文件)
$(TARGET): $(OBJS)
$(NVCC) $(OBJS) -o $(TARGET)
# 仅编译所有源文件(生成 .o 文件但不链接)
compile: $(OBJS)
# 仅链接,使用所有 .o 文件
link: $(OBJS)
$(NVCC) $(OBJS) -o $(TARGET)
# 允许手动指定输入对象文件进行链接
link_only:
@if [ -z "$(filter-out $@,$(MAKECMDGOALS))" ]; then \
echo "Usage: make link_only file1.o file2.o ..."; \
else \
$(NVCC) $(filter-out $@,$(MAKECMDGOALS)) -o $(TARGET); \
fi
# 规则:编译 .cu 文件
%.o: %.cu
$(NVCC) $(CFLAGS) -c $< -o $@
# 规则:编译 .cpp 文件
%.o: %.cpp
$(CC) $(C