2013-08-21 6 views

risposta

19

La risposta è piuttosto semplice.

Il generatore di eclse cdt ignora le definizioni aggiunte con add_definitions (...) durante l'analisi dei simboli. Invece usa CMAKE_CXX_COMPILER_ARG1. Quindi tutto quello che dovete fare è: Aggiungere -DCMAKE_CXX_COMPILER_ARG1 = -std = C++ 11 quando si richiama cmake

file di progetto Generazione da linea di comando:

cmake ../../src -G"Eclipse CDT4 - MinGW Makefiles" -DCMAKE_ECLIPSE_VERSION=4.2 -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_ARG1=-std=c++11 

progetti di generazione da 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 

È importante impostare anticipatamente CMAKE_CXX_COMPILER_ARG1 prima di premere Configura o generare la prima volta!

Questo è tutto. Il progetto verrà generato con simboli corretti. l'indicizzatore, l'evidenziazione della sintassi e il completamento automatico dovrebbero funzionare come previsto senza modificare manualmente le impostazioni del progetto.

+0

Non ha funzionato per me. Sto usando cmake 3.5.1 ed eclipse Kepler. Ho ancora dovuto fare ciò che il secondo punto qui suggerito di fare (https://stackoverflow.com/a/14381512/1971003) - Qualcosa che mi manca qui? Grazie !! –

3

Nella versione 3.1 di cmake è stata introdotta una nuova variabile CMAKE_CXX_STANDARD in grado di attivare il supporto C++ 11. Prova qualcosa del genere:

cmake ../../src -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_STANDARD=11 

Questo sembra portare a termine il progetto di Eclipse generato. L'ho provato con Verison 3.2.0-rc2 e Eclipse ha riconosciuto le caratteristiche di C++ 11 come std :: shared_ptr <>.

Alcuni link di documentazione:

+1

No, ho provato a impostare CMAKE_CXX_STANDARD = 14 con CMake 3.2.1. GCC imposta standard su gnu ++ 14 e Eclipse no. –

+0

Prova 'cmake -G" Eclipse CDT4 - Unix Makefile "-DCMAKE_CXX_FLAGS =" - std = C++ 14 ".' – Tik0

4

Come già accennato, l'invocazione dei generatori del progetto corre prima il parsing di CMakeLists.txt. Pertanto, qualsiasi definizione all'interno di CMakeLists.txt non ha alcun effetto sui file di progetto generati.

In caso di generazione di progetti eclissi, le funzionalità del compilatore sono richieste all'interno di CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake. Nella riga 23 viene analizzata la variabile CMAKE_CXX_FLAGS che viene valutata nella riga 30. Soprattutto questaCMAKE_CXX_FLAGS variabile può essere impostata solo richiamando cmake dalla riga di comando.

Recommodation della corretta cmake invocazione: cmake -G"Eclipse CDT4 - Unix Makefiles" -DCMAKE_CXX_FLAGS="-std=c++11" (o sostituire c++11 con es.c++14 o qualsiasi altro standard gradite)

suggerimento: Il risultato del calcolo linea 30 si può vedere dalla eseguendo il comando seguente come esempio: touch /tmp/dummy; /usr/bin/c++ -v -E -x c++ -std=c++11 -dD /tmp/dummy. Emette tutte le definizioni dal compilatore che vengono analizzate nel progetto eclipse:

... 
#define __STDC__ 1 
#define __cplusplus 201103L 
... 
+1

Questo ha funzionato per me, usando Eclipse 4.5, cmake 3.7.2 e TDM-GCC 5.1. – gurka

Problemi correlati