Unë kam një projekt C++/CUDA bazuar në CMake. Aktualisht po përdor CMake 3.11 dhe CUDA 9.0 dhe po lexoj se tani CUDA është një gjuhë e klasit të parë në CMake, kështu që thjesht mund të shtoj skedarë .cu
dhe ai automatikisht do të thërrasë përpiluesin NVCC për t'u kujdesur për to. Para kësaj, ne duhej të përdornim find_package(CUDA)
e kështu me radhë, por tani ky është një tipar i vjetëruar.
Tani shtrohet pyetja: si t'i përpilojmë skedarët normal .cpp
që ende përdorin bibliotekat pritëse CUDA? cudaMalloc
, cudaFree
, etj. Zgjidhja ime deri tani është set_source_files_properties(file.cpp PROPERTIES LANGUAGE CUDA)
por nuk mendoj se kjo është gjëja e duhur për të bërë. Meqenëse ky skedar nuk përmban kodin e pajisjes, ai duhet të përpilohet me përpiluesin GCC duke përfshirë dhe lidhur me bibliotekat CUDA.
Një çështje tjetër me këtë qasje është se ajo përhapet shumë shpejt në pjesën tjetër të projektit. Thuaj një skedar header që përcakton një strukturë që përmban një variabël dims3
, atëherë çdo skedar .cpp
që #include
s ky titull do të duhet të konsiderohet si një skedar CUDA.
include_directories
,link_directories
dhe bibliotekat pafind_package(CUDA)
. Por unë mund të shoh që ju përdorniCMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES
. Nga vjen kjo, a është gjithashtu pjesë e CMake standarde? Dhe cili është qëllimi iEXCLUDE_FROM_ALL
? Faleminderit! 31.10.2018