Я пытаюсь использовать CMake для создания проекта Xcode и создания библиотеки CUDA с ним.
Код, который я использовал для сбора & Сборка библиотеки CUDA «caffe2_cpp_gpu» выглядит следующим образом:
list(APPEND CUDA_NVCC_FLAGS "-std=c++11" "-Wno-deprecated-gpu-targets")
file(GLOB CUDA_SOURCES "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.cu" )
cuda_add_library(caffe2_cpp_gpu STATIC ${CUDA_SOURCES})
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang++" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
list(APPEND ALL_LIBRARIES -Wl,-force_load caffe2_cpp_gpu)
else()
list(APPEND ALL_LIBRARIES -Wl,--whole-archive caffe2_cpp_gpu -Wl,--no-whole-archive)
endif()
Обратите внимание, что этот код можно запустить, если используется Unix Makefile.
Но не может работать, если Xcode используется.
В проекте показано, что файл отсутствует:
отсутствующий файл
И библиотека CUDA «caffe2_cpp_gpu» не может быть создана.
Кто-нибудь знает как это решить?
Я нашел ответ …
Если я добавлю другой тип файла (.cc, .h и т. Д.) В библиотеку CUDA, он будет работать. Похоже, что XCode не может собрать один файл .cu в статическую библиотеку (.a).
Итак, вот что я сделал:
file(GLOB All_SOURCE "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.cu" "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.cc" "${PROJECT_SOURCE_DIR}/source/caffe2/operator/*.h")
cuda_add_library(caffe2_lib ${All_SOURCE})
Вместо того, чтобы собирать библиотеку отдельно для CPU и GPU. Я объединяю их в один файл библиотеки.
Других решений пока нет …