supporto della libreria c ++ 20 per xcode 12

Sep 01 2020

posso usare la libreria c ++ 20 con xcode 12? (xcode 12 beta 5, con clang versione 10.0.0).

quindi nelle impostazioni di build di xcode, invece di

// in xcode build settings, "c++ standard library"
CLANG_CXX_LIBRARY = libc++

forse usa qualcosa come (non funziona => clang err: nome libreria non valido)

CLANG_CXX_LIBRARY = libc++20 // eg. libc++20 & libc++2a are invalid names

ho già impostato (funziona fornendo il supporto per il linguaggio c ++ 20 , ma non fornisce il supporto per la libreria c ++ 20 )

// in xcode build settings, "c++ language dialect"
CLANG_CXX_LANGUAGE_STANDARD = c++2a // ok but does not provide c++20 library

Sono consapevole che la libreria c ++ 20 non è ancora completa / ufficialmente rilasciata.

domanda:

conosci qualche (semplice) modo per usare la libreria (preliminare) c ++ 20 con xcode 12?

Grazie

Risposte

2 puio Sep 01 2020 at 21:56

Ci possono essere modi più semplici, o potrei aver fatto qualcosa di ridondante (fammi sapere cosa può essere rimosso), ma ecco un modo sicuro.

Crea llvm con

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

libcxxabiè richiesto o il collegamento libcxxfallirà con:

ld: libreria non trovata per -lcxxabi_shared clang: errore: comando linker non riuscito con codice di uscita 1 (usa -v per vedere l'invocazione)

DLLVM_CCACHE_BUILD richiede https://ccache.dev(usa la birra se lo desideri). La prima build sarà molto lenta. Le ricostruzioni saranno più veloci.


Dopo aver fatto quanto sopra e ninja ha compilato circa 3000 file, esegui

 ninja install all 
 ninja install build-xcode-toolchain

Trova la toolchain creata in location you chose above/Toolchains. Copialo in~/Library/Developer/Toolchains/


Se Xcode è aperto, chiudilo e riaprilo. Nel menu dell'app Xcode> Toolchains> scegli quello nuovo, llvm12git.

Crea normalmente un nuovo progetto c ++ e vai alle impostazioni di compilazione del progetto.

Cerca COMPILER_INDEX_STORE_ENABLEo Enable index-while-building functionalitye impostalo su "No". In caso contrario, la compilazione non riesce con "opzione non riconosciuta" sull'indicizzazione.


Cambia il "dialetto della lingua C ++" in "c ++ 20" o "c ++ 2a"

Crea normalmente il progetto. Tuttavia, gli avvisi potrebbero non scomparire mentre il codice viene compilato correttamente a causa dell'indicizzazione disabilitata. :( L'aggiunta del percorso di ricerca dell'intestazione aiuta con gli avvisi.

  • Aggiunta del percorso di ricerca dell'intestazione di sistema a Xcode

Assicurati di controllare lo stato della funzionalità:

  • http://clang.llvm.org/cxx_status.html
  • https://en.cppreference.com/w/cpp/20

Codice che ho testato:

#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;

}