Eclipse indexer собственно С++ 11 подсветка синтаксиса при создании проектов с cmake
Я знаю, что вы можете включить правильную подсветку синтаксиса с помощью описанного здесь GXX_EXPERIMENTAL hack:
Eclipse CDT indexer не знает контейнеры С++ 11
Но я думаю, что при создании проектов с cmake никогда не нужно вообще прикасаться к настройкам проекта.
Итак. Есть ли более простое решение?
Ответы
Ответ 1
Ответ довольно прост.
Генератор eclipse cdt игнорирует определения, добавленные с помощью add_definitions (...) при анализе символов. Вместо этого он использует CMAKE_CXX_COMPILER_ARG1.
Итак, все, что вам нужно сделать: Добавить -DCMAKE_CXX_COMPILER_ARG1 = -std = С++ 11 при вызове cmake
Создание файлов проекта из командной строки:
cmake ../../src -G"Eclipse CDT4 - MinGW Makefiles" -DCMAKE_ECLIPSE_VERSION=4.2 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_ARG1=-std=c++11
Создание проектов из cmake gui:
- Select source and build directory.
- now BEFORE hitting configure or generate. Press "Add Entry" and add a new entry. Name:CMAKE_CXX_COMPILER_ARG1 Type:STRING Value:-std=c++11
- press Generate and create the Eclipse project
Важно настроить предварительный просмотр CMAKE_CXX_COMPILER_ARG1 перед тем, как нажать кнопку configure или сгенерировать первый раз!
Вот и все. Проект будет создан с правильными символами. индексатор, подсветка синтаксиса и автозаполнение должны работать по назначению без изменения настроек проекта вручную.
Ответ 2
Как уже упоминалось, вызов генераторов проекта выполняется до разбора CMakeLists.txt
.
Таким образом, любые определения внутри CMakeLists.txt
не влияют на сгенерированные файлы проекта.
В случае генерации eclipse-проекта возможности компилятора запрашиваются внутри CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake.
В строке 23 анализируется переменная CMAKE_CXX_FLAGS
, которая оценивается в строке 30.
Особенно эта переменная CMAKE_CXX_FLAGS
может быть установлена только при вызове cmake
из командной строки.
Резервирование надлежащей инсталляции cmake: cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_FLAGS="-std=c++11"
(или заменить c++11
, например, c++14
или любой другой стандарт, который вам нравится)
Подсказка:
Результат от оценки строки 30 можно увидеть из следующей команды: touch /tmp/dummy; /usr/bin/c++ -v -E -x c++ -std=c++11 -dD /tmp/dummy
. Он выводит все определения из компилятора, которые анализируются в проекте eclipse:
...
#define __STDC__ 1
#define __cplusplus 201103L
...
Ответ 3
В версии 3.1 cmake была введена новая переменная CMAKE_CXX_STANDARD, которая может активировать поддержку С++ 11. Попробуйте что-то вроде этого:
cmake ../../src -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_STANDARD=11
Это, похоже, переносится в сгенерированный проект Eclipse. Я попробовал это с помощью verison 3.2.0-rc2 и Eclipse распознал функции С++ 11, такие как std:: shared_ptr < > .
Некоторые ссылки на документацию: