c ++ 20 dukungan library untuk xcode 12

Sep 01 2020

dapatkah saya menggunakan pustaka c ++ 20 dengan xcode 12? (xcode 12 beta 5, dengan versi dentang 10.0.0).

jadi dalam pengaturan build xcode, bukan

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

mungkin menggunakan sesuatu seperti (tidak berfungsi => clang err: nama perpustakaan tidak valid)

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

saya sudah mengatur (bekerja dengan memberikan dukungan bahasa c ++ 20 , tetapi tidak menyediakan dukungan pustaka c ++ 20 )

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

Saya sadar bahwa pustaka c ++ 20 belum lengkap / resmi dirilis.

pertanyaan:

apakah Anda tahu cara (mudah) untuk menggunakan pustaka (pendahuluan) c ++ 20 dengan xcode 12?

Terima kasih

Jawaban

2 puio Sep 01 2020 at 21:56

Mungkin ada cara yang lebih mudah, atau saya mungkin telah melakukan sesuatu yang berlebihan (beri tahu saya apa yang bisa dihapus), tetapi inilah cara yang pasti.

Bangun llvm dengan

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

libcxxabidiperlukan atau penautan libcxxakan gagal dengan:

ld: library tidak ditemukan untuk -lcxxabi_shared clang: error: perintah linker gagal dengan kode keluar 1 (gunakan -v untuk melihat permintaan)

DLLVM_CCACHE_BUILD membutuhkan https://ccache.dev(gunakan minuman jika Anda mau). Build pertama akan sangat lambat. Membangun kembali akan lebih cepat.


Setelah hal di atas selesai dan ninja mengkompilasi sekitar 3000 file, jalankan

 ninja install all 
 ninja install build-xcode-toolchain

Temukan toolchain yang dibuat di location you chose above/Toolchains. Salin ke~/Library/Developer/Toolchains/


Jika Xcode terbuka, tutup dan buka kembali. Di menu aplikasi Xcode> Toolchains> pilih yang baru, llvm12git.

Buat project c ++ baru secara normal dan buka setelan build projectnya.

Telusuri COMPILER_INDEX_STORE_ENABLEatau Enable index-while-building functionalitydan setel ke "Tidak". Jika tidak, build akan gagal dengan "opsi tidak dikenal" tentang pengindeksan.


Ubah "dialek bahasa C ++" menjadi "c ++ 20" atau "c ++ 2a"

Bangun proyek secara normal. Namun, peringatan mungkin tidak hilang saat kode berhasil dibuat karena pengindeksan dinonaktifkan. :( Menambahkan jalur pencarian tajuk membantu dengan peringatan.

  • Menambahkan jalur pencarian header sistem ke Xcode

Pastikan untuk memeriksa status fitur:

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

Kode yang saya uji:

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

}