Поддержка библиотеки 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?
Благодарность
1 ответ
Могут быть более простые способы, или я мог сделать что-то лишнее (дайте мне знать, что можно удалить), но вот верный способ.
Создайте 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=ON \
../llvm
libcxxabi
требуется или ссылка libcxx
потерпит неудачу с:
ld: библиотека не найдена для -lcxxabi_shared clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v, чтобы увидеть вызов)
DLLVM_CCACHE_BUILD
требуется https://ccache.dev/ (при желании используйте brew).
После того, как это будет сделано и ninja скомпилирует около 3000 файлов, запустите
ninja install all
ninja install build-xcode-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"
Постройте проект нормально. Однако предупреждения могут не исчезнуть, пока код успешно строится из-за отключения индексации.:(Добавление пути поиска по заголовку помогает с предупреждениями.
Обязательно проверьте статус функции:
Код, который я тестировал:
#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;
}