У меня есть проект Visual C ++, который создает dll. Для этого проекта у меня есть рабочий файл CMakeLists.txt.
Теперь я создал два исходных файла cuda, которые завершают проект, и с Visual Studio сборка работает нормально. Я хочу добавить соответствующие команды в свой файл cmake. Может ли кто-нибудь сказать мне, какие основные команды мне нужно добавить?
Я пытаюсь создать библиотеку dll, в которой я использую файлы .cu и .cpp .... Важная часть моего файла cmake выглядит так:
# ----------------------------------------------------------------------------
# Set Cuda properties
# ----------------------------------------------------------------------------
enable_language(CUDA)
set(CUDA_SEPARABLE_COMPILATION ON)
set(CUDA_PROPAGATE_HOST_FLAGS OFF)
if (CMAKE_SIZEOF_VOID_P MATCHES 8)
set(CUDA_64_BIT_DEVICE_CODE_DEFAULT ON)
endif()
set(CUDA_NVCC_FLAGS "-gencode arch=compute_50,code=sm_50;-rdc=true;-use_fast_math")
message(STATUS "CUDA_PROPAGATE_HOST_FLAGS: ${CUDA_PROPAGATE_HOST_FLAGS}")
message(STATUS "CUDA_HOST_COMPILER: ${CUDA_HOST_COMPILER}")
message(STATUS "CUDA_NVCC_FLAGS: ${CUDA_NVCC_FLAGS}")
# ----------------------------------------------------------------------------
# Create shared library project
# ----------------------------------------------------------------------------
add_library(${LIB_NAME} SHARED ${HEADERS} ${SOURCES} ${CUDA_SOURCES})
set(CUDA_LIBRARIES "cudadevrt.lib;cudart.lib")
target_link_libraries(${LIB_NAME} ${CUDA_LIBRARIES})
Но он не компилирует файлы cuda с правильными флагами. Также в Visual Studio определения препроцессора также находятся в части свойств cuda .... какие-либо предложения?
find_package(CUDA)
. Теперь CUDA поддерживается CMake как язык (такой же, какC
,CXX
илиFortran
), поэтому квитанция изменена. Пока на указанный вопрос не будет получен ответ в новом CMake, я бы предпочел не дублировать его. К сожалению, я не очень хорошо знаю CUDA, поэтому не могу подготовить такой ответ. - person Tsyvarev   schedule 11.04.2018enable_language(CUDA)
в своем проекте. Тем не менее, я по-прежнему предлагаю использовать функции / переменные серииfind_package(CUDA)
, поскольку мне сложно найти какой-либо документ о том, как связать / включить другие библиотеки / заголовки cuda, такие как npp, curand и т. Д. - person halfelf   schedule 11.04.2018find_package(CUDA)
сначала мне не нужноCMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
для заголовков, и мне также не нужноfind_library()
для каждой cuda lib, поскольку они были установлены какCUDA_xxx_LIBRARY
переменные. Новая функция кажется мне немного более сложной, чем стараяfind_package(cuda)
, или, может быть, я скучаю по чему-то? - person halfelf   schedule 11.04.2018.cu
, только если вы вызываете API времени выполнения CUDA из файла _2 _ / _ 3_. Что касается библиотек, это правда, они не предопределены, но вы всегда можете сделать для них небольшой сценарий-оболочку и включить его во все свои проекты. - person gflegar   schedule 12.04.2018findCUDA
пакет или встроенную поддержку?CUDA_NVCC_FLAGS
- это переменная, используемаяfindCUDA
, встроенная поддержка CUDA вместо этого используетCMAKE_CUDA_FLAGS
. Да, наличие двух вариантов очень сбивает с толку, поэтому вы должны быть осторожны в своих действиях. - person gflegar   schedule 14.04.2018