2014-06-16 14 views
8

Próbuję skompilować C++ 11 kod na Mac OS X przy użyciu Qt Creator/qmake i otrzymuję następujący błąd:Jak określić cel Mac OS X w wersji użyciu qmake

clang: error: invalid deployment target for -stdlib=libc++ (requires OS X 10.7 or later) 

kiedy sprawdziłem linię poleceń kompilacji, zauważyłem, że zawiera ona flagę -mmacosx-version-min = 10.6. Próbowałem zaktualizować .pro plik w następujący sposób, ale wydaje się, że to nie jest brane pod uwagę:

QMAKE_CXXFLAGS += -std=c++11 -stdlib=libc++ 

macx { 
    -mmacosx-version-min=10.7 
} 

Wszelkie sugestie byłoby pomocne. Dzięki!

+0

Twoja wersja Qt jest prawdopodobnie zbyt stara. Jaka jest wersja OS i Qt i czy próbowałeś z Qt 5.2.1 lub 5.3.x? –

+0

Zobacz odpowiedź poniżej. Nie zależy to od wersji Qt, ale od minimalnej docelowej wersji wdrożenia określonej przez qmake.conf. – BigONotation

Odpowiedz

7

rzeczywiście można dodać tę linię docelowego rozmieszczenia QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 do pliku projektu QMake. Nie musisz ponownie instalować Qt.

Trzeba jednak pamiętać: jeśli tworzysz inne biblioteki dołączane do pakietu aplikacji, upewnij się, że są one również kompilowane pod kątem kompatybilności wstecznej! W przypadku, gdy pomaga z dowolnymi bibliotekami, istnieje również odpowiednik polecenia CMake, CMAKE_OSX_DEPLOYMENT TARGET.

5

OK znaleźć rozwiązanie po spojrzał na podobnym pytaniem: QtCreator build system is broken after OSX upgrade

Można zmienić minimalny cel Mac OS X, aktualizując plik qmake.conf dla brzękiem w instalacji Qt (używam Qt5.3). Plik znajduje się w katalogu instalacyjnym Qt w Qt/5.3/clang_64/mkspecs/macx-dzyń/qmake.conf Zaktualizowana wersja jest podana poniżej:

# 
# qmake configuration for Clang on OS X 
# 

MAKEFILE_GENERATOR  = UNIX 
CONFIG     += app_bundle incremental global_init_link_order lib_version_first  plugin_no_soname 
QMAKE_INCREMENTAL_STYLE = sublib 

include(../common/macx.conf) 
include(../common/gcc-base-mac.conf) 
include(../common/clang.conf) 
include(../common/clang-mac.conf) 

#QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6 
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7 

load(qt_config) 

Zauważ, że mam wykomentowane domyślny QMAKE_MACOSX_DEPLOYMENT_TARGET wersja zapewniająca instalację Qt.

Wreszcie, można również określić, które SDK do wykorzystania w pliku .pro następująco:

macx { 
    QMAKE_MAC_SDK = macosx10.9 
} 
+0

Poprawka polega na ponownym zainstalowaniu Qt. Proces instalacji poprawia te pliki zgodnie z platformą. Nie jest nie do pomyślenia, aby większa wersja systemu operacyjnego złamała środowisko programistyczne. –

+1

Nie sądzę, że ma to coś wspólnego z ponowną instalacją Qt. Używam najnowszej wersji Qt 5.3. Myślę, że przeczytałem gdzieś, że podczas budowania Qt ze źródła, możesz określić minimalny cel wdrożenia dla Mac. Oznacza to po prostu, że kiedy ludzie z Qt budują pliki binarne, określili Mac OS X 10.6 jako minimalną platformę wdrożeniową. – BigONotation

+0

Ponieważ to oczywiście działa dla mnie i dla wielu innych osób, utrzymuję moje stwierdzenie, że to proces instalacji dokonuje modyfikacji. Zainstalowana wersja Qt niekoniecznie jest przenośna na nową główną wersję OS X. –