Visual Studio에서 C ++ 17 컴파일을 활성화하는 방법은 무엇입니까?


120

C ++ 17 기능을 사용하고 싶습니다.

Microsoft Visual Studio에서 컴파일을 C ++ 14에서 C ++ 17로 어떻게 전환 할 수 있습니까?

아니면 VS의 릴리스 버전에서 사용할 수 없습니까?


4
어떤 C ++ 17 기능? 어떤 버전의 Visual Studio? 당신이 C ++ (17)에 대해 질문하는 경우 당신은 왜 당신의 질문에 태그를 않았다 c++11c++14?
ildjarn

6
C ++ 17은 사용할 수 없었고, 특정 버전의 C ++에 관심이있는 사람들이 전환하는 방법을 더 잘 알고 있다고 생각했습니다. 예를 들어 std :: vector.emplace_back ()이 새로 생성 된 요소에 대한 참조를 돌려주기를 원합니다. 나는 +1 라인을 알고 있고 참조를 얻었지만 어쨌든 내 질문에 대한 답을 알고 싶습니다. VS Community 2015 (14.0.25431.01 업데이트 3)
Tudvari

당신은 아마 여기에 확인해야합니다 : blogs.msdn.microsoft.com/visualstudio
미켈 F

3
VS에서 특정 언어 방언을 활성화 할 수 없으며 구현 한 모든 것을 얻을 수 있습니다. VS21015를 사용하는 경우 C ++ 17로 투표 된 표준 라이브러리 기능을 사용하면 운이 좋을 수 있지만 언어 기능은 그렇지 않습니다.
Praetorian

1
@preat MSVC 2017에는 "최신"설정이 있지만 아직 릴리스되지 않았습니다.
Yakk-Adam Nevraumont

답변:


162

이제 C ++ 17을 구체적으로 선택할 수있는 드롭 다운 (최소 VS 2017.3.5 이후)이 있습니다. 사용 가능한 옵션은 다음과 같습니다 (프로젝트> 속성> C / C ++> 언어> C ++ 언어 표준).

  • ISO C ++ 14 표준. msvc 명령 줄 옵션 :/std:c++14
  • ISO C ++ 17 표준. msvc 명령 줄 옵션 :/std:c++17
  • 최신 초안 표준. msvc 명령 줄 옵션 :/std:c++latest

(나는 장담한다, 일단 C ++ 20이 나오고 Visual Studio에서 더 완벽하게 지원되면 그것은 될 것이다 /std:c++20)


3
구문은 -std:c++14, -std:c++17-std:c++latest수동 (VS2017에서 테스트) 컴파일러 옵션을 입력하는 것을 선호하는 경우도, 예를 작동합니다.
Roi Danton

이미 답변에서 명확하지 않습니까? 아니면 내가 나열한 스위치 -대신 구체적으로 의미 /std:합니까?
Johan Lundberg

3
gcc또는 에서 올 때 이점이 있습니다 clang. 그러면 -덜 방해가됩니다 (그러나 구문은 여전히 ​​약간 다릅니다 ( :대신 =)).
Roi Danton

VS 2019에서 프로젝트 속성으로 이동하려면 "솔루션 탐색기"로 이동하여 프로젝트 제목을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 그런 다음이 게시물의 지침을 따르십시오.
BabarBaig

1
트윗 담아 가기 아직 ISO C ++ 20은 없지만 / std : c ++ latest에서 일부 지원됩니다. C ++ 20 표준은 내년에 나올 예정입니다. 나는 내 대답의 코멘트를 편집했습니다.
Johan Lundberg

31

MSBuild (Visual Studio 프로젝트 / 솔루션 * .vcproj / *. sln ) :

프로젝트 설정의 추가 옵션에 추가 : /std:c++latest최신 기능 활성화-현재 VS2017, VS2015 업데이트 3 기준 C ++ 17

https://blogs.msdn.microsoft.com/vcblog/2016/06/07/standards-version-switches-in-the-compiler/

/permissive- 비표준 C ++ 확장을 비활성화하고 VS2017에서 표준 준수를 활성화합니다.

https://blogs.msdn.microsoft.com/vcblog/2016/11/16/permissive-switch/

편집 (2018 년 10 월) : 최신 VS2017 기능이 여기에 설명되어 있습니다.

https://docs.microsoft.com/en-gb/cpp/build/reference/std-specify-language-standard-version

VS2017은 다음을 지원합니다 /std:[c++14|c++17|c++latest]. 이러한 플래그는 프로젝트의 속성 페이지를 통해 설정할 수 있습니다.

Visual Studio 개발 환경에서이 컴파일러 옵션을 설정하려면

  1. 프로젝트의 속성 페이지 대화 상자를 엽니 다. 자세한 내용은 프로젝트 속성 작업을 참조하십시오.
  2. 구성 속성, C / C ++, 언어를 선택합니다.
  3. C ++ 언어 표준의 드롭 다운 컨트롤에서 지원할 언어 표준을 선택한 다음 확인 또는 적용을 선택하여 변경 사항을 저장합니다.

CMake :

Visual Studio 2017 (15.7+)은 CMake 프로젝트를 지원합니다. CMake를 사용하면 다양한 방법으로 최신 C ++ 기능을 사용할 수 있습니다. 가장 기본적인 옵션은 CMakeLists.txt에서 대상의 속성 을 설정 하여 최신 C ++ 표준을 활성화하는 것입니다.

add_library (${PROJECT_NAME})
set_property (TARGET ${PROJECT_NAME}
  PROPERTY
    # Enable C++17 standard compliance
    CXX_STANDARD 17
)

인터페이스 라이브러리의 경우 :

add_library (${PROJECT_NAME} INTERFACE)
target_compile_features (${PROJECT_NAME}
  INTERFACE
    # Enable C++17 standard compliance
    cxx_std_17
)

내 VS2017에서 드롭 다운을 수행했지만 여전히 컴파일러는 C ++ 98 표준을 계속 적용합니다. 도대체
Travis Su


5

기존 Visual Studio 2015 솔루션을 Visual Studio 2017로 가져오고이를 C ++ 17 네이티브 컴파일러로 빌드하려는 경우 먼저 솔루션 / 프로젝트를 v141로 다시 대상화해야합니다. 그런 다음 위에 설명 된대로 드롭 다운이 나타납니다 (구성 속성-> C / C ++-> 언어-> 언어 표준)


2

Visual Studio 2019 버전 :

드롭 다운 메뉴가 다음으로 이동되었습니다.

  • 프로젝트를 마우스 오른쪽 버튼으로 클릭 (솔루션 아님)
  • 속성 (또는 Alt + Enter)
  • 왼쪽 메뉴에서 구성 속성을 선택합니다.
  • 일반
  • 중간에 "C ++ 언어 표준"이라는 옵션이 있습니다.
  • 그 옆에는 드롭 다운 메뉴가 있습니다.
  • 여기에서 기본값, ISO C ++ 14, 17 또는 최신을 선택할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.