[英]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.