2016-03-15 27 views
5

Supponiamo di avere un file, chiamiamolo foo.cpp, il mio obiettivo è compilare questo file con nvcc nella modalità cuda. Dalla linea di comando può essere facilmente realizzata invocando:CMake + Cuda: compila file cpp in modalità Cuda (--x = cu)

nvcc --x=cu foo.cpp

Quello che sto lottando con, è quello di ottenere CMake per fare questa stessa cosa esatta. Si scopre che il comando di CMake cuda_add_executable(foo foo.cpp) filtrerà i file * .cpp e userà il compilatore C++ (invece di nvcc).

Nota che la ridenominazione di tutti i file in * .cu non è un'opzione in quanto il codebase deve supportare anche le versioni non-cuda.

+0

Puoi provare a impostare il compilatore g ++ di CMAKE e impostare il suo flag? – xhg

risposta

4

Nel FindCUDA source code ho trovato un'opzione per attivare la compilazione CUDA per specifici file non .cu. Anche se sembra mancare la documentazione (al di fuori del codice sorgente).

È possibile impostare la compilazione CUDA a livello di singolo file con

set_source_files_properties(foo.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ) 

in CMAKE 3.3 o successiva.

Il resto funziona come al solito:

cuda_add_executable(foo foo.cpp) 

In realtà, mi aspettavo ci dovrebbe essere una soluzione facile come l'utilizzo di CUDA_NVCC_FLAGS o cuda_add_executable(... OPTIONS --x=cu) per passare il flag --x=cu in Purtroppo, non funziona.. Probabilmente il motivo è che l'ambito per un'impostazione a quel livello non sarebbe utile, dal momento che interesserebbe tutti i file.