hỗ trợ thư viện c ++ 20 cho xcode 12

Sep 01 2020

tôi có thể sử dụng thư viện c ++ 20 với xcode 12 không? (xcode 12 beta 5, với phiên bản clang 10.0.0).

vì vậy trong cài đặt xây dựng xcode, thay vì

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

có thể sử dụng một cái gì đó như (không hoạt động => clang err: tên thư viện không hợp lệ)

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

tôi đã đặt (hoạt động bằng cách cung cấp hỗ trợ ngôn ngữ c ++ 20 , nhưng không cung cấp hỗ trợ thư viện c ++ 20 )

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

tôi biết rằng thư viện c ++ 20 vẫn chưa hoàn chỉnh / được phát hành chính thức.

câu hỏi:

bạn có biết bất kỳ cách (dễ dàng) nào để sử dụng thư viện c ++ 20 (sơ bộ) với xcode 12 không?

cảm ơn

Trả lời

2 puio Sep 01 2020 at 21:56

Có thể có nhiều cách dễ dàng hơn, hoặc tôi có thể đã làm điều gì đó thừa (hãy cho tôi biết những gì có thể được gỡ bỏ), nhưng đây là một cách chắc chắn.

Xây dựng llvm với

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

libcxxabilà bắt buộc hoặc liên kết libcxxsẽ không thành công với:

ld: library not found for -lcxxabi_shared clang: error: lệnh linker bị lỗi với mã thoát 1 (sử dụng -v để xem lời gọi)

DLLVM_CCACHE_BUILD đòi hỏi https://ccache.dev(sử dụng bia nếu bạn muốn). Bản dựng đầu tiên sẽ rất chậm. Việc xây dựng lại sẽ nhanh hơn.


Sau khi hoàn thành việc trên và ninja biên dịch khoảng 3000 tệp, hãy chạy

 ninja install all 
 ninja install build-xcode-toolchain

Tìm chuỗi công cụ đã tạo trong location you chose above/Toolchains. Sao chép nó vào~/Library/Developer/Toolchains/


Nếu Xcode đang mở, hãy đóng nó và mở lại. Trong menu ứng dụng Xcode> Toolchains> chọn cái mới, llvm12git.

Tạo một dự án c ++ mới một cách bình thường và chuyển đến cài đặt xây dựng của dự án đó.

Tìm kiếm COMPILER_INDEX_STORE_ENABLEhoặc Enable index-while-building functionalityvà đặt nó thành "Không". Nếu không, xây dựng không thành công với "tùy chọn không được công nhận" về lập chỉ mục.


Thay đổi "phương ngữ ngôn ngữ C ++" thành "c ++ 20" hoặc "c ++ 2a"

Xây dựng dự án bình thường. Tuy nhiên, cảnh báo có thể không biến mất trong khi mã tạo thành công do tính năng lập chỉ mục bị vô hiệu hóa. :( Thêm đường dẫn tìm kiếm tiêu đề giúp cảnh báo.

  • Thêm đường dẫn tìm kiếm tiêu đề hệ thống vào Xcode

Đảm bảo kiểm tra trạng thái tính năng:

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

Mã tôi đã thử nghiệm:

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

}