Làm cách nào để thiết lập ccache?


36

Tôi muốn sử dụng ccache để tăng tốc độ biên dịch.

Tôi đi qua Làm thế nào để tôi kích hoạt ccache? .

Đây là những gì tôi đã làm cho đến nay:

$ 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

Tôi đã thêm vào ccacheđường dẫn bằng cách thêm nó vào ~/.bashrctập tin của mình :

$ 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

Các liên kết tượng trưng trông ổn:

$ 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*

Liên kết có vẻ tốt:

$ 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

Nhưng bộ đệm trống:

$ 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

Tôi sai ở đâu


Tôi nhận ra nó hoạt động trong trường hợp chung nhưng không phải với tệp tạo tệp của tôi (ví dụ như hoạt động với cmake). Vì vậy, tôi đoán vấn đề là ở makefile của tôi chứ không phải trong cấu hình ccache.
Victor Lamoine

Câu trả lời:


45

Cài đặt:

# 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

Con đường của bạn (ít nhất là bắt đầu) sẽ giống như:

/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++/ gccbây giờ nên trỏ đến:

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

Cấu hình:

Nếu bạn không muốn giới hạn số lượng tệp và kích thước của bộ đệm:

ccache -F 0
ccache -M 0

Hiển thị số liệu thống kê bộ đệm:

ccache -s

Làm trống bộ đệm và đặt lại các số liệu thống kê:

ccache -C -z

Sử dụng:

Mỗi khi bạn gọi gcchoặc g++; ccacheđược gọi là. Lỗi của tôi là tôi đã không xóa các tập tin đã được biên dịch. Chỉ cần xóa tất cả CMakecác tập tin / đầu ra của bạn và cấu hình / biên dịch lại.

Bạn ccachekhông nên để trống sau đó. Bây giờ hãy thử một make cleanmakebạn sẽ thấy nó nhanh hơn nhiều so với biên dịch lại mọi thứ nhờ vào bộ đệm.


Một số cách sau khi làm theo hướng dẫn này, ccache không lưu trữ clang và clang ++ ...
Wang

4

Của bạn $PATHtrông không chính xác; ccacheThư mục nên ở trong đó. Chỉ cần chạy:

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

... và thử lại g++lệnh của bạn . Thư mục này chứa đầy các lệnh proxy gọi ccache. Điều này sẽ làm việc với hầu hết các kịch bản.


Nếu bạn chỉ gọi g++thủ công (không giống như ở trên nơi bạn đang sử dụng), bạn có thể chỉ cần thêm lệnh:

ccache g++ ...

Thư mục này không tồn tại: $ 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

Tôi đã đọc một hướng dẫn Arch. Nếu mọi thứ chỉ trong /usr/lib/ccache/đó sử dụng.
Oli

Nó không hoạt động với export PATH="/usr/lib/ccache/:$PATH" ccache nhị phân là trong /usr/bin/usr/bin/X11. Tôi đã thử với cả hai con đường này mà không thành công
Victor Lamoine

Nhưng các lệnh proxy (như bạn đã liệt kê ở trên) đều có trong /usr/lib/ccache/. Bạn thêm chúng vào con đường của bạn để khi makecuộc gọi g++hoặc cchoặc bất cứ điều gì, nó thực sự gọi ccachephiên bản -enabled.
Oli

Tôi đóng vì liên kết bây giờ trỏ đến ccache (tôi đã chỉnh sửa bài đăng đầu tiên) nhưng bộ đệm luôn trống.
Victor Lamoine

1

Về cài đặt:

Tôi đã thấy rằng trên Ubuntu 18.04 (Bionic Beaver), mặc định được vận chuyển không bắt được các yêu cầu ccc++. Để cài đặt đầy đủ ccache ở đó, bạn cần:

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

Và sau đó (do các liên kết tượng trưng được cập nhật) cũng gọi ccc++bị bắt!

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.