c++ - 为什么 cmake add_dependencies 不适用于带有 CUDA 代码的库?

标签 c++ cmake cuda

在 cmake 中,您可以使用 add_dependencies 来确保一个库是最新的并且先于另一个库构建。这对于具有 C++ 源代码的库(示例代码中的 myLib)非常适用,但它不适用于具有 CUDA 源代码的库(示例代码中的 myCudaLib)。

首先,我确保所有库都已构建。当我现在更改 myLib 的文件并构建 mainExec 时,myLib 会在它之前自动重建。如果我用 myCudaLib 尝试同样的事情,它只会告诉我所有项目都是最新的。

有谁知道为什么没有检测到更改并且没有使用 CUDA 文件重建库?

cmake_minimum_required(VERSION 3.13)

project(cmakeTest LANGUAGES CXX CUDA)

add_executable(mainExec main.cpp)

add_library(myLib foo.h foo.cpp)
add_dependencies(mainExec myLib)
target_link_libraries(mainExec PRIVATE myLib)

add_library(myCudaLib foo.cuh foo.cu)
add_dependencies(mainExec myCudaLib)
target_link_libraries(mainExec PRIVATE myCudaLib)

源文件不包含任何重要内容,只有一个函数 void foo() 和一个空主体(或者当我更改它们以查看库是否重建时的单个变量)。

以防万一:Windows 10、Visual Studio 2017、Cmake 3.13、Cuda 10.0

最佳答案

Visual Studio 未检测到 CUDA 文件更改的行为是由 CUDA 10.0(显然还有一些以前的版本)与 Visual Studio 2017(2015 工作正常)的交互中的错误引起的。如果您的项目位于某些文件夹(C:\ProgramDataC:\Users\userName\AppData\Local),则不会出现这种情况。可以在 NVIDIA 论坛上找到完整的讨论 here .

CUDA 10.1 修复了该错误(NVIDIA 尚未确认,但似乎对论坛上的某些人有效,对我也有效)。

关于c++ - 为什么 cmake add_dependencies 不适用于带有 CUDA 代码的库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54933611/

相关文章:

c++ - CMake 制作的 Emscripten 库无法链接

cuda - 使用带步幅的推力计数迭代器

visual-studio - 如何在 Visual Studio 2010 中启用 CUDA .cu 文件的语法高亮显示?

c++ - 如何避免在 C++ 中将 const_cast 与 std::vector::erase() 一起使用?

c++ - 比较两个 vector 元素并得到 EXC_BAD_ACCESS(code=1, address = 0x0) 错误

c++ - 在不同处理器之间共享内存时需要哪些东西?

CUDA 矩阵乘法写入错误的内存位置

c++ - 自动将 A* 转换为 B*

c++ - CMake 和 Visual Studio : How to get a quick, 安静的命令行构建?

cmake - 为什么 CMake 区分 "target"和 "command"?