CMake передает аргументы C ++ в nvcc - PullRequest
2 голосов
/ 21 июня 2020

Я работаю над проектом, в котором смешаны C ++ и CUDA. Кроме того, он связывает сторонние библиотеки, в частности, мы подозреваем, что эта проблема исходит от aws-sdk-c++.

Проблема в том, что когда мы связываемся с нашими библиотеками, которые используют AWS, флаг -pthread добавляется к варианты компиляции нашей цели. В нашем целевом проекте есть файлы .cpp и .cu, поэтому, когда nvcc компилируется и флаги передаются с хоста на компиляцию устройства, мы получаем

nvcc fatal : Unknown option 'pthread'

. много, проблема в том, что это решение часто либо использует более старый CMake, который использует CUDA_ADD_LIBRARY, в котором проблема не возникает, и можно установить CUDA_PROPAGATE_HOST_FLAGS=OFF, чтобы исправить это, либо это вопрос указания нарушающего pthread флаг в выражениях генератора, таких как

add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:${my_cxx_flags}>")
add_compile_options("$<$<COMPILE_LANGUAGE:CUDA>:${my_cuda_flags}>")

(взято из этого ответа) Это не вариант для нас, поскольку мы не включаем флаг pthread самим собой, а через сторонняя сторона, с которой мы связываемся.

Итак, я предполагаю, что мой вопрос в том, есть ли способ в современном CMake предотвратить распространение флагов хоста на nv cc или, возможно, удаление спецификаций c flags из nv cc, поскольку мы знаем, что вызывает наши проблемы.

Или любое другое решение, позволяющее нам компилировать файлы CUDA с использованием nv cc в библиотеке, которая связана с pthread

1 Ответ

3 голосов
/ 21 июня 2020

Похоже, что в CMake, смешанном с CUDA 10.0, была ошибка. Обновление до CMake 3.17.3, как было предложено здесь , не решило проблему, пока я не обновился до CUDA 10.2, в этом случае CMake 3.17.3 работал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...