Suporte de biblioteca c ++ 20 para xcode 12

Sep 01 2020

posso usar a biblioteca c ++ 20 com xcode 12? (xcode 12 beta 5, com clang versão 10.0.0).

então, nas configurações de compilação do xcode, em vez de

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

talvez use algo como (não funciona => clang err: nome de biblioteca inválido)

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

já defini (funciona fornecendo suporte à linguagem c ++ 20 , mas não fornece suporte à biblioteca c ++ 20 )

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

Estou ciente de que a biblioteca c ++ 20 ainda não está completa / lançada oficialmente.

questão:

Você conhece alguma maneira (fácil) de usar a biblioteca c ++ 20 (preliminar) com o xcode 12?

obrigado

Respostas

2 puio Sep 01 2020 at 21:56

Pode haver maneiras mais fáceis, ou posso ter feito algo redundante (deixe-me saber o que pode ser removido), mas aqui está uma maneira infalível.

Construir llvm com

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é necessário ou a vinculação libcxxfalhará com:

ld: biblioteca não encontrada para -lcxxabi_shared clang: erro: o comando do linker falhou com o código de saída 1 (use -v para ver a invocação)

DLLVM_CCACHE_BUILD requer https://ccache.dev(use cerveja se desejar). A primeira construção será muito lenta. As reconstruções serão mais rápidas.


Depois que o acima for feito e o ninja compilar cerca de 3.000 arquivos, execute

 ninja install all 
 ninja install build-xcode-toolchain

Encontre o conjunto de ferramentas criado em location you chose above/Toolchains. Copie para~/Library/Developer/Toolchains/


Se o Xcode estiver aberto, feche-o e abra novamente. No menu do aplicativo Xcode> Conjuntos de ferramentas> escolha o novo, llvm12git.

Crie um novo projeto c ++ normalmente e vá para as configurações de construção do projeto.

Pesquise COMPILER_INDEX_STORE_ENABLEou Enable index-while-building functionalitye defina-o como "Não". Caso contrário, a compilação falhará com "opção não reconhecida" sobre indexação.


Altere o "dialeto da linguagem C ++" para "c ++ 20" ou "c ++ 2a"

Construa o projeto normalmente. No entanto, os avisos podem não desaparecer enquanto o código é compilado com êxito devido à indexação desativada. :( Adicionar caminho de pesquisa de cabeçalho ajuda com avisos.

  • Adicionando caminho de pesquisa de cabeçalho do sistema ao Xcode

Certifique-se de verificar o status do recurso:

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

Código que testei:

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

}