How to use ccache with Make?
У меня есть исходный каталог, который использует makefile для компиляции кода. Этот файл makefile / configure не написан для совместимости ccache. Поэтому я подумал использовать ccache. Я создал псевдоним в.bashrc как alias gcc='ccache gcc'
, но Makefile все еще не рассматривает это определение gcc. Так что я могу сделать, не касаясь Makefile/configure
файл такой, что требуется ccache gcc
вместо gcc
, Также CC='ccache gcc' ./configure не вариант, так как он не запрашивает CC.
Если я напишу Makefile, то смогу предоставить ${gcc), но это не вариант, так как я не пишу Makefile. Есть ли способ, которым нам не нужно ничего менять в исходном файле, но все же включить ccache
компилирование.
3 ответа
Как описано в прекрасном руководстве: Создайте символическую ссылку с именем "gcc" в каталоге, который указан в вашем PATH, перед тем, который содержит настоящий gcc. Это приведет к прозрачному использованию ccache, без необходимости внесения каких-либо изменений в make-файл.
Псевдонимы локальны для оболочки, в которой они созданы; в отличие от переменных окружения, они не передаются никаким программам, которые вызывает оболочка (включая make). Make вызывает /bin/sh, а не / bin / bash, и /bin/sh не читает ваш ~/.bashrc и т. Д., Поэтому никакие псевдонимы, определенные там, не будут вам полезны.
Я не совсем уверен, почему вы наложили некоторые из упомянутых вами ограничений на себя: эти вещи работают нормально, и у вас нет причин избегать их, которые я понимаю. Например, обеспечение другого CC с помощью configure будет работать, если версия autoconf не очень старая. Вы можете сделать это:
./configure CC='ccache gcc'
например, и это будет устанавливать значение по умолчанию CC
в вашем make-файле, чтобы быть ccache gcc
, Я не знаю, что вы подразумеваете под "не просит CC".
Если вы предпочитаете, вы также можете отменить настройку CC
на make
командная строка, вот так:
make CC='ccache gcc'
что тоже отлично работает.
Добавить упакованный ccache в PATH
PATH="/usr/lib/ccache:${PATH}" make
Это универсальный метод, который:
- работает сразу для всех компиляторов: C, C++ и т. д.
- меньше зависит от фактического
Makefile
настроить какCC
мог - не нарушает сборку людей, если вы что-то автоматизируете, а целевой пользователь не имеет
ccache
установлены
Упоминается в 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.