Mac OS X下CUDA Host端的编译选项设定

为了方便编译,我们一般将一个CUDA项目放入nVidia所提供的samples的默认目录下。比如:/Developer/GPU/ Computing/C/src

一个项目中应该至少有一个Host端的C/C++源文件(.c/.cpp/.m/.mm等),一个Device端的CUDA文件(.cu/.ptx等)以及一个makefile。

在默认情况下,Host端的源文件是用g++来编译的。但我们可以通过修改makefile来指定用何编译器,用何选项来编译指定的源文件。

 

比如,我们有如下的一个makefile:

# Add source files here EXECUTABLE := zenny_basic # Cuda source files (compiled with cudacc) CUFILES := matrixMul.cu # C/C++ source files (compiled with gcc / c++) CCFILES := / test.cpp ################################################################################ # Rules and targets include ../../common/common.mk

 

上面有几个脚本变量说明一下:

CUFILES指明目标cuda源文件;

CCFILES指明目标C++源文件。这里要注意的是CCFILES总是以g++编译器去编译,不管你后面指定的源文件的后缀名是.c还是.cpp或其它。

上面我们指定了一个matrixMul.cu的CUDA源文件以及一个test.cpp源文件用g++去编译。

那么如果我们要以gcc,并且使用C99标准+GNU编译器扩展去编译一个test.c文件,我们该如何做呢?

下面给出这个这个make脚本:

# Add source files here EXECUTABLE := zenny_basic # Cuda source files (compiled with cudacc) CUFILES := matrixMul.cu # C/C++ source files (compiled with gcc / c++) CFILES := / test.c CFLAGS += -std=gnu99 ################################################################################ # Rules and targets include ../../common/common.mk

这边我们可以看到两个新的变量:

CFILES用于指明后面所指定的源文件用gcc去编译;

CFLAGS用来指定gcc编译器的编译选项。

以上变量都将在common.mk中被引用。

 

另外要注意的是,用gcc或g++编译好的函数在用nvcc中编译的源文件中调用前都要使用extern "C"去声明。

 

如果我们要将一个cuda源文件编译为一个ptx文件,可以采取如下命令:

/usr/local/cuda/bin/nvcc --ptx cudafilename.cu

你可能感兴趣的:(OS,gcc,CUDA,脚本,makefile,编译器)