[英]Why does cmake add_dependencies not work for libraries with CUDA code?
在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:\\ProgramData
和C:\\Users\\userName\\AppData\\Local
)中,则不会发生。 可以在此处找到有关NVIDIA论坛的完整讨论。
CUDA 10.1修复了该错误(尚未得到NVIDIA的确认,但似乎对论坛上的某些人有用,它也对我有用)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.