我一直在Linux上成功地开发我的CUDA程序,但是我也想支持Windows平台。然而,我一直在努力正确编译它。我使用:
- Windows 10
- Cmake 3.15
- Visual Studio 2017
- CUDA Toolkit 10.1
当使用旧的弃用Cmake CUDA支持方式 find_package(CUDA 10.1 REQUIRED)
时,它会正确地报告工具包的路径。然而,据我的理解,最新的Cmake不再正确支持旧方法,并且cuda_add_library
等方法不能正确链接。因此,我根据这篇文章重格式化了我的'CMakeLists.txt'文件:
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(myproject LANGUAGES CXX CUDA)
add_library(mylib SHARED mycudalib.cu)
# My code requires C++ 11 for the CUDA library, not sure which ones of these
# will do the trick correctly. Never got the compiler this far.
target_compile_features(mylib PUBLIC cxx_std_11)
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CUDA_STANDARD 11)
set_target_properties( mylib PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
add_executable(test_mylib test.cpp)
target_link_libraries(test_mylib mylib ${CUDA_CUFFT_LIBRARIES})
然而,在第二行我遇到了以下错误:
CMake Error at C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCompilerId.cmake:345 (message):
No CUDA toolset found.
Call Stack (most recent call first):
C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCompilerId.cmake:32 (CMAKE_DETERMINE_COMPILER_ID_BUILD)
C:/Program Files/CMake/share/cmake-3.15/Modules/CMakeDetermineCUDACompiler.cmake:72 (CMAKE_DETERMINE_COMPILER_ID)
CMakeLists.txt:2 (project)
我曾尝试了一些网上的建议,例如在“CMakeLists.txt”中添加以下内容:
set(CMAKE_CUDA_COMPILER "C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v10.1/bin/nvcc")
或者在CMake中添加以下变量:
![enter image description here](https://istack.dev59.com/R3ldw.webp)
这是我在Linux上成功编译所使用的'CMakeLists.txt'文件。区别在于我使用了CMake 3.5和CUDA Toolkit 9.0:
cmake_minimum_required(VERSION 3.5)
project( myproject)
find_package(CUDA 9.0 REQUIRED)
if(CUDA_FOUND)
list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
endif(CUDA_FOUND)
cuda_add_library(mylib SHARED mycudalib.cu)
cuda_add_executable(test_mylib test.cpp)
target_link_libraries(test_mylib mylib ${CUDA_CUFFT_LIBRARIES})
C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v10.2 \ extras \ visual_studio_integration \ MSBuildExtensions
),您将找到您列出的4个文件。您需要将这些文件复制到您列出的MS Visual Studio文件夹中。 - A. Hendry