Obsługa biblioteki c ++ 20 dla xcode 12

Sep 01 2020

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

2 puio Sep 01 2020 at 21:56

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;

}