Поддержка Eclipse / Nsight (7.0) и C ++ 11

TL;DR:

Как мне убедить Nsight, что я использую C ++ 11? Другими словами, где мне установить соответствующие параметры обнаружения? Сборка с -std = c ++ 11 работает даже из Eclipse. Я говорю о проблемах индексатора с определениями.

Более длинная версия:

Функции 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 Provider, я вижу поле, в котором я могу вводить аргументы командной строки, но установка -std = c ++ 11 не имеет никакого эффекта, поскольку эта запись не создает определение __cplusplus.

Не по теме:

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


person Alfis    schedule 19.04.2015    source источник
comment
Если вам не нравится Eclipse, почему бы вам не использовать другую IDE? Вы можете использовать любую IDE, какую захотите. Кроме того, пробовали ли вы то, что предлагается здесь и здесь?   -  person m.s.    schedule 19.04.2015
comment
Я ненавижу Eclipse, но я не использую другую IDE, потому что Eclipse (Nsight) является частью CUDA Toolkit. Я не думаю, что какая-либо другая IDE распознала бы ядра CUDA и соответственно выделила бы синтаксис. Не говоря уже о поддержке отладки с помощью cuda-gdb, как это делает Nsight. Кроме того, я попробовал эти предложения. Большинство из них относятся к более старой версии, а некоторые даже предлагают те же вещи, что я описал выше. И когда я их делаю, я получаю ту ошибку, о которой писал выше.   -  person Alfis    schedule 19.04.2015
comment
У меня точно такая же проблема. Вы это решили?   -  person Flamefire    schedule 05.06.2015
comment
Не совсем. Забавно, что при использовании одного только GCC он работает, как ожидалось, с -std=c++11, но не с NVCC. Например, проект C ++ хорош с функциями C ++ 11, а проект CUDA - нет. Я перестала за ней ухаживать и выдержала несколько красных линий. Я компилирую его с помощью собственного make-файла. Через IDE вызывается только make all.   -  person Alfis    schedule 06.06.2015


Ответы (1)


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

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

Настройки проекта-> C / C ++ Общие-> Препроцессор, включая пути, макросы и т. Д .-> Провайдеры-> Настройки встроенного компилятора CDT GCC

и делаем:

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

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

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

person wandns    schedule 15.11.2015
comment
Что вы имеете в виду под родным компилятором? GCC? - person Alfis; 20.11.2015
comment
Я имею в виду версию GCC, которая генерирует двоичные файлы для системы, в которой запущен компилятор. В моем случае собственный компилятор - это GCC, работающий на ноутбуке x86_64; не кросс-компилятор, который в моем случае строит двоичные файлы ARM .. - person wandns; 22.11.2015
comment
Я не могу попробовать, так как у меня больше не установлен Eclipse. Я надеюсь, что это правильные решения, а не что-то конкретное для Nsight. - person Alfis; 27.11.2015