supporto della libreria c ++ 20 per xcode 12
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
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;
}