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 )
# 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底下的代码。如果下次有机会的话,会补上的。