ฉันจะตั้งค่า ccache ได้อย่างไร


36

ฉันต้องการใช้ccacheเพื่อเร่งการรวบรวม

ฉันเจอฉันจะเปิดใช้งาน ccache ได้อย่างไร .

นี่คือสิ่งที่ฉันทำไปแล้ว:

$ sudo apt-get install -y ccache
$ dpkg -l ccache
ii  ccache  3.1.6-1   Compiler cache for fast recompilation of C/C++ code
$ whereis ccache
ccache: /usr/bin/ccache /usr/lib/ccache /usr/bin/X11/ccache /usr/share/man/man1/ccache.1.gz

ฉันผนวกเข้าccacheกับพา ธ โดยเพิ่มลงใน~/.bashrcไฟล์ของฉัน:

$ export PATH="/usr/lib/ccache:$PATH"
$ source ~/.bashrc
$ echo $PATH
/usr/lib/ccache:/usr/local/cuda-5.5/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

ลิงก์สัญลักษณ์ดูดี:

$ ll /usr/lib/ccache/
total 76
drwxr-xr-x   2 root root  4096 mai   22 10:48 ./
drwxr-xr-x 253 root root 69632 mai   22 10:48 ../
lrwxrwxrwx   1 root root    16 mai   22 10:48 avr-g++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 avr-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 avr-gcc-4.5.3 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 c++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 c89-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 c99-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 cc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 g++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 g++-4.6 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 gcc-4.6 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-g++ -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-g++-4.6 -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-gcc -> ../../bin/ccache*
lrwxrwxrwx   1 root root    16 mai   22 10:48 x86_64-linux-gnu-gcc-4.6 -> ../../bin/ccache*

ลิงค์ดูดี:

$ which g++
/usr/lib/ccache/g++

$ make
g++ -o affine_euler affine_euler.cpp -O3 -DEIGEN_NO_DEBUG -I/usr/include/eigen3
g++ -o test_eigen test_eigen.cpp -O3 -DEIGEN_NO_DEBUG -I/usr/include/eigen3

แต่แคชว่างเปล่า:

$ ccache -s
cache directory                     /home/dell/.ccache
cache hit (direct)                     0
cache hit (preprocessed)               0
cache miss                             0
files in cache                         0
cache size                             0 Kbytes
max cache size                       1.0 Gbytes

ฉันผิดตรงไหน


ฉันรู้ว่ามันใช้งานได้ในกรณีทั่วไป แต่ไม่ใช่กับ makefile ของฉัน (ใช้ได้กับ cmake เป็นต้น) ดังนั้นฉันคิดว่าปัญหาอยู่ใน makefile ของฉันและไม่ได้อยู่ในการกำหนดค่า ccache
Victor Lamoine

คำตอบ:


45

การติดตั้ง:

# Install package
sudo apt install -y ccache

# Update symlinks
sudo /usr/sbin/update-ccache-symlinks

# Prepend ccache into the PATH
echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc

# Source bashrc to test the new PATH
source ~/.bashrc && echo $PATH

เส้นทางของคุณ (อย่างน้อยเริ่มต้น) ควรมีลักษณะดังนี้:

/usr/lib/ccache:/usr/local/cuda-5.5/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

และg++/ gccควรชี้ไปที่:

which g++ gcc
/usr/lib/ccache/g++
/usr/lib/ccache/gcc

การกำหนดค่า:

หากคุณไม่ต้องการ จำกัด จำนวนไฟล์และขนาดของแคช:

ccache -F 0
ccache -M 0

แสดงสถิติแคช:

ccache -s

ล้างแคชและรีเซ็ตสถิติ:

ccache -C -z

การใช้งาน:

ทุกครั้งที่คุณโทรgccหรือg++; ccacheถูกเรียก. ความผิดพลาดของฉันคือฉันไม่ได้ลบไฟล์ที่คอมไพล์แล้ว เพียงลบCMakeไฟล์ / output ทั้งหมดของคุณและกำหนดค่า / คอมไพล์อีกครั้ง

คุณccacheไม่ควรว่างเปล่า ตอนนี้ลอง a make cleanและmakeคุณจะเห็นว่าเร็วกว่าการรวบรวมทุกอย่างอีกครั้งด้วยแคช


หลังจากทำตามคำแนะนำนี้แล้ว ccache จะไม่ส่งเสียงดังกราวและเสียงดังกังวาน ++ ...
วัง

4

คุณ$PATHดูไม่ถูกต้อง ccacheไดเรกทอรีของควรอยู่ในนั้น เพิ่งรัน:

export PATH="/usr/lib/ccache/:$PATH"

... และลองg++คำสั่งของคุณอีกครั้ง ccacheไดเรกทอรีนี้เต็มไปด้วยคำสั่งพร็อกซี่ที่โทร สิ่งนี้ควรใช้กับสคริปต์ส่วนใหญ่


หากคุณเพิ่งโทรg++ด้วยตนเอง (ไม่เหมือนด้านบนที่คุณใช้ยี่ห้อ) คุณสามารถเพิ่มคำสั่งล่วงหน้าได้:

ccache g++ ...

ไดเรกทอรีนี้ไม่มีอยู่: $ ls -1 /usr/lib/ccache/ avr-g++ avr-gcc avr-gcc-4.5.3 c++ c89-gcc c99-gcc cc g++ g++-4.6 gcc gcc-4.6 x86_64-linux-gnu-g++ x86_64-linux-gnu-g++-4.6 x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc-4.6
Victor Lamoine

ฉันกำลังอ่านบทช่วยสอนของ Arch หากทุกอย่าง/usr/lib/ccache/ใช้เพียงแค่นั้น
Oli

มันไม่ได้ทำงานกับexport PATH="/usr/lib/ccache/:$PATH" ccache ไบนารีในและ/usr/bin /usr/bin/X11ฉันลองกับเส้นทางทั้งสองนี้โดยไม่ประสบความสำเร็จ
Victor Lamoine

แต่คำสั่งพร็อกซี่ (ตามที่คุณได้ระบุไว้ข้างต้น) /usr/lib/ccache/ที่มีทั้งหมดใน คุณสามารถเพิ่มเหล่านี้เพื่อเส้นทางของคุณเพื่อที่ว่าเมื่อmakeโทรg++หรือccหรืออะไรก็ตามก็จริงเรียกccacheรุ่นที่เปิดใช้งาน
Oli

ฉันปิดเพราะตอนนี้ลิงก์ชี้ไปที่ ccache (ฉันแก้ไขโพสต์แรก) แต่แคชว่างเสมอ
Victor Lamoine

1

เกี่ยวกับการติดตั้ง:

ฉันพบว่าบนUbuntu 18.04 (ไบโอนิคบีเวอร์) เริ่มต้นการจัดส่งไม่ได้จับสวดของและcc c++ในการติดตั้ง ccache ที่นั่นคุณต้อง:

sudo apt install ccache
sudo /usr/sbin/update-ccache-symlinks
export PATH="/usr/lib/ccache/:$PATH"

และจากนั้น (เนื่องจากการเชื่อมโยงที่อัปเดตแล้ว) ก็โทรหาccและc++ถูกจับ!

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