Onde o g ++ armazena fontes compiladas?

0

Eu compilei uma aplicação com um Makefile e g ++ e descobriu-se que o g + + não precisa recompilar o aplicativo inteiro novamente quando modifico o Makefile (mudei para caminhos para as bibliotecas de links dinâmicos). Naquela época, o aplicativo ainda não foi compilado com êxito, portanto, não havia um aplicativo executável final disponível. Mas g + + não compilou toda a aplicação novamente.
Onde esta informação ou fontes compiladas são armazenadas? Eu não vi nada em / tmp nem em nenhum arquivo oculto dentro do meu diretório home, nem dentro do diretório raiz do próprio aplicativo. (Talvez eu não parecesse bem o suficiente).

    
por Bevor 08.12.2013 / 19:10

2 respostas

1

O GCC armazena o que gera onde quer que você (ou neste caso, o Makefile) o informe (com a opção de saída -o ). Ele não faz o cache de resultados de compilação sozinho.

O que torna possíveis recompilações parciais é o próprio Makefile. É um conjunto de alvos (executáveis, arquivos objeto, possivelmente outras coisas) com o que eles dependem e regras para gerar o alvo a partir dessas dependências.

make examina tudo o que precisa ser construído, avaliando as cadeias de dependências e reconstruindo todo o destino que ainda não existe ou com dependências mais recentes que o destino.

Por exemplo, digamos que você tenha este Makefile simples:

foo.o: foo.c foo.h
    gcc -o foo.o -c foo.c

foo: foo.o
    gcc -o foo foo.o

Se você invocar make foo , ele verá o Makefile, veja que foo depende de foo.o . Portanto, ele procura foo.o e vê que isso depende de foo.c e foo.h . Se foo.o for mais antigo que um desses dois arquivos, ou se foo.o não existir, ele executará a linha de compilação gcc -o foo.o -c foo.c , que gera foo.o .

Se você reexecutar make foo depois disso, foo.o será mais recente que o arquivo C e o cabeçalho, então make não recompilará foo.o e pulará para vincular o executável final ( se isso for necessário - pode-se dizer que nada precisa ser feito).

    
por 08.12.2013 / 19:47
1

Conforme o Makefile constrói algumas das fontes, observe os comandos g++ individuais. A opção -o mostra onde a saída das compilações parciais é armazenada.

Assegure-se de examinar a compilação de uma fonte C ++. A última invocação do g ++ é provavelmente a etapa do link e, em seguida, -o geralmente tem o binário como argumento.

    
por 08.12.2013 / 19:45

Tags