Visual Studio'da C ++ 17 derlemesi nasıl etkinleştirilir?


120

C ++ 17 özelliklerini kullanmak istiyorum.

Microsoft Visual Studio'da derlemeyi C ++ 14'ten C ++ 17'ye nasıl geçirebilirim?

Veya VS'nin yayın sürümlerinde mevcut değil mi?


4
Hangi C ++ 17 özellikleri? Visual Studio'nun hangi sürümü? C ++ 17 hakkında soru soruyorsanız, neden sorunuzu etiketlediniz c++11ve c++14?
ildjarn

6
c ++ 17 mevcut değildi ve belirli C ++ sürümleriyle ilgilenenlerin onu nasıl değiştireceklerini daha iyi bildiklerini düşündüm. Örneğin std :: vector.emplace_back () 'nin yeni oluşturulan elemana bir referans vermesini istiyorum. Bu +1 satırını biliyorum ve o referansı alıyorum, Ama yine de sorumun cevabını bilmek istiyorum. VS Community 2015 (14.0.25431.01 Güncelleme 3)
Tudvari

Muhtemelen şurayı
Mikel F

3
VS'de belirli dil lehçelerini etkinleştiremezsiniz, uyguladıkları şeyi alırsınız. VS21015 kullanıyorsanız, C ++ 17'ye oylanan standart kitaplık özelliklerinde oldukça iyi şansınız olabilir, ancak dil özellikleriyle pek fazla değil.
Praetorian

1
@preat MSVC 2017'de "en son" ayar var, ancak bu henüz yayınlanmadı.
Yakk - Adam Nevraumont

Yanıtlar:


162

Şimdi, özellikle C ++ 17'yi seçebileceğiniz bir açılır menü var (en azından VS 2017.3.5'ten beri). Kullanılabilir seçenekler şunlardır (proje> Özellikler> C / C ++> Dil> C ++ Dil Standardı)

  • ISO C ++ 14 Standardı. msvc komut satırı seçeneği:/std:c++14
  • ISO C ++ 17 Standardı. msvc komut satırı seçeneği:/std:c++17
  • En son taslak standart. msvc komut satırı seçeneği:/std:c++latest

(Bahse girerim, C ++ 20 çıktığında ve Visual Studio tarafından daha tam olarak desteklendiğinde olacaktır /std:c++20)


3
Sözdizimi -std:c++14, -std:c++17ve -std:c++latestel (VS2017 ile test) derleyici seçenekleri girmek için tercih yaparken de, örneğin çalışır.
Roi Danton

Bu cevap zaten net değil mi, yoksa özellikle listelediğim anahtarlar -yerine mi demek istiyorsun /std:?
Johan Lundberg

3
gccYa da gelirken faydasını görüyorum clang. O zaman -daha az müdahaleci olur (ancak sözdizimi hala biraz farklıdır ( :yerine =)).
Roi Danton

VS 2019'da Proje Özelliklerine gitmek için "Çözüm Gezgini" ne gidin, proje başlığına sağ tıklayın ve Özellikler'i seçin. Ardından bu yazının talimatlarını izleyin.
BabarBaig

1
@AndreiKrasutski. Henüz ISO C ++ 20 yok, ancak / std: c ++ en son'da bazı destek. C ++ 20 standardının gelecek yıl olması bekleniyor. Cevabımdaki bir yorumda düzenledim.
Johan Lundberg

31

MSBuild (Visual Studio projesi / çözümü * .vcproj / *. Sln ) :

Proje Ayarlarında Ek seçeneklere Ekle: /std:c++latesten son özellikleri etkinleştirmek için - şu anda VS2017, VS2015 Güncelleme 3 itibariyle C ++ 17.

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

/permissive- standart olmayan C ++ uzantılarını devre dışı bırakır ve VS2017'de standart uyumluluğu etkinleştirir.

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

DÜZENLEME (Ekim 2018): En son VS2017 özellikleri burada belgelenmiştir:

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

VS2017 şunları destekler: /std:[c++14|c++17|c++latest]şimdi. Bu bayraklar, projenin özellik sayfaları aracılığıyla ayarlanabilir:

Visual Studio geliştirme ortamında bu derleyici seçeneğini ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın. Ayrıntılar için, bkz. Proje Özellikleriyle Çalışma.
  2. Yapılandırma Özellikleri, C / C ++, Dil'i seçin.
  3. C ++ Dil Standardı'nda, açılır denetimden desteklenecek dil standardını seçin, ardından değişikliklerinizi kaydetmek için Tamam'ı veya Uygula'yı seçin.

CMake :

Visual Studio 2017 (15.7+), CMake projelerini destekler. CMake, modern C ++ özelliklerini çeşitli şekillerde etkinleştirmeyi mümkün kılar. En temel seçenek, CMakeLists.txt'de bir hedefin özelliğini ayarlayarak modern bir C ++ standardını etkinleştirmektir :

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

Arayüz kitaplığı olması durumunda:

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

VS2017'mde açılır listeyi yaptım, ancak yine de derleyici C ++ 98 standardını uygulamaya devam ediyor, ne oluyor
Travis Su


5

Mevcut Visual Studio 2015 çözümünü Visual Studio 2017'ye getiriyorsanız ve bunu c ++ 17 yerel derleyiciyle oluşturmak istiyorsanız, önce çözümü / projeleri v141'e yeniden hedeflemelisiniz, SONRA açılır menü yukarıda açıklandığı gibi görünecektir (Yapılandırma Özellikleri -> C / C ++ -> Dil -> Dil Standardı)


2

Visual studio 2019 sürümü:

Açılır menü şu adrese taşındı:

  • Projeye sağ tıklayın (çözüm değil)
  • Özellikler (veya Alt + Enter)
  • Sol menüden Yapılandırma Özellikleri'ni seçin
  • Genel
  • Ortada "C ++ Dil Standardı" adlı bir seçenek var
  • Yanında açılır menü var
  • Burada Varsayılan, ISO C ++ 14, 17 veya en yenisini seçebilirsiniz.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.