具體操作,修改qt項目配置文件pro,在配置后面加入如下代碼,我們就實現了qt+cuda的交叉編譯。
# 讓你的項目可以看到后綴cu的cuda代碼文件
OTHER_FILES += ?./Bll/ImageReconstruction/Cuda/CudaFDK.cu \
./Bll/ImageReconstruction/Cuda/CudaFDK_kernel.cu \
./Bll/ImageReconstruction/Cuda/CudaFDK_SS.cu \
./Bll/ImageReconstruction/Cuda/CudaFDK_SS_kernel.cu
# CUDA配置,具體按照你系統環境更改
CUDA_SOURCES += ./Bll/ImageReconstruction/Cuda/CudaFDK.cu \
./Bll/ImageReconstruction/Cuda/CudaFDK_kernel.cu \
./Bll/ImageReconstruction/Cuda/CudaFDK_SS.cu \
./Bll/ImageReconstruction/Cuda/CudaFDK_SS_kernel.cu
CUDA_SDK = "/usr/local/cuda-5.0/" ? # cudaSDK路徑
CUDA_DIR = "/usr/local/cuda-5.0/" ? ? ? ? ? ?# CUDA tookit路徑
SYSTEM_NAME = linux ? ? ? ? # 自己系統環境 'Win32', 'x64', or 'Win64'
SYSTEM_TYPE = 32 ? ? ? ? ? ?#操作系統位數 '32' or '64',
CUDA_ARCH = sm_21 ? ? ? ? ? # cuda架構, for example 'compute_10', 'compute_11', 'sm_10'
NVCC_OPTIONS = --use_fast_math
# include paths
INCLUDEPATH += $$CUDA_DIR/include
# library directories
QMAKE_LIBDIR += $$CUDA_DIR/lib/
CUDA_OBJECTS_DIR = ./
# The following library conflicts with something in Cuda
#QMAKE_LFLAGS_RELEASE = /NODEFAULTLIB:msvcrt.lib
#QMAKE_LFLAGS_DEBUG ? = /NODEFAULTLIB:msvcrtd.lib
# Add the necessary libraries
CUDA_LIBS = ?cudart cufft
# The following makes sure all path names (which often include spaces) are put between quotation marks
CUDA_INC = $$join(INCLUDEPATH,'" -I"','-I"','"')
NVCC_LIBS = $$join(CUDA_LIBS,' -l','-l', '')
#LIBS += $$join(CUDA_LIBS,'.so ', '', '.so')
# Configuration of the Cuda compiler
CONFIG(debug, debug|release) {
# Debug mode
cuda_d.input = CUDA_SOURCES
cuda_d.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cuda_d.commands = $$CUDA_DIR/bin/nvcc -D_DEBUG $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda_d.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda_d
}
else {
# Release mode
cuda.input = CUDA_SOURCES
cuda.output = $$CUDA_OBJECTS_DIR/${QMAKE_FILE_BASE}_cuda.o
cuda.commands = $$CUDA_DIR/bin/nvcc $$NVCC_OPTIONS $$CUDA_INC $$NVCC_LIBS --machine $$SYSTEM_TYPE -arch=$$CUDA_ARCH -O3 -c -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
cuda.dependency_type = TYPE_C
QMAKE_EXTRA_COMPILERS += cuda
}