Làm cách nào để cài đặt clang ++ gần đây với Homebrew?


20

Tôi đã thử

brew install llvm

nhưng sau đó tôi không thể tìm thấy bất kỳ clang++*thực thi dưới /usr/local.

Vì vậy, câu hỏi của tôi: Làm thế nào để có được clang ++ qua Homebrew?

Câu trả lời:


18

Kể từ năm 2018, kho lưu trữ Phiên bản Homebrew ('tap') đã hết dịch vụ .

Gói mặc định Homebrew llvm vẫn không bao gồm clang / clang ++, theo mặc định. Do đó, nó không phải là một phần của gói dựng sẵn ('đóng chai').

Người ta có thể xây dựng nó thông qua:

brew install --with-toolchain llvm

Và sau đó sử dụng nó thông qua:

$ PATH="/usr/local/opt/llvm/bin:$PATH" \
    LDFLAGS='-L/usr/local/opt/llvm/lib -Wl,-rpath,/usr/local/opt/llvm/lib' \
    cmake ...

Nhưng việc --with-toolchainxây dựng cảm ứng này mất một thời gian rất dài và do đó không phù hợp trong môi trường tích hợp liên tục (CI).

Tuy nhiên, tiếng kêu đi kèm với XCode gần đây (có sẵn trong môi trường CI như Travis-CI, Phiên bản 9 là mặc định, 10 cũng có sẵn) không còn lỗi thời như trước đây (Apple sử dụng sơ đồ phiên bản giả tưởng đối với clang không khớp với số phiên bản clang ngược dòng nhưng cmake phát hiện, ví dụ như đối với AppleClang 9.1.0.9020039 phiên bản 4.0.1). Do đó, việc xây dựng phần mềm C ++ 11 / C ++ 14 là đủ với các phụ thuộc phổ biến như Boost (ví dụ: phiên bản 1.67).

Nhà nước nghệ thuật 2016

Các llvmgói trong Homebrew không bao gồm clang++, theo mặc định. Khi cài đặt nó, bạn phải thêm --with-clangvào dòng lệnh (ví dụ brew install --with-clang llvm). Phần bổ sung --with-clangmang lại một gói biên dịch đầy đủ vì chỉ có một gói prebuild ('đóng chai') llvm(không có clang++). Thêm vào đó: llvmgói tương đối cũ - hiện tại nó đã có 3.6 - nơi 3.7 đã được phát hành 6 tháng trước.

Do đó, để có được một chai clang++3.7, bạn phải cài đặt gói llvm từ Phiên bản Homebrew :

$ brew tap homebrew/versions
$ brew install llvm37

Sau đó, nó có sẵn dưới:

/usr/local/bin/clang++-3.7

Công thức cũng lưu ý:

To link to libc++, something like the following is required:
  CXX="clang++-3.7 -stdlib=libc++"
  CXXFLAGS="$CXXFLAGS -nostdinc++ -I/usr/local/opt/llvm37/lib/llvm-3.7/include/c++/v1"
  LDFLAGS="$LDFLAGS -L/usr/local/opt/llvm37/lib/llvm-3.7/lib"

Lưu ý rằng nếu bạn đang làm điều này cho Emscripten, bạn phải sử dụng phiên bản tiếng kêu họ cung cấp.
Claudiu

7
Homebrew mới nhất llvm(3.9.1) trong homebrew-coretap hiện nay bao gồm clang, clang++vv dưới/usr/local/opt/llvm/bin
shadowtalker

1
Bổ sung cho nhận xét của @ ssdecontrol: --with-toolchainbây giờ có một đối số mà một số người dùng có thể cần. Xem thêm thông tin ở đây, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
driftcatcher

Shadowtalker đã đúng, và kể từ đó, --with-clangđối số đã bị xóa.
MCCCS

@shadowtalker, tôi có phải thực hiện brew install --with-toolchain llvmnhư @hangtoven đang gợi ý hay brew install llvmkhông? Với --with-toolchaintùy chọn, gói được biên dịch - rất tốn thời gian - so với việc chỉ cài đặt gói dựng sẵn (đóng chai / nhị phân).
maxschlepzig

4

Bạn phải cài đặt nó với --with-clangtùy chọn:

$ brew install --with-clang llvm
==> Installing dependencies for llvm: cmake
==> Installing llvm dependency: cmake
==> Downloading https://homebrew.bintray.com/bottles/cmake-3.4.3.el_capitan.bottle.tar.gz
######################################################################## 100.0%
==> Pouring cmake-3.4.3.el_capitan.bottle.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/cmake
==> Summary
🍺  /usr/local/Cellar/cmake/3.4.3: 1,980 files, 27.4M
==> Installing llvm
==> Downloading http://llvm.org/releases/3.6.2/llvm-3.6.2.src.tar.xz
######################################################################## 100.0%
==> Downloading http://llvm.org/releases/3.6.2/cfe-3.6.2.src.tar.xz
######################################################################## 100.0%
==> cmake -G Unix Makefiles /private/tmp/llvm20160211-42310-16fdrbw/llvm-3.6.2.src -DCMAKE_C_FLAGS_RELEASE=-DNDEBUG -DCMAKE_CXX_FLAGS_RELEAS
==> make
==> make install
==> Caveats
LLVM executables are installed in /usr/local/opt/llvm/bin.
Extra tools are installed in /usr/local/opt/llvm/share/llvm.

This formula is keg-only, which means it was not symlinked into /usr/local.

OS X already provides this software and installing another version in
parallel can cause all kinds of trouble.

Generally there are no consequences of this for you. If you build your
own software and it requires this formula, you'll need to add to your
build variables:

    LDFLAGS:  -L/usr/local/opt/llvm/lib
    CPPFLAGS: -I/usr/local/opt/llvm/include


If you need Python to find bindings for this keg-only formula, run:
  echo /usr/local/opt/llvm/lib/python2.7/site-packages >> /usr/local/lib/python2.7/site-packages/llvm.pth
==> Summary
🍺  /usr/local/Cellar/llvm/3.6.2: 1,350 files, 338.2M, built in 21 minutes 18 seconds

Sau đó, bạn sẽ tìm thấy clang++trên / usr / local / opt / llvm / bin / clang ++ .


1
Hừm, vẫn có thể lấy gói nhị phân dựng sẵn (tức là 'chai')? Ý tôi là khi chỉ định --with-clang? Tôi đang hỏi bởi vì tôi dự định gọi nó trong một môi trường hội nhập liên tục ...
maxschlepzig

Nếu tồn tại, tôi không biết về nó, nhưng tôi không nghĩ rằng nó tồn tại.
jherran

1
Trên thực tế, có một phiên bản đóng chai có sẵn thông qua Phiên bản Homebrew. Xem thêm câu trả lời của tôi.
maxschlepzig

3

Các tùy chọn --with-clang và --with-toolchain không hoạt động nữa. Điều này làm việc cho tôi:

brew install llvm
cd /Library/Developer/CommandLineTools/Packages/
open .
run the installer

Tôi biên dịch với

CC=/usr/local/cellar/llvm/7.0.1/bin/clang CCX=/usr/local/cellar/llvm/7.0.1/bin/clang++ make

1
Thật không may cleb nhị phân homebrew bị hỏng. Nó không bao gồm /usr/local/includethư mục là cơ sở bao gồm dir, vì vậy tất cả quá trình xây dựng phần mềm đều thất bại. Clang được cung cấp bởi xcode không có fsanitize=leakccc-analyzer. Vì vậy, cả hai tiếng kêu trên mac os bị hỏng. Bạn phải xây dựng nó với tất cả các tính năng được kích hoạt từ nguồn. Nhưng việc biên dịch sẽ giết chết CI của bạn như travis. Vì vậy, bạn phải lưu trữ và duy trì CI riêng cho táo. Apple chỉ tốt cho sự phát triển đơn giản, bất cứ điều gì khác đòi hỏi sự đau đớn.
puchu

3

Bây giờ đã đủ để chạy:

brew install llvm

Các chai bây giờ bao gồm clangmặc định.


Chúng tôi đang tìm kiếm câu trả lời dài cung cấp một số giải thích và bối cảnh. Đừng chỉ đưa ra một câu trả lời một dòng; giải thích tại sao câu trả lời của bạn là đúng, lý tưởng với trích dẫn. Câu trả lời không bao gồm giải thích có thể được gỡ bỏ.
Tetsujin

@Tetsujin Tôi đồng ý với bạn, nhưng đây thực chất là một câu trả lời đầy đủ. Nó mô tả đầy đủ những gì cần thiết và tại sao
Lars Nielsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.