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 < > .

Некоторые ссылки на документацию: