gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:23:39 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com