2016-03-15 14 views
5

Giả sử tôi có tệp, hãy gọi nó là foo.cpp, mục tiêu của tôi là biên dịch tệp này bằng nvcc ở chế độ cuda. Từ dòng lệnh này có thể dễ dàng thực hiện bằng cách gọi:CMake + Cuda: biên dịch tệp cpp ở chế độ Cuda (--x = cu)

nvcc --x=cu foo.cpp

Những gì tôi đang phải vật lộn với, là để có được CMake để làm điều tương tự chính xác này. Nó chỉ ra rằng lệnh CMake cuda_add_executable(foo foo.cpp) sẽ lọc các tệp * .cpp và sử dụng trình biên dịch C++ - (thay vì nvcc).

Lưu ý rằng việc đổi tên tất cả các tệp thành * .cu không phải là tùy chọn vì codebase cũng phải hỗ trợ các bản dựng không phải cuda.

+0

Bạn có thể thử đặt trình biên dịch CMAKE g ++ và đặt cờ không? – xhg

Trả lời

4

Trong FindCUDA source code Tôi đã tìm thấy tùy chọn để kích hoạt biên dịch CUDA cho các tệp không phải là .cu cụ thể. Mặc dù có vẻ như tài liệu thiếu (bên ngoài mã nguồn).

Bạn có thể đặt CUDA biên soạn trên mỗi tập tin cấp với

set_source_files_properties(foo.cpp PROPERTIES CUDA_SOURCE_PROPERTY_FORMAT OBJ) 

trong cmake 3.3 hay muộn.

Phần còn lại làm việc như bình thường:

cuda_add_executable(foo foo.cpp) 

Trên thực tế, tôi mong đợi có phải là một giải pháp dễ dàng như sử dụng CUDA_NVCC_FLAGS hoặc cuda_add_executable(... OPTIONS --x=cu) để vượt qua --x=cu cờ trong Thật không may, nó không hoạt động.. Lý do có lẽ là phạm vi cho một cài đặt ở cấp đó sẽ không hữu ích, vì nó sẽ ảnh hưởng đến tất cả các tệp.

Các vấn đề liên quan