技术开发 频道

用cmake搭建环境来编译一个CUDA程序

  4 FindCudaLibrary.cmake

# - Try to find CUDA

# Once done
this will define

# neek known the var ENV CUDA_BIN_PATH and ENV NVSDKCUDA_ROOT

#  

#  CUDA_FOUND        
- system has CUDA

#  CUDA_INCLUDE_DIR  
- the include directory

#  CUDA_LIBRARY_DIR  
- the directory containing the libraries

#  CUDA_LIBRARIES    
- Link these to use CUDA

#  

IF( WIN32 )

  # 寻找CUDA库路径

  FIND_PATH( CUDA_LIBRARY_DIR

NAMES cublas.lib cudart.lib cufft.lib

PATHS $ENV{CUDA_BIN_PATH}
/../lib

  )

  # 寻找CUDA头文件路径

  FIND_PATH( CUDA_INCLUDE_DIR

NAMES cuda.h cublas.h cufft.h

PATHS $ENV{CUDA_BIN_PATH}
/../include

  )

  # 寻找CUDA SDK库路径

  FIND_PATH( CUDA_SDK_LIBRARY_DIR

NAMES cutil.lib glut32.lib

PATHS $ENV{NVSDKCUDA_ROOT}
/common/lib

  )

  # 寻找CUDA SDK头文件路径

  FIND_PATH( CUDA_SDK_INCLUDE_DIR

NAMES cutil.h cutil_gl_error.h

PATHS $ENV{NVSDKCUDA_ROOT}
/common/inc

  )

ELSE( WIN32 )

ENDIF( WIN32 )

SET( CUDA_FOUND FALSE )

IF ( CUDA_INCLUDE_DIR AND CUDA_LIBRARY_DIR )

  SET ( CUDA_FOUND TRUE )

  SET ( CUDA_INCLUDE_COMMAND_DIR

    
-I${CUDA_INCLUDE_DIR}

    
-I${CUDA_SDK_INCLUDE_DIR}

    )

  SET ( CUDA_INCLUDE_DIR

    ${CUDA_INCLUDE_DIR}

    ${CUDA_SDK_INCLUDE_DIR}

    )

  SET( CUDA_LIBRARY_DIR

${CUDA_LIBRARY_DIR}

${CUDA_SDK_LIBRARY_DIR}

)

  SET ( CUDA_LIBRARIES cutil32D.lib cudart.lib cufft.lib cublas.lib cuda.lib )

ENDIF ( CUDA_INCLUDE_DIR AND CUDA_LIBRARY_DIR )

   5 把所需要的dll文件放在生成exe文件的目录下。

  6 由于编译cpp文件时,用到的是 /MDd 选项,而cu文件用到的是 /MTd 选项。这两个选项不统一会出现链接错误。改掉一个设置,统一起来就行了。

  7 template_kernel.cu 文件不用编译,所以要改一个这文件的编译选项。让这个文件变成 “从生成中排掉”

  五 总结

  虽然用写cmake很复杂,但对以后就比较简单了。不过如果只在windows底下写程序的话,还是用别人的工具比较好用。如果跨平台的话,还是写个cmake文件吧。这次写的cmake文件还是有很多限制的。在好多规定的条件下才能执行成功。而且也没有在linux底下的代码。如果下次有机会的话,会补上的。

0
相关文章