Eclipse Juno / Kepler / Luna CDT에서 C ++ 11을 활성화하는 방법은 무엇입니까?


85

편집 : 이것은 실제로 Eclipse Kepler에만 국한되지 않습니다. Eclipse Juno에도 동일한 프로세스를 사용해야했습니다. 문제는 동일한 질문에 답하는 다른 게시물에 누락 된 단계가있는 것 같습니다.

C ++ 용 Eclipse Kepler를 사용하고 있는데 C ++ 11을 사용하려고하는데 오류가 발생합니다. 컴파일 할 때 오류가 발생합니다.

오류 : C ++ 98 모드에서는 범위 기반 for 루프가 허용되지 않습니다.

게시물의 지침을 따랐습니다.

Eclipse CDT C ++ 11 / C ++ 0x 지원

Eclipse Juno에 제공된 솔루션이 작동하지 않습니다.

다른 의견은 일식을 다시 시작하고 청소 및 재건을 제안했습니다. 그것은 차이를 만들지 않았습니다.

답변:


183

해야 할 두 가지가 있습니다. 먼저 컴파일러를 설정 한 다음 CDT의 언어 프로세서를 설정해야합니다. 사용중인 컴파일러를 언급하지 않았으므로 GCC라고 가정하지만 단계는 다른 컴파일러와 비슷합니다. (물론 C ++ 11을 지원하는 컴파일러가 필요합니다.)

컴파일러 설정은 매우 간단합니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭합니다.
  2. C / C ++ 빌드에서 설정을 클릭합니다.
  3. GCC C ++ 컴파일러에서 기타를 클릭합니다.
  4. 기타 플래그 상자에서 토큰 목록에 "-std = c ++ 11"을 추가합니다.
  5. 적용 및 확인을 클릭하십시오.

이 시점에서 프로젝트를 다시 빌드하고 실행할 수 있어야합니다. 그러나 CDT는 여전히 C ++ 11 포함 오류를 표시 할 수 있습니다. 이를 해결할 수있는 방법은 다음과 같습니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭합니다.
  2. C / C ++ 일반에서 "전 처리기 포함 경로, 매크로"를 클릭합니다.
  3. 공급자 탭을 선택합니다.
  4. 목록에 "GCC Built in Compiler Settings"와 같은 항목이 있어야합니다. 이 항목을 선택하십시오.
  5. "글로벌 공급자 사용 ..."옵션을 선택 취소합니다.
  6. 목록 아래에 "컴파일러 사양을 가져 오는 명령"이라는 상자가 있습니다. 여기에 "-std = c ++ 0x"를 추가합니다.
  7. 오른쪽의 '위로 이동'버튼을 사용하여 목록 상단의 "GCC 내장 컴파일러 설정"공급자를 이동합니다.
  8. 적용을 클릭 한 다음 확인을 클릭하십시오.
  9. Eclipse 작업 공간으로 돌아가서 프로젝트 메뉴, C / C ++ 색인을 선택하고 "해결되지 않은 포함 해결"을 클릭하십시오.

1
감사합니다. 이것은 효과가 있었다. 내가 링크 한 다른 게시물을 잘못 읽었을 수도 있지만 해당 게시물에서 컴파일러 설정에 대한 언급이없는 것 같습니다.
user327301

1
나를 위해 작동하지 않습니다. 내 주요 문제는 해결되지 않은 C ++ 11 포함입니다. 나는 -std=c++11당신이 두라고 말한 곳에 넣고 전체 색인을 다시 작성했지만 여전히 인식되지 않는 std :: cout, std :: set 등의
쓰레기를

2
편집 : 나는 그것이 있어야 할 첫 번째 부분을 찾지 못했지만 make를 통해 컴파일하고 있으므로 설명 일 수 있습니다. (하지만 작업 공간 구성에서 발견하고 설정했습니다). 그러나 나는 그것을에 넣었지만 compiler spec여전히 작동하지 않습니다. std :: shared_ptr 및 동일하지 않습니다. 이전에는 juno와 함께 이전 컴퓨터에서 작동했지만.
Dolanor 2013-07-31

