检查makefile中是否有nvcc可用

时间:2014-07-06 19:16:35

标签: cuda compilation makefile nvcc

我在应用程序中有两个版本的函数,一个在CUDA中实现,另一个在标准C中实现。它们在单独的文件中,让我们说 cudafunc.h func.h (实现在 cudafunc.cu func.c )。我想在编译应用程序时提供两个选项。如果此人安装了nvcc,则会编译 cudafunc.h 。否则,它将编译 func.h

无论如何检查机器是否在makefile中安装了nvcc,从而相应地调整编译器?

非常感谢,

2 个答案:

答案 0 :(得分:2)

你可以试试条件,比如

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以决定要包含哪个标头以及要调用哪个接口。

答案 1 :(得分:0)

这应该有效,包含在Makefile中:

        NVCC_RESULT := $(shell which nvcc 2> NULL)
        NVCC_TEST := $(notdir $(NVCC_RESULT))
ifeq ($(NVCC_TEST),nvcc)
        CC := nvcc
else
        CC := g++
endif
test:
        @echo $(CC)

对于GNU make,配方行(test:之后)实际上以制表符开头。

使用上面的序言,您可以使用基于CC变量的conditionals来控制Makefile的剩余部分。

您可以将test:目标更改为您想要有条件地构建的目标。

作为测试,只需使用make运行上述内容即可。您应该根据检测到的内容获得nvccg++的输出。