จะติดตั้ง clang ++ ล่าสุดกับ Homebrew ได้อย่างไร


20

ฉันได้พยายาม

brew install llvm

แต่หลังจากนั้นฉันไม่สามารถค้นหาclang++*แฟ้มที่ปฏิบัติการ/usr/localได้

ดังนั้นคำถามของฉัน: วิธีการได้รับเสียงดังกราว ++ ผ่าน Homebrew?

คำตอบ:


18

ตั้งแต่ปีพ. ศ. 2561 พื้นที่เก็บข้อมูลรุ่น Homebrew ('tap') ไม่สามารถใช้งานได้

แพคเกจ Homebrew llvm หุ้นยังคงไม่รวม clang / clang ++ โดยค่าเริ่มต้น ดังนั้นจึงไม่ได้เป็นส่วนหนึ่งของแพ็คเกจ (บรรจุขวด) ที่สร้างไว้ล่วงหน้า

เราสามารถสร้างมันผ่าน:

brew install --with-toolchain llvm

แล้วใช้มันผ่านเช่น:

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

แต่--with-toolchainการสร้างที่เหนี่ยวนำนี้ใช้เวลานานมากและไม่เหมาะสมในสภาพแวดล้อมการรวมอย่างต่อเนื่อง (CI)

อย่างไรก็ตามเสียงดังกราวที่มาพร้อมกับ XCode ล่าสุด (ซึ่งมีอยู่ในสภาพแวดล้อม CI เช่น Travis-CI, เวอร์ชัน 9 เป็นค่าเริ่มต้น, 10 พร้อมใช้งานเช่นกัน) ไม่ได้ล้าสมัยอีกต่อไปเหมือนที่เคยเป็นมา (Apple ใช้รูปแบบแฟนตาซี สำหรับเสียงดังกราวที่ไม่ตรงกับหมายเลขรุ่นเสียงดังกังวานต้นน้ำ แต่ตรวจจับ cmake เช่นสำหรับ AppleClang 9.1.0.9020039 รุ่น 4.0.1) ดังนั้นจึงเพียงพอที่จะสร้างซอฟต์แวร์ C ++ 11 / C ++ 14 ที่มีการอ้างอิงทั่วไปเช่น Boost (เช่นรุ่น 1.67)

2016 State of the Art

llvmแพคเกจใน Homebrew ไม่รวมclang++โดยค่าเริ่มต้น เมื่อติดตั้งคุณต้องเพิ่ม--with-clangไปยังบรรทัดคำสั่ง (เช่นbrew install --with-clang llvm) --with-clangผลตอบแทนพิเศษรวบรวมแพคเกจเต็มเพราะมีเพียงหนึ่ง prebuild ('ขวด') llvmแพคเกจที่มีอยู่ (ไม่clang++) นอกจากนั้นllvmแพคเกจค่อนข้างเก่า - ปัจจุบันมี llvm 3.6 - ที่ 3.7 วางจำหน่าย 6 เดือนที่ผ่านมา

ดังนั้นในการรับclang++3.7 ขวดคุณต้องติดตั้งแพคเกจ llvm จากHomebrew เวอร์ชั่น :

$ brew tap homebrew/versions
$ brew install llvm37

มันมีอยู่แล้วภายใต้:

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

สูตรนี้ยังบันทึก:

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"

โปรดทราบว่าหากคุณทำสิ่งนี้กับ Emscripten คุณจะต้องใช้เวอร์ชันเสียงดังกราวที่มีให้
Claudiu

7
โฮมบรูว์ใหม่ล่าสุดllvm(3.9.1) ในhomebrew-coreประปาในขณะนี้มีclang, clang++ฯลฯ ภายใต้/usr/local/opt/llvm/bin
shadowtalker

