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

时间:2019-02-28 20:18:58

标签: 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)

源文件中没有任何重要内容,只有一个带有空主体(或者当我更改它们以查看是否重建了lib时为单个变量)的void foo()函数。

在必要的情况下:Windows 10,Visual Studio 2017,Cmake 3.13,Cuda 10.0

1 个答案:

答案 0 :(得分:1)

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

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