Por que alguém desejaria compilar vários arquivos .cpp para o mesmo executável?

6

Por que você faria

g++ -Wall -I/usr/local/include/thrift *.cpp -lthrift -o something

em vez de:

g++ -Wall -I/usr/local/include/thrift -c Something.cpp -o something.o
g++ -Wall -I/usr/local/include/thrift -c Something_server.cpp -o server.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_constants.cpp -o constants.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_types.cpp -o types.o

e depois:

g++ -L/usr/local/lib -lthrift *.o -o Something_server

Estou certo de que o primeiro passo faz essencialmente a mesma coisa que a segunda sequência?

Além disso, para torná-los idênticos, something be Something_server na primeira linha?

    
por algorithmicCoder 24.05.2011 / 03:46

1 resposta

17

Você está certo de que terminará com o mesmo executável no final (embora com um nome diferente); no primeiro caso, o gcc irá criar um monte de arquivos de objetos temporários que serão removidos após o link, versus o segundo caso em que você está criando os arquivos de objetos por conta própria.

A principal razão para fazer as coisas da segunda maneira é permitir construção incremental . Depois de ter compilado seu projeto uma vez, digamos que você altere Something.cpp . O único arquivo objeto afetado é something.o - não há razão para perder tempo reconstruindo os outros. Um sistema de compilação como make reconheceria isso e apenas reconstruiria something.o antes de vincular todos os arquivos de objeto.

    
por 24.05.2011 / 04:24

Tags