मैं 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

मैं गलत कहाँ हूँ?


मैंने महसूस किया कि यह सामान्य मामले में काम करता है लेकिन मेरे मेकफाइल के साथ नहीं (उदाहरण के लिए cmake के साथ काम करता है)। इसलिए मुझे लगता है कि समस्या मेरे मेकफाइल में है और ccache कॉन्फ़िगरेशन में नहीं है।
विक्टर लामोइन

जवाबों:


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/ आउटपुट फ़ाइलों को हटा दें और फिर से कॉन्फ़िगर / संकलन करें।

आपका ccacheतब खाली नहीं होना चाहिए। अब एक कोशिश make cleanऔर makeऔर आप इसे से कैश करने के लिए फिर से संकलन सब कुछ धन्यवाद तेज हो गया है देखेंगे।


कुछ इस निर्देश का पालन करने के बाद, कैश कैश क्लैंग और क्लैंग ++ को कैश नहीं करता है ...
वांग

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
विक्टर लामोइन

मैं एक आर्क ट्यूटोरियल पढ़ रहा था। अगर सब कुछ बस में है /usr/lib/ccache/कि उपयोग करें।
ओली

यह export PATH="/usr/lib/ccache/:$PATH" ccache बाइनरी के साथ काम नहीं करता है /usr/binऔर में है /usr/bin/X11। मैंने बिना सफलता के इन दोनों रास्तों को
आजमाया

लेकिन प्रॉक्सी कमांड (जैसा कि आपने ऊपर सूचीबद्ध किया है) सभी में हैं /usr/lib/ccache/। आप इतनी है कि जब अपने पथ में इन्हें जोड़ने के makeकॉल g++या ccया जो कुछ भी, यह वास्तव में कॉल कर रहा है ccache-सक्षम संस्करण।
ओली

मैं पास हूं क्योंकि लिंक अब ccache को इंगित करता है (मैंने पहली पोस्ट संपादित की है) लेकिन कैश हमेशा खाली है।
विक्टर लामोइन

1

स्थापना के बारे में:

मैंने पाया कि पर उबंटू 18.04 (बायोनिक ऊदबिलाव) भेज दिया चूक के आमंत्रण को पकड़ने नहीं है ccऔर c++। पूरी तरह से ccache स्थापित करने के लिए, आपको आवश्यकता है:

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

और फिर (अद्यतन सहानुभूति के कारण) भी कॉल ccऔर c++पकड़ा जाता है!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.