Я никогда раньше не слышал о Cuda, но из онлайн-документации выглядит так, как будто X.cu предполагается скомпилировать в X.o, поэтому иметь helloWorld.cu и helloWorld.cpp не очень хорошая идея. С вашего разрешения я переименую «ядро» в helloKernel.cu, тогда это должно работать:
NVCC = nvcc
helloWorld.o: helloWorld.cpp helloWorld.h
$(NVCC) -c %< -o $@
helloKernel.o: helloKernel.cu
$(NVCC) -c %< -o $@
helloWorld: helloWorld.o helloKernel.o
$(NVCC) %^ -o $@
(Обратите внимание, что эти первые пробелы являются символами табуляции.)
Если это работает, попробуйте более гладкую версию:
NVCC = nvcc
helloWorld.o: %.o : %.cpp %.h
helloKernel.o: %.o : %.cu
%.o:
$(NVCC) -c %< -o $@
helloWorld: helloWorld.o helloKernel.o
$(NVCC) %^ -o $@