【问题标题】:Cuda 9 RC + VS2017 + CMake not workingCuda 9 RC + VS2017 + CMake 不工作
【发布时间】:2018-02-04 21:03:24
【问题描述】:

我正在尝试使用 CMake 和 Visual Studio 2017 编译 CUDA 项目, 但构建失败,详情如下。

系统:
Windows 10 专业版 x64
Visual Studio Enterprise 2017 版本 15.3.2
CUDA 9 RC(版本 9.0.103)
CMake 3.9.1(生成器:Visual Studio 15 2017 Win64)

虚拟项目:

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.0)
project(vs17cuda)

# Cuda is always required
find_package(CUDA REQUIRED)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++11" )

add_subdirectory(src)

src/CMakeLists.txt

cuda_add_executable(vs17cuda main.cu)
set_target_properties(vs17cuda PROPERTIES CUDA_SEPARABLE_COMPILATION ON)
target_link_libraries(vs17cuda ${CUDA_LIBRARIES})

src/main.cu

#include <cuda_runtime.h>

__global__ void DummyKernel()
{
    //do nothing
}

int main (int argc, char * argv[]) {
    DummyKernel<<<4, 4>>>();
}

控制台输出:(德语消息翻译成英语)

1>------ Build started: Project: vs17cuda, Configuration: Debug x64 ------
1>Building NVCC (Device) object src/CMakeFiles/vs17cuda.dir/Debug/vs17cuda_generated_main.cu.obj
1>Failed to run C:/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/bin/cl.exe (File not found).
1>
1>).
1>CMake Error at vs17cuda_generated_main.cu.obj.Debug.cmake:222 (message):
1>  Error generating
1>  C:/Users/Sebastian/Documents/C++/vs17cuda/build/src/CMakeFiles/vs17cuda.dir//Debug/vs17cuda_generated_main.cu.obj
1>
1>
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(171,5): error MSB6006: "cmd.exe" exited with code 1.
1>Done building project "vs17cuda.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========

如何修复构建?

【问题讨论】:

    标签: c++ cmake cuda visual-studio-2017


    【解决方案1】:

    CUDA 现在似乎已与 CMake 完全集成。 FindCUDA 包中的函数(例如 cuda_add_executable)现在恢复为默认的 add_executable。 NVIDIA 最近的一篇博客文章详细说明了详细信息:here。我克隆了该帖子中链接到的 Github 存储库,它确实对我有用;虽然仅适用于 64 位版本。

    【讨论】:

    • 这对我有用。我还找到了另一个解决方案:让 MVCC 生成项目,每次 MVCC 编译器检测到 CMakeLists 中的更改时都会这样做。我不使用例如一代的 CMake GUI,除了最初的。
    猜你喜欢
    • 2018-02-17
    • 2017-06-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2016-12-26
    • 1970-01-01
    相关资源
    最近更新 更多