Как использовать ccache с Make? - PullRequest
3 голосов
/ 18 марта 2012

У меня есть исходный каталог, который использует makefile для компиляции кода.Этот файл makefile / configure не написан для совместимости ccache.Поэтому я подумал использовать ccache.Я создал псевдоним в .bashrc как alias gcc='ccache gcc', но Makefile все еще не рассматривает это определение gcc.Так что я могу сделать что-нибудь, не касаясь файла Makefile/configure так, чтобы вместо gcc потребовалось ccache gcc.Также CC = 'ccache gcc' ./configure не является опцией, так как он не запрашивает CC.

Если я напишу Makefile, тогда я могу предоставить $ {gcc), но это не вариант, так какЯ не пишу Makefile.Есть ли способ, которым нам не нужно ничего менять в исходном файле, но все равно включить компиляцию ccache.

Ответы [ 3 ]

7 голосов
/ 18 марта 2012

Псевдонимы локальны для оболочки, в которой они созданы; в отличие от переменных среды они не передаются никаким программам, которые вызывает оболочка (включая make). Сделайте вызовы / bin / sh, а не / bin / bash, и / bin / sh не читает ваш ~ / .bashrc и т. Д., Поэтому никакие псевдонимы, определенные там, не будут вам полезны.

Я не совсем уверен, почему вы наложили некоторые из упомянутых вами ограничений на себя: эти вещи работают нормально, и у вас нет причины избегать их, которые я понимаю. Например, предоставление другого CC с configure будет работать , если версия autoconf не очень старая. Вы можете сделать это:

./configure CC='ccache gcc'
Например,

, и в вашем make-файле значение по умолчанию CC будет равно ccache gcc. Я не знаю, что вы подразумеваете под ", он не запрашивает CC ".

При желании вы также можете переопределить настройку CC в командной строке make, например:

make CC='ccache gcc'

, который также отлично работает.

5 голосов
/ 27 марта 2012

Как описано в прекрасном руководстве : создайте символическую ссылку с именем "gcc" в каталоге, который указан в вашем PATH, перед тем, который содержит настоящий gcc. Это приведет к прозрачному использованию ccache без каких-либо изменений в make-файле.

0 голосов

Добавить упакованный ccache в PATH

PATH="/usr/lib/ccache:${PATH}" make

Это универсальный метод, который:

  • работает для всех компиляторов одновременно: C, C ++ и т. Д.
  • зависит меньше от фактической Makefile настройки, как CC может
  • не нарушает сборку людей, если вы что-то автоматизируете и у целевого пользователя не установлена ​​ccache 1016 *

Упоминается на man ccache:

Чтобы использовать второй метод в системе Debian, проще всего просто добавить / usr / lib / ccache к вашему PATH. / usr / lib / ccache содержит символические ссылки для всех компиляторов, в настоящее время установленных как Debian пакеты.

И вы можете подтвердить это с помощью:

ls -l /usr/lib/ccache

, который содержит тонну возможных имен GCC, в том числе для установленных кросс-компиляторов:

total 0
lrwxrwxrwx 1 root root 16 May  6 13:51 aarch64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 aarch64-linux-gnu-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jun 23 18:25 arm-linux-gnueabi-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jun 23 18:25 arm-linux-gnueabi-g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-linux-gnueabi-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-linux-gnueabi-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May 28 22:11 arm-linux-gnueabihf-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May 28 22:11 arm-linux-gnueabihf-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-gcc-6.3.1 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c89-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c99-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 cc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 clang -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 clang++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-7 -> ../../bin/ccache

Протестировано на Ubuntu 16.04.

...