2016-04-11 8 views
7

के साथ एनवीसीसी में सी ++ 11 समर्थन ट्रिगरिंग मैं CUDA 7.5 के साथ उबंटू 15.10 चला रहा हूं। सीएमएमके v3.2.2 है, एनवीसीसी 7.5 जारी है, v7.5.17; जीसीसी उबंटू 5.2.1-22ubuntu2 v5.2.1 हैसीएमके

नियमित परियोजनाओं में सी ++ 11 ट्रिगर के साथ आसान है:

project(foo CXX) 
set(TARGET foo CMAKE_CXX_STANDARD 11) 

मैं के साथ मेरी CUDA परियोजना को परिभाषित कर रहा हूँ:

find_package(CUDA REQUIRED) 
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu}) 

लेकिन सी ++ 11 समर्थन एनवीसीसी को प्रचारित नहीं किया जाता है। मुझे जोड़ना है:

list(APPEND CUDA_NVCC_FLAGS "-std=c++11") 

यह एक क्लज की तरह लगता है। हाल ही में this task के अनुसार इस पर काम किया गया था, लेकिन मैं परिणाम नहीं ढूंढ पा रहा हूं।

परियोजना को सी ++ 11 के रूप में घोषित करते समय सी ++ 11 ध्वज स्वचालित रूप से सेट करने के लिए सीएमके कैसे प्राप्त करें?

संपादित करें: मैं इस सवाल को CUDA 8.0 और सीएमके 3.5.1 के साथ पुनः प्राप्त कर चुका हूं।

documentation से, set(CUDA_PROPAGATE_HOST_FLAGS ON), CMAKE_CXX_FLAGS की सामग्री का प्रचार करेंगे तो निम्नलिखित सी दोनों सीपीपी और NVCC के लिए ++ 11 से चलाता है:

set (CMAKE_CXX_FLAGS "--std=c++11") 
set (CUDA_PROPAGATE_HOST_FLAGS ON) 

हालांकि, set(CMAKE_CXX_STANDARD 11)CMAKE_CXX_FLAGS को प्रभावित नहीं करता है, तो निम्नलिखित संकलक देता है सी ++ 11 डिवाइस कोड के लिए त्रुटियों, प्रचार करने के लिए कुछ भी नहीं है के रूप में:

set (CMAKE_CXX_STANDARD 11) 
set (CUDA_PROPAGATE_HOST_FLAGS ON) 

मुझे लगता है कि स्पष्ट रूप से स्थापित करने टाल 01 CMake आदेशों का एक संयोजन को खोजने के लिए नहीं कर पा रहे या तो CXX या CUDA झंडे में।

+0

चालू पर CUDA_PROPAGATE_HOST_FLAGS सेट करने का प्रयास (हालांकि यह डिफ़ॉल्ट रूप से चालू होने के लिए माना जाता है) और फिर साथ -std = C++ 11 CMAKE_CXX_FLAGS स्थापित करेगा। – Hopobcn

+0

चालू करने के लिए CUDA_PROPAGATE_HOST_FLAGS सेट करने का प्रयास किया। काम नहीं किया कमांड सेट (TARGET foo CMAKE_CXX_STANDARD 11) पहले से ही संकलक में C++ 11 समर्थन ट्रिगर करता है। उस के शीर्ष पर सेट (CMAKE_CXX_FLAGS "-std = C++ 11") जोड़ने के लिए अनावश्यक लगता है। –

+0

मुझे लगता है कि यह कार्यक्षमता आपके सेमेक संस्करण पर निर्भर करती है। मेरे मामले में cmake 3.5.0 सेटिंग 'CMAKE_CXX_FLAGS' के साथ '-std = C++ 11' के साथ और' CUDA_PROPAGATE_HOST_FLAGS' स्वचालित रूप से' --std C++ 11' (nvcc में) जोड़ने के लिए cmake को ट्रिगर करता है। – Hopobcn

उत्तर

1

सीएमके 3.8 के बाद से (चूंकि सीएमएडी एक भाषा के रूप में सीयूडीए का समर्थन करता है) एक नई लक्षित संपत्ति CUDA_STANDARD है। यद्यपि इसका नाम काफी उलझन में है, यह -std=XXX को nvcc संकलन आदेश में जोड़ता है।

हाल ही में एक CMake संस्करण के साथ

उचित तरीके से हो

cmake_minimum_required(3.8.2) 
enable_language(CUDA) 
add_executable(foo ${foo_src} ${foo_cu}) 
set_property(TARGET foo PROPERTY CUDA_STANDARD 11)