1
제 경우 (gcc)에서는 -std = c ++ 0x를 사용했습니다. 그래서 모든 것이 작동합니다. 감사합니다!
Denis Zaikin 2013

4
@MrEricSir는 새 프로젝트를 추가 할 때 자동으로 적용되도록 작업 공간에 대해이 설정을 만드는 방법이 있습니까?
Ivaylo Strandjev 2014

25

Eclipse Kepler 서비스 릴리스 1에서 C ++ 11 지원 (빌드 ID : 20130919-0819)

최신 릴리스 Eclipse Kepler SR1에서는 -std = c ++ 11 만 추가하면됩니다.

  1. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 클릭하십시오.
  2. 로 이동 한 C / C ++ 일반처리기는 경로, 매크로 등 포함
  3. 공급자 탭을 선택합니다.
  4. 추가 -std = C (11) ++ 에 대한 명령은 컴파일러 사양을 얻을 수 있습니다 :
  5. 변경 사항을 적용하면 인덱스가 자동으로 생성됩니다.

"명령은 컴파일러 사양을 얻을 수 있습니다" - 라인이 같아야합니다 :

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11

2
GCC 나는 = C + +0 -std 추가했다으로
ccook

어떤 GCC를 사용하십니까? C ++ 0X 11 ++ C의 옛 이름 (별명)이었다
MeJ

1
새로운 일식 CDT를 설정하는 것이 두 번째 발견되었습니다. 설정이 더 직관적이어야합니다.
ccook 2014


6

Eclipse Kepler를 사용하고 수정하기 위해 다음을 수행했습니다.

1-Project >> Proprietes >> C / C ++ Build :: 설정을 마우스 오른쪽 버튼으로 클릭

2-GCC G ++ 컴파일러로 이동 >> 기타 >> 기타 플래그

 i then added -std=c++11 
 hit apply and ok

내 문제가 해결되었습니다!

도움이 되었기를 바랍니다.


이것은 Eclipse Platform, 버전 : 4.3.1에 대한 최고의 답변입니다.-Kepler / Juno가 무엇인지 모르겠습니다!
TCSGrad

Eclipse Kepler는 Eclipse 버전 4.3.X
Karrq

4

여기서 eclipse indigo 및 cdt 8.0.2를 실행합니다. 나는 모든 가이드를 따랐지만 std :: unique_ptr과 같은 것을 찾기 위해 전처리기를 직접 정의해야했습니다. 포함 파일 "메모리"가이를 확인합니다. 프로젝트 속성의 "C ++ 일반"에있는 "경로 및 기호"아래의 "기호"탭에서 __cplusplus를 201103L로 설정합니다.


예, 이전 프로젝트에서 마이그레이션 할 수 있습니다.
Guy L

2

프로젝트 속성-> C / C ++ 빌드-> 설정-> 도구 설정 (GCC C ++ 컴파일러-> Dialect)에 방언 플래그 "-std = c ++ 11"을 추가하면 위에서 언급 한 설정을 제외하고 Eclipse Kepler의 문제가 해결되었습니다.


1

Eclipse Luna를 사용하고 있으며 C / C ++ 빌드-> 설정에 "도구 설정"이 없습니다. 나는 DID 추가 -std = C ++에서 컴파일러 사양 명령 라인에 11 "C / C ++ 일반 -> 처리기가 포함 -> 공급자"제안. 하지만 여전히 emplace ()를 해결하는 인덱서의 능력을 만족시키지 못했습니다.

그래서 헤더 파일에서 emplace 함수가 __cplusplus> = 201103L에 종속되어 있음을 발견했습니다. 그래서 방금 전 처리기 기호 "__cplusplus"를 추가하고 값 201103을 지정했습니다.

약간 hackish하지만 인덱서는 행복합니다. (그리고 makefile은 Eclipse 프로젝트가 아닌 내 빌드 플래그를 정의합니다)


0

MrEricSir에서 제공하는 솔루션은 최신 Eclipse Oxygen CDT가 설치된 후에 만 ​​작동합니다. Mars CDT에서는 작동하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.