В 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