在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
答案 0 :(得分:1)
Visual Studio无法检测到CUDA文件中的更改的行为是由于CUDA 10.0(显然是某些以前的版本)与Visual Studio 2017(2015工作正常)的交互中的错误引起的。如果您的项目位于某些文件夹(C:\ProgramData
和C:\Users\userName\AppData\Local
)中,则不会发生。可以在here上找到有关NVIDIA论坛的完整讨论。
CUDA 10.1修复了该错误(NVIDIA尚未确认,但似乎对论坛上的某些人有用,对我也有用)。