繁体   English   中英

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

[英]Why does cmake add_dependencies not work for libraries with CUDA code?

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

首先,我确保所有库都已构建。 现在,当我更改myLib文件并构建mainExecmyLib将自动在其之前重新构建。 如果我使用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论坛的完整讨论。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM