O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

1. O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 09/07/2015 - 16:37h

Boa tarde a todos,

Noto que a algumas versões do Fedora incluindo a atual o GCC e G++ fazem tipo um cache da compilação porque quando limpo tudo e ponho para compilar novamente ele compila rápido a não ser que exista alguma alteração em header ou código fonte. Isso é algum parâmetro ativo por padrão no compilador do Fedora, é uma característica dele ou algum programa auxiliar por fora que faz isso?

Queria usar o mesmo recurso no Debian(e outras distros) porque isso otimiza muito o tempo de compilação, as vezes você tem um projeto grande e você ganha muito tempo com esse tipo de cache.


  


3. Re: O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

Zhu Sha Zang
zhushazang

(usa Gentoo)

Enviado em 09/07/2015 - 19:51h

Já consultou a documentação do Fedora quanto ao ambiente de desenvolvimento. Pois pelo que fala, pode ser apenas suposição sua. Por favor, nos dê fatos concretos. Como as flags de compilação, ambiente de variáveis, formas de compilação e comparativos que te fazer acreditar que houve uma "aceleração" na compilação.

Fatos por favor, pode ser um ccache apenas ativado por padrão.

Atenciosamente

---
Hail Hydra!


4. Re: O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian?

M.
XProtoman

(usa Fedora)

Enviado em 09/07/2015 - 21:27h

Boa noite,

Modifiquei um header de proposito para ele compilar tudo, tempo:
real 1m42.148s
user 1m30.159s
sys 0m10.684s

Agora limpando tudo(exatamente removendo os objetos) e compilando novamente(sem alterações), tempo:
real 0m9.040s
user 0m7.601s
sys 0m1.318s

Só pode ser cache.

Estou sem Debian, mas resultado de gcc -v do Fedora:
$ gcc -v
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/5.1.1/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,objc,obj-c++,fortran,ada,go,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --disable-libgcj --with-default-libstdcxx-abi=c++98 --with-isl --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 5.1.1 20150612 (Red Hat 5.1.1-3) (GCC)


5. Re: O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

Zhu Sha Zang
zhushazang

(usa Gentoo)

Enviado em 09/07/2015 - 21:35h

Rapaz, você está usando gcc-5. Confere a versão no Debian e compare com o mesmo comando (gcc -v). Acho que a comparação é indevida. Houve otimização no gcc, mas a versão 5, por aqui é "very unstable" e no Debian provavelmente a mesma coisa.

Atenciosamente

---
Hail Hydra!


6. Re: O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 09/07/2015 - 21:36h

Flags que uso:
OPTFLAGS	+=-O2
OPTFLAGS +=-fomit-frame-pointer

CXXFLAGS +=-std=c++14
CXXFLAGS +=-pedantic-errors
CXXFLAGS +=-Wall -Werror -Wextra
CXXFLAGS +=-fstack-protector-all
CXXFLAGS +=-fPIC




7. Re: O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 09/07/2015 - 21:37h

Boa noite,

Acho que o GCC do Fedora 21 era 4.9.x e já sentia isso. Acho que no Fedora 20 também já sentia esse mesmo resultado.
zhushazang escreveu:

Rapaz, você está usando gcc-5. Confere a versão no Debian e compare com o mesmo comando (gcc -v). Acho que a comparação é indevida. Houve otimização no gcc, mas a versão 5, por aqui é "very unstable" e no Debian provavelmente a mesma coisa.

Atenciosamente

---
Hail Hydra!







8. Re: O GCC/G++ do Fedora faz um tipo de cache, existe algo similar no Debian? [RESOLVIDO]

M.
XProtoman

(usa Fedora)

Enviado em 09/07/2015 - 22:09h

Boa noite,

Tinha visto sobre isso mas não pensava que pudesse ser ele, o meu Fedora aparentemente vem com ele. O man do ccache, diz as formas de usar:

RUN MODES
There are two ways to use ccache. You can either prefix your compilation commands with ccache or you can let
ccache masquerade as the compiler by creating a symbolic link (named as the compiler) to ccache. The first
method is most convenient if you just want to try out ccache or wish to use it for some specific projects. The
second method is most useful for when you wish to use ccache for all your compilations.

To use the first method, just make sure that ccache is in your PATH.

To use the symlinks method, do something like this:

cp ccache /usr/local/bin/
ln -s ccache /usr/local/bin/gcc
ln -s ccache /usr/local/bin/g++
ln -s ccache /usr/local/bin/cc
ln -s ccache /usr/local/bin/c++

And so forth. This will work as long as the directory with symlinks comes before the path to the compiler
(which is usually in /usr/bin). After installing you may wish to run “which gcc” to make sure that the correct
link is being used.

Warning
The technique of letting ccache masquerade as the compiler works well, but currently doesn’t interact well
with other tools that do the same thing. See USING CCACHE WITH OTHER COMPILER WRAPPERS.

Warning
Do not use a hard link, use a symbolic link. A hard link will cause “interesting” problems.


O g++ é um arquivo:
$ file /usr/bin/g++
/usr/bin/g++: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=9ef56fc78e6d74ee928d6b4a1e1f34387a7bc6f0, stripped


O ccache tem um parâmetro para limpar o cache:

-C, --clear
Clear the entire cache, removing all cached files, but keeping the configuration file.


Usei esse parâmetro e realmente ele passou a construir tudo.

Obrigado pela ajuda, depois vou instalar o Debian em máquina virtual para testar. Recomendo a quem programa em C e C++ usar esse recurso.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts