Qt Creator'da C ++ 11 nasıl etkinleştirilir?


167

Başlık oldukça açıklayıcı. Qt Creator 2.7.0'ı indirdim ve bazı temel C ++ 11 kodlarını derlemeye çalışıyorum:

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}

Aşağıdaki hatayı alıyorum:

range based for loops are not allowed in c++ 98 mode

Bu makaleye göre , Qt Creator'ın bu sürümü C ++ 11'i desteklemektedir. Peki nasıl etkinleştirebilirim?


3
Qt Creator bir derleyici değil. "Qt Creator C ++ 11'i destekler" yazdığınızda, kod tamamlama altyapısının (bu durumda Clang) C ++ 11 sözdizimini desteklediği anlamına gelir.
cmannett85

@ cmannett85 Qt Creator hala Clang'ı C ++ sözdizimi ayrıştırıcısı olarak kullanmıyor. Çabalar vardı, ancak Clang'ın API'sı ve bu çözümün genel performansı bunu geciktirdi. Bu yöndeki mevcut çalışma burada yer almaktadır .
rubenvb

Yanıtlar:


261

Bu siteye göre ekle

CONFIG += c++11

.pro dosyanıza ekleyin (bu web sayfasının alt kısmına bakın). Qt 5 gerektirir.


Diğer cevaplar,

QMAKE_CXXFLAGS += -std=c++11(veya QMAKE_CXXFLAGS += -std=c++0x)

ayrıca Qt 4.8 ve gcc / clang ile çalışır.


4
Anonim downvotes kimseye yardım etmiyor. Cevabın nesi var?
Ali

Sorun, yinelenen / eksik cevabınızı silemedim, yapabileceğim tek şey onu düşürmekti. Şimdi onu daha sunulabilir yapmak için düzenlediğinize göre, sadece inişli çıkıştan memnunum.
nurettin

9
@nurettin Geri bildiriminiz için teşekkür ederiz. Cevapların (benim ve diğerlerinin) düzenleme geçmişlerini dikkatlice incelerseniz, orijinal cevabımın bir kopya olmadığını göreceksiniz; aslında cevabımın bir kısmını utanmadan çalmış ve cevabımı yinelemeye benzetmiş olan diğer cevaptı. Sonra bu yıl iki mükerrer cevap daha ortaya çıktı. Düzenleme geçmişinde kendiniz kontrol edin. Bu bilgi verildiğinde, downvote'unuzu tekrar değerlendirir misiniz?
Ali

3
@Troyseph İşte durum hakkındaki anlayışım. Ben gcc kullandığınızı varsayıyorum. Eğer bir gcc sürümü destekleniyorsa -std=c++11, o zaman (kullanımdan kaldırılmış) -std=c++0xbayrağı da desteklemelidir ve her iki bayrak da aynı etkilere sahip olmalıdır (görünüşe göre makinenizde durum böyle değildir). Bir derleyici destekliyorsa -std=c++0x, anladığı anlamına gelmez -std=c++11. Bu nedenle, -std=c++0xC ++ 11 uyumluluk modu için varsayılan olarak seçmek makul bir seçimdir. Makinemde, en azından man sayfasına göre -std=c++0xve -std=c++11aynı.
Ali

1
@Troyseph Şimdi, -std=c++11derleyici destekliyorsa kullanmanın daha iyi olacağı doğrudur ve Qt bunu yapmak için yeterince akıllı olabilir. Bu sorun sizi çok
Ali

32

Bunu .pro dosyanıza ekleyin

QMAKE_CXXFLAGS += -std=c++11

veya

CONFIG += c++11

18

Her iki durumu da Ali'nin mükemmel cevabında ele almak için bir alternatif olarak, genellikle

# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){    
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}

proje dosyalarıma. Ekibinizde hangi Qt sürümünün insanlar kullandığını gerçekten önemsemediğinizde, ancak her durumda C ++ 11'in etkin olmasını istediğinizde bu kullanışlı olabilir.


Bu -std = c ++ 11 olmalıdır
Predrag Manojlovic

8

qmake dosyanıza ekle

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11

4

QT'nin önceki bir sürümünü kullanıyorsanız (<5) bunu deneyin

QMAKE_CXXFLAGS += -std=c++0x

1

Başarılı bir şekilde çalışmasını sağladığım tek yer:

... \ Qt \ {5.9; veya sürümünüz} \ mingw {53_32; veya sürümünüz} \ mkspecs \ win32-g ++ \ qmake.conf:

Sonra satırda:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

Düzenle :

QMAKE_CFLAGS           += -fno-keep-inline-dllexport -std=c++11
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.