c ++ 20 ไลบรารีรองรับ xcode 12

Sep 01 2020

ฉันสามารถใช้ไลบรารี c ++ 20 กับ xcode 12 ได้หรือไม่ (xcode 12 beta 5 พร้อม clang เวอร์ชัน 10.0.0)

ดังนั้นในการตั้งค่าการสร้าง xcode แทนที่จะเป็น

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

อาจใช้บางอย่างเช่น (ไม่ทำงาน => clang err: ชื่อไลบรารีไม่ถูกต้อง)

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

ฉันได้ตั้งค่าไว้แล้ว (ทำงานโดยให้การสนับสนุนภาษา c ++ 20 แต่ไม่ได้ให้การสนับสนุนไลบรารี c ++ 20 )

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

ฉันทราบว่าไลบรารี c ++ 20 ยังไม่สมบูรณ์ / เผยแพร่อย่างเป็นทางการ

คำถาม:

คุณรู้วิธี (ง่าย ๆ ) ในการใช้ไลบรารี c ++ 20 (เบื้องต้น) กับ xcode 12 หรือไม่

ขอบคุณ

คำตอบ

2 puio Sep 01 2020 at 21:56

อาจมีวิธีที่ง่ายกว่านี้หรือฉันอาจทำบางอย่างซ้ำซ้อน (แจ้งให้เราทราบว่าอะไรสามารถลบออกได้) แต่นี่เป็นวิธีที่แน่นอน

สร้าง llvm ด้วย

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จำเป็นต้องมีมิฉะนั้นการเชื่อมโยงlibcxxจะล้มเหลวด้วย:

ld: ไม่พบไลบรารีสำหรับ -lcxxabi_shared clang: ข้อผิดพลาด: คำสั่ง linker ล้มเหลวด้วยรหัสออก 1 (ใช้ -v เพื่อดูการเรียกใช้)

DLLVM_CCACHE_BUILD ต้องมี https://ccache.dev(ใช้ชงถ้าคุณต้องการ) การสร้างครั้งแรกจะช้ามาก การสร้างใหม่จะเร็วขึ้น


หลังจากเสร็จสิ้นข้างต้นและ ninja รวบรวมไฟล์ประมาณ 3,000 ไฟล์ให้เรียกใช้

 ninja install all 
 ninja install build-xcode-toolchain

ค้นหา toolchain ที่สร้างขึ้นในlocation you chose above/Toolchains. คัดลอกไปที่~/Library/Developer/Toolchains/


หาก Xcode เปิดอยู่ให้ปิดแล้วเปิดใหม่ ในเมนูแอพ Xcode> Toolchains> เลือกอันใหม่ llvm12git

สร้างโปรเจ็กต์ c ++ ใหม่ตามปกติและไปที่การตั้งค่าการสร้างของโปรเจ็กต์

ค้นหาCOMPILER_INDEX_STORE_ENABLEหรือEnable index-while-building functionalityตั้งค่าเป็น "ไม่ใช่" มิฉะนั้นการสร้างจะล้มเหลวด้วย "ตัวเลือกที่ไม่รู้จัก" เกี่ยวกับการจัดทำดัชนี


เปลี่ยน "ภาษา C ++" เป็น "c ++ 20" หรือ "c ++ 2a"

สร้างโครงการตามปกติ อย่างไรก็ตามคำเตือนอาจไม่หายไปในขณะที่สร้างโค้ดสำเร็จเนื่องจากปิดใช้งานการทำดัชนี :( การเพิ่มเส้นทางการค้นหาส่วนหัวช่วยให้มีคำเตือน

  • การเพิ่มเส้นทางการค้นหาส่วนหัวของระบบไปยัง Xcode

อย่าลืมตรวจสอบสถานะคุณสมบัติ:

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

รหัสที่ฉันทดสอบ:

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

}