c ++ 20 ไลบรารีรองรับ xcode 12
ฉันสามารถใช้ไลบรารี 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 หรือไม่
ขอบคุณ
คำตอบ
อาจมีวิธีที่ง่ายกว่านี้หรือฉันอาจทำบางอย่างซ้ำซ้อน (แจ้งให้เราทราบว่าอะไรสามารถลบออกได้) แต่นี่เป็นวิธีที่แน่นอน
สร้าง 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;
}