Obsługa biblioteki c ++ 20 dla xcode 12
czy mogę używać biblioteki C ++ 20 z xcode 12? (xcode 12 beta 5, z wersją Clang 10.0.0).
więc w ustawieniach kompilacji xcode zamiast
// in xcode build settings, "c++ standard library"
CLANG_CXX_LIBRARY = libc++
może użyć czegoś takiego jak (nie działa => clang err: nieprawidłowa nazwa biblioteki)
CLANG_CXX_LIBRARY = libc++20 // eg. libc++20 & libc++2a are invalid names
mam już ustawione (działa, zapewniając obsługę języka c ++ 20 , ale nie zapewnia obsługi biblioteki c ++ 20 )
// in xcode build settings, "c++ language dialect"
CLANG_CXX_LANGUAGE_STANDARD = c++2a // ok but does not provide c++20 library
zdaję sobie sprawę, że biblioteka C ++ 20 nie jest jeszcze ukończona / oficjalnie wydana.
pytanie:
czy znasz jakiś (łatwy) sposób użycia (wstępnej) biblioteki c ++ 20 z xcode 12?
dzięki
Odpowiedzi
Mogą być łatwiejsze sposoby lub mogłem zrobić coś zbędnego (daj mi znać, co można usunąć), ale oto pewny sposób.
Zbuduj llvm z
cmake -G "Sublime Text 2 - Ninja" -DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS=“clang;libcxx;libcxxabi” -DCMAKE_CXX_STANDARD=17 -DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_TARGETS_TO_BUILD=X86 -DLLVM_CCACHE_BUILD=ON -DLLVM_CREATE_XCODE_TOOLCHAIN=ON \
-DCMAKE_INSTALL_PREFIX="easy to clean location"\
-DLLVM_ENABLE_RTTI=OFF \
../llvm
- http://clang.llvm.org/get_started.html
- https://llvm.org/docs/CMake.html
libcxxabijest wymagane lub połączenie libcxxzakończy się niepowodzeniem z:
ld: nie znaleziono biblioteki dla -lcxxabi_shared clang: błąd: polecenie konsolidatora nie powiodło się z kodem zakończenia 1 (użyj -v, aby zobaczyć wywołanie)
DLLVM_CCACHE_BUILD wymaga https://ccache.dev(użyj naparu, jeśli chcesz). Pierwsza kompilacja będzie bardzo powolna. Przebudowa będzie szybsza.
Po wykonaniu powyższego i skompilowaniu około 3000 plików ninja uruchom
ninja install all
ninja install build-xcode-toolchain
Znajdź utworzony łańcuch narzędzi w location you chose above/Toolchains. Skopiuj to do~/Library/Developer/Toolchains/
Jeśli Xcode jest otwarty, zamknij go i otwórz ponownie. W menu aplikacji Xcode> Łańcuchy narzędzi> wybierz nowy, llvm12git.
Utwórz nowy projekt C ++ normalnie i przejdź do ustawień kompilacji projektu.
Wyszukaj COMPILER_INDEX_STORE_ENABLElub Enable index-while-building functionalityi ustaw na „Nie”. W przeciwnym razie kompilacja kończy się niepowodzeniem z „nierozpoznaną opcją” dotyczącą indeksowania.
Zmień „dialekt języka C ++” na „c ++ 20” lub „c ++ 2a”
Zbuduj projekt normalnie. Jednak ostrzeżenia mogą nie zniknąć, gdy kod pomyślnie kompiluje się z powodu wyłączenia indeksowania. :( Dodanie ścieżki wyszukiwania nagłówka pomaga w ostrzeżeniach.
- Dodanie ścieżki wyszukiwania nagłówka systemowego do Xcode
Sprawdź stan funkcji:
- http://clang.llvm.org/cxx_status.html
- https://en.cppreference.com/w/cpp/20
Kod, który testowałem:
#include <compare>
#include <concepts>
struct Aggr {
int i;
char c;
auto operator<=>(Aggr const &) const = default;
};
struct A {
int x;
int y;
int z;
};
int main()
{
// A a{.y = 2,.x = 1}; // error; designator order does not match declaration
// order
A b{.x = 1, .z = 2}; // ok, b.y initialized to 0
return 0;
}