cuda 和 C++ 文件混编Makefile 实现

本文详细介绍了如何使用Makefile结合CUDA nvcc编译器和GCC g++编译器进行CUDA C++与C++代码的混合编译,包括设置环境变量、定义目标文件、依赖关系及最终可执行文件的生成过程。特别强调了在.cu和.cpp文件间正确使用extern C声明以确保链接正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.PHONY: all clean

CUDA_LIB_DIR := /usr/local/cuda/lib64

LIBS += -lcudart
LIBS += -lcuda
CU_SRCS := $(wildcard *.cu)
CU_OBJS := $(CU_SRCS:%.cu=%.o)

C_SRCS := $(wildcard *.cpp)
C_OBJS := $(C_SRCS:%.c=%.o)

EXECUTABLE := hello

all : $(EXECUTABLE)

$(CU_OBJS):$(CU_SRCS)
        nvcc -c $^

$(C_OBJS):$(C_SRCS)
        g++ -c $^

$(EXECUTABLE):$(CU_OBJS) $(C_OBJS)
        g++ -o $@ $^ -L$(CUDA_LIB_DIR) $(LIBS)

clean:
        rm $(EXECUTABLE) $(CU_OBJS)

需要在 .cu 的函数实现和调用文件的声明处都对和函数加上 extern “C”。

.cu 文件中实现

extern "C" void fun()
{
    
}

在.cpp 中调用之前需要声明函数

extern "C" void fun();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值