有木有Linux下的makefile的介绍

比如这个哈,完了会生成dsmcsg和dsmcsg_postprocessor两个可执行文件
但是这个makefile里面各个部分功能我还不清楚,而官方SDK里面的makefile好长,不如这个精简便捷,

我想深入学习一下,求教一下版上的各位前辈?

===================makefile===================
CUDA_HOME = /usr/local/cuda-5.0
CC = g++ -O3 -c
NVCC = nvcc -DUNIX -O3 -c --use_fast_math -arch sm_20
LINK=g++ -fPIC
INCLUDE := -I$(CUDA_HOME)/include
LIB := -L$(CUDA_HOME)/lib -lcudart

DSMCSG_FUNCTIONS_C = dsmcsg_main.o dsmcsg_class.o dsmcsg_init.o dsmcsg_output.o dsmcsg_readfile.o
DSMCSG_FUNCTIONS_CUDA = dsmcsg_cudafunction.o scanLargeArray_kernel.o

all : dsmcsg dsmcsg_postprocessor

dsmcsg : ${DSMCSG_FUNCTIONS_C} ${DSMCSG_FUNCTIONS_CUDA}
${LINK} -o dsmcsg ${DSMCSG_FUNCTIONS_C} ${DSMCSG_FUNCTIONS_CUDA} ${LIB}

dsmcsg_postprocessor : dsmcsg_postprocessor.o
${LINK} -o dsmcsg_postprocessor dsmcsg_postprocessor.o

dsmcsg_main.o : dsmcsg_main.cpp
${CC} -c dsmcsg_main.cpp ${INCLUDE}

dsmcsg_class.o : dsmcsg_class.cpp
${CC} -c dsmcsg_class.cpp

dsmcsg_init.o : dsmcsg_init.cpp
${CC} -c dsmcsg_init.cpp

dsmcsg_cudafunction.o : dsmcsg_cudafunction.cu
${NVCC} -c dsmcsg_cudafunction.cu ${INCLUDE}

scanLargeArray_kernel.o : scanLargeArray_kernel.cu
${NVCC} -c scanLargeArray_kernel.cu ${INCLUDE}

dsmcsg_output.o : dsmcsg_output.cpp
${CC} -c dsmcsg_output.cpp

dsmcsg_readfile.o : dsmcsg_readfile.cpp
${CC} -c dsmcsg_readfile.cpp

dsmcsg_postprocessor.o : dsmcsg_postprocessor.cpp
${CC} -c dsmcsg_postprocessor.cpp

clean :
rm -f dsmcsg dsmcsg_postprocessor *.o

clean_dat :
rm -f *.dat

==============END==========================
下面是文件列表
[attach]2815[/attach]

求一个关于makefile的类似下面代码的注释

#include
#include<stdio.h>
global void VecAdd(float *A,float *B,float *C)
{
int i = threadIdx.x;
if(i<5)//防止越界
C[i] = A[i] + B[i];
//等待全部计算完成
__syncthreads();
}

int main()
{
//定义变量
float A[5], B[5], C[5];
float *dev_a,*dev_b,*dev_c;

 //在GPU上开辟内存空间

cudaMalloc((void **)&dev_a,5sizeof(int));
cudaMalloc((void **)&dev_b,5
sizeof(int));
cudaMalloc((void **)&dev_c,5*sizeof(int));

 //生成数组值

for (int j = 1; j < 6; j++)
{
A[j-1] = j;
B[j-1] = j;
}
//显示到屏幕
printf(“%f %f %f %f %f\n”,A[0],A[1],A[2],A[3],A[4]);
printf(“%f %f %f %f %f\n”,B[0],B[1],B[2],B[3],B[4]);

//将目前位于内存里的A、B数组复制到GPU显存里
cudaMemcpy(dev_a,A,5sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(dev_b,B,5
sizeof(int),cudaMemcpyHostToDevice);

 //GPU上计算

VecAdd<<<1, 5>>>(dev_a,dev_b,dev_c);

//将GPU显存上的计算结果复制到CPU内存里
cudaMemcpy(C,dev_c,5*sizeof(int),cudaMemcpyDeviceToHost);

 //显示到屏幕

printf(“%f %f %f %f %f\n”,C[0],C[1],C[2],C[3],C[4]);

 //释放GPU内存

cudaFree(dev_a);
cudaFree(dev_b);
cudaFree(dev_c);
return 0;
}

楼主,您的问题和cudazone的主旨完全无关,注意是完全无关。

作为一般性的介绍,建议您谷歌一下。

此外,make有bsd make的,gmake这最主要的2大方言,您看的时候注意区分一下。2者很多地方是不太一样的,注意识别。:slight_smile:

本帖子将在您回复后,或者3天之后,移动到灌水区。希望您理解。

好吧,主要是我做为新人,很多常识性的东西不懂,身边也没人教,就来问问咯

我搜了一下,这方面的资料确实不好找哦。。。

楼主你可以去这里:

http://www.gnu.org/software/make/

这是gmake的(linux下一般常用的就是这个)。

谢谢这就很有用了呢