我在应用程序中有两个版本的函数,一个是用 CUDA 实现的,另一个是用标准 C 实现的。它们位于不同的文件中,比如说 cudafunc.h 和 func。 h (实现位于 cudafunc.cu 和 func.c 中)。我想在编译应用程序时提供两个选项。如果用户安装了 nvcc,它将编译 cudafunc.h。否则,它将编译func.h。
是否有办法检查机器是否在 makefile 中安装了 nvcc,从而相应地调整编译器?
非常感谢,
最佳答案
您可以尝试使用条件,例如
ifeq (($shell which nvcc),) # No 'nvcc' found
func.o: func.c func.h
HEADERS += func.h
else
func.o: cudafunc.cu cudafunc.h
nvcc -o $@ -c $< . . .
CFLAGS += -DUSE_CUDA_FUNC
HEADERS += cudafunc.h
endif
然后在调用该函数的代码中,可以测试#if USE_CUDA_FUNC
来决定包含哪个 header 以及调用哪个接口(interface)。
关于cuda - 检查 makefile 中 nvcc 是否可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599434/