2015-04-19 4 views
3

TL; DR:

Как я могу убедить Nsight, что я использую C++ 11? Другими словами, где установить соответствующие параметры обнаружения? Работа с -std = C++ 11 работает даже изнутри Eclipse. Я говорю о том, что Indexer имеет проблемы с определениями.Затмение/Nsight (7,0) и C++ 11 Поддержка

Longer версия:

C++ 11 функции помечены как нерешенным в редакторе Nsight, потому что __cplusplus определить является 199711L, а что-то> = 201103L.

Когда я сделал проект, в Project Properties > Build > Discovery Options параметр Automate discovery of Path and Symbols был проверен на каждый язык и каждую конфигурацию сборки. В нижней части окна «Свойства» была заметка, в которой говорилось, что метод обнаружения устарел, поэтому я снял флажок для каждого языка и для каждой конфигурации сборки.

В настоящее время под Project Properties > General > Preprocessor Include Paths, Macros etc. имеются пути, предоставляемые системой, и определяет (точнее, предоставленные Провайдерами). В списке я вижу проблематичный __cplusplus. Я могу переопределить его под CDT пользователя Настройка Записи и это действительно будет новое значение после восстановления индекса, но всякий раз, когда я нажимаю что-то в редакторе я получаю сообщение об ошибке:

An internal error occurred during: "Notifying selection listeners". 
org.eclipse.cdt.internal.core.index.composite.CompositingNotImplementedError 

Этот путь является тупиковым очевидно. Другой вариант - определить новый __cplusplus в Project Properties > General > Paths and Symbols на вкладке «Символы». Я также вижу «неправильный» __cplusplus. Переопределяя его, вы получаете ту же ошибку, что и выше, после восстановления индекса при нажатии в редакторе.

Кроме того, какой адский поставщик CDT Managed Build Setting Entries? Я не вижу никаких вариантов для этого. Где он настроен?

Когда я пытаюсь использовать провайдер CDT GCC Built-in Compiler Settings, я вижу поле, где я могу вводить аргументы командной строки, но поместить -std = C++ 11 не имеет никакого эффекта, поскольку эта запись не создает определение __cplusplus.

Offtopic:

В других новостях, поддержка C++ 11 является большим с CUDA Toolkit 7.0, в командной строке и в Makefiles. Меня сильно огорчает, что nVidia поселилась на Eclipse. Что бы я ни делал с этим, я столкнулся с проблемой Eclipse. Мне нужна неделя, чтобы настроить IDE для проекта. Я так сильно его ненавижу.

+1

Если вам не нравится Eclipse, почему бы вам не использовать другую среду IDE? Вы можете использовать любую IDE, которую хотите. Кроме того, вы попробовали то, что предлагается [здесь] (http://stackoverflow.com/questions/9131763/eclipse-cdt-c11-c0x-support) и [здесь] (http://stackoverflow.com/questions/17131744/затмение-CDT-индексатор-делает-не-знаю-с11-контейнеры)? –

+1

Я ненавижу Eclipse, но я не использую другую среду IDE, потому что Eclipse (Nsight) является частью CUDA Toolkit. Я не думаю, что какая-либо другая среда IDE распознала бы ядра CUDA и соответствующим образом выделила бы синтаксис. Не говоря уже о поддержке отладки с cuda-gdb, как это делает Nsight. Помимо этого, я попробовал эти предложения. Большинство из них относятся к более старой версии, и некоторые из них даже предлагают те же самые вещи, которые я описал выше. И когда я их делаю, я получаю ошибку, которую я написал выше. – Alfis

+1

У меня такая же проблема. Вы решили это? – Flamefire

ответ

2

Я столкнулся с аналогичной проблемой с индексом при использовании собственного компилятора; однако кросс-компилятор работал правильно. При использовании собственного компилятора __cplusplus был определен как 199711L, хотя диалект C++ был установлен на C++ 11 и индекс перестроен.

индексатор может подобрать настройки C++ 11, перейдя в

Project Settings-> C/C++ Общие-> Preprocessor Include Paths, Макросы и т.д. .-> Providers-> CDT GCC Встроенный компилятор Настройки

и делают:

  1. Uncheck Использование глобального поставщика совместно проектов.
  2. Добавить -std=c++11 в командованию, чтобы получить компилятор спецификации так:

    ${COMMAND} -std=c++11 ${FLAGS} ...

__cplusplus теперь должны быть правильно установлены.

+0

Какой из них вы имеете в виду с собственным компилятором? GCC? – Alfis

+0

Я имею в виду версию GCC, которая генерирует двоичные файлы для системы, запускающей компилятор. В моем случае собственный компилятор - это GCC, работающий на ноутбуке x86_64; а не кросс-компилятор, который в моем случае создает двоичные файлы ARM. – wandns

+0

Я не могу попробовать, поскольку у меня больше нет Eclipse. Надеюсь, что это правильные решения, а не что-то особенное. – Alfis