1
เติมเต็มความคิดเห็นของ @ ssdecontrol: มี--with-toolchainข้อโต้แย้งที่ผู้ใช้บางรายอาจต้องการ ข้อมูลเพิ่มเติมที่นี่, embeddedartistry.com/blog/2017/2/20/installing-clangllvm-on-osx
driftcatcher

Shadowtalker นั้นถูกต้องและหลังจากนั้น--with-clangอาร์กิวเมนต์ก็ถูกลบออกไป
MCCCS

@shadowtalker ฉันต้องดำเนินการbrew install --with-toolchain llvmตามที่ @hangtwenty แนะนำหรือbrew install llvmเพียงพอหรือไม่ ด้วย--with-toolchainตัวเลือกแพคเกจจะถูกรวบรวม - ซึ่งใช้เวลานาน - เมื่อเปรียบเทียบกับการติดตั้งแพคเกจที่สร้างไว้ล่วงหน้า (ขวด / ไบนารี)
maxschlepzig

4

คุณต้องติดตั้งด้วย--with-clangตัวเลือก:

$ 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

แล้วคุณจะพบclang++ใน/ usr / local / opt / LLVM / bin / เสียงดังกราว ++


1
อืมเป็นไปได้หรือยังที่จะได้รับแพ็คเกจไบนารีที่สร้างไว้ล่วงหน้า (เช่น 'ขวด') ฉันหมายถึงเมื่อระบุ--with-clang? ฉันถามเพราะผมตั้งใจจะโทรว่าในสภาพแวดล้อมที่บูรณาการอย่างต่อเนื่อง ...
maxschlepzig

หากมีอยู่ฉันรู้เรื่องนี้ แต่ฉันไม่คิดว่ามีอยู่จริง
jherran

1
ที่จริงแล้วมีเวอร์ชั่นขวดผ่านทางเวอร์ชันภาษา Homebrew ดูคำตอบของฉันด้วย
maxschlepzig

3

ตัวเลือก - กับเสียงดังกราวและ - ด้วยเครื่องมือห่วงโซ่ไม่ทำงานอีกต่อไป สิ่งนี้ใช้ได้กับฉัน:

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

ฉันรวบรวมด้วย

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

1
แต่น่าเสียดายที่เสียงดังกราวไบนารีโฮมบรูกเสีย ไม่รวม/usr/local/includeโฟลเดอร์เนื่องจากฐานรวม dir ดังนั้นการสร้างซอฟต์แวร์ทั้งหมดจึงล้มเหลว เสียงดังกราวให้โดย Xcode ไม่ได้และfsanitize=leak ccc-analyzerดังนั้นเสียงดังกราวทั้งสองบน mac os จึงพัง คุณต้องสร้างมันด้วยคุณสมบัติทั้งหมดที่เปิดใช้งานจากแหล่งที่มา แต่การรวบรวมจะฆ่า CI ของคุณเหมือนเทรวิส ดังนั้นคุณต้องโฮสต์และดูแล CI แยกต่างหากสำหรับแอปเปิ้ลเท่านั้น แอปเปิ้ลดีสำหรับการพัฒนาที่เรียบง่าย แต่อย่างอื่นก็ต้องเจ็บปวด
puchu

3

ตอนนี้ก็เพียงพอแล้วที่จะเรียกใช้:

brew install llvm

ตอนนี้ขวดจะรวมclangโดยค่าเริ่มต้น


เรากำลังมองหาคำตอบยาว ๆ ที่ให้คำอธิบายและบริบท อย่าเพียงแค่ให้คำตอบเดียว อธิบายว่าทำไมคำตอบของคุณถึงถูกต้องนึกคิดด้วยการอ้างอิง คำตอบที่ไม่รวมคำอธิบายอาจถูกลบออก
Tetsujin

@ Tetsujin ฉันเห็นด้วยกับคุณ แต่นี่คือคำตอบเต็มรูปแบบ มันอธิบายสิ่งที่จำเป็นอย่างสมบูรณ์และเหตุผล
Lars Nielsen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.