У меня есть проект, в котором много файлов .cpp. В основном для тестирования я предпочитаю компилировать эти файлы .cpp как файлы CUDA.
Я могу перезаписать язык, автоматически определенный CMake, таким образом для каждого файла.
... loop of ${TEST_FILE} (from a list list of cpp files)
set(TEST_EXE "${TEST_FILE}.x")
add_executable(${TEST_EXE} ${TEST_FILE})
if (FORCE_CUDA)
set_source_files_properties(${TEST_FILE} PROPERTIES LANGUAGE CUDA)
endif ()
...
Существует ли глобальная настройка, с помощью которой я могу указать CMake компилировать файлы .cpp, как если бы они были источниками .cu (CUDA)?
Есть связанный с этим вопрос Как скомпилировать C++ как CUDA с использованием CMake, но он отвечает только на отдельные или явные списки файлов (необходимо set_source_file_properties во всех местах длинных и вложенных в подкаталог файлов CMake).
Обратите внимание: если вы хотите создать отдельный исполняемый файл для каждого исходного файла, вам понадобится цикл foreach, даже если глобальная настройка CUDA существует.
@talonmies, это умно, но звучит как кроличья нора боли; все параметры CUDA (архитектуры, стандарты, предупреждения) также необходимо будет передать.
@Цыварев, правда. Возможно, есть опция «постскриптум», позволяющая преобразовать все исполняемые файлы, накопленные до конца CMake, для просмотра их свойств в CUDA LANGUAGE. Однако фундаментальная проблема заключается в том, что LANGUAGE является свойством исходного файла, а не целевого исполняемого файла.
@alfC: Я не понимаю. Если у вас есть код C++, он по определению не содержит кода CUDA, который требует каких-либо настроек архитектуры и т. д. Поэтому он не может заставить компилятор передать компилятору кода устройства что-либо, что потребовало бы какой-либо из этих опций.
@talonmies, это хороший момент. Однако последовательная настройка других параметров может быть затруднена (оптимизация, предупреждения и т. д.). Основная идея состоит в том, чтобы доказать, что библиотека компилируется (через все тесты) не только с помощью компилятора C++, но и с помощью конкретного компилятора CUDA (например, nvcc, cuda clang, nvhpc и т. д.).
@talonmies: Я думаю, что ваша идея не сработает, потому что существуют механизмы CMake, специфичные для CUDA, которые не существуют для C++, такие как обработка компиляции разделяемых устройств, архитектуры и т. д. - и вы не можете заставить это работать с помощью «передача вариантов», как предлагает alfC.
@einpoklum здесь нет кода CUDA. Это простой C++, который ОП по какой-то причине хочет передать через набор инструментов CUDA.





Изучив документацию CMake в поисках чего-то значимого, я пришел к выводу, что в настоящее время это невозможно, и вам придется устанавливать язык файл за файлом.
Не могли бы вы установить для CMAKE_CXX_COMPILER значение nvcc, а затем для CXXFLAGS включить ключ -x cu?