Usando o G ++ para compilar vários arquivos .cpp e .h

Acabei de herdar algum código C ++ que foi escrito mal com um arquivo cpp que continha o principal e um monte de outras funções. Há também arquivos .h que contêm classs e suas definições de function.

Até agora, o programa foi compilado usando o comando g++ main.cpp . Agora que eu separei as classs para os arquivos .h e .cpp , preciso usar um makefile ou ainda posso usar o comando g++ main.cpp ?

lista todos os outros arquivos cpp após main.cpp.

ou seja

 g++ main.cpp other.cpp etc.cpp 

e assim por diante.

Ou você pode compilá-los todos individualmente. Em seguida, você vincula todos os arquivos “.o” resultantes.

Para compilar separadamente sem vincular você precisa adicionar a opção -c:

  g++ -c myclass.cpp g++ -c main.cpp g++ myclass.o main.o ./a.out 

Agora que eu separei as classs para os arquivos .h e .cpp, preciso usar um makefile ou ainda posso usar o comando “g ++ main.cpp”?

Compilar vários arquivos de uma só vez é uma má escolha se você for colocar isso no Makefile.

Normalmente em um Makefile (para GNU / Make ) deve bastar escrever isso:

 # "all" is name of the default target, running "make" without params would use it all: executable1 # for C++, replace CC (c compiler) with CXX (c++ compiler) which is used as default linker CC=$(CXX) # tell which files should be used, .cpp -> .o make would do automatically executable1: file1.o file2.o 

Dessa forma, seria recompilar adequadamente apenas o que precisa ser recompilado. Também é possível adicionar alguns ajustes para gerar as dependencies do arquivo de header – para que o make também reconstrua corretamente o que precisa ser reconstruído devido às alterações no arquivo de header.

Você ainda pode usar o g ++ diretamente se quiser:

 g++ f1.cpp f2.cpp main.cpp 

onde f1.cpp e f2.cpp são os arquivos com as funções neles. Para detalhes de como usar o make para fazer a construção, veja o excelente GNU make documentation .

Eu sei que essa pergunta foi feita anos atrás, mas ainda queria compartilhar como eu normalmente compilo vários arquivos c ++.

  1. Vamos dizer que você tem 5 arquivos cpp, tudo que você tem a fazer é usar o * ao invés de digitar cada nome de arquivo cpp Por exemplo, g ++ -c * .cpp -o myprogram.
  2. Isso irá gerar “myprogram”
  3. execute o programa ./myprogram

Isso é tudo!!

O motivo pelo qual estou usando * é que, se você tiver 30 arquivos cpp, você digitaria todos eles? ou apenas use o sinal * e economize tempo 🙂

ps Use este método somente se você não se importa com o makefile.

Você pode usar vários comandos g ++ e, em seguida, vincular, mas o mais fácil é usar um Makefile tradicional ou algum outro sistema de compilation: como o Scons (que geralmente são mais fáceis de configurar do que os Makefiles).

.h arquivos não tem nada a ver com a compilation … você só se preocupa com arquivos cpp … então digite g ++ nome_do_arquivo1.cpp nome_do_arquivo2.cpp main.cpp -o myprogram

significa que você está compilando cada arquivo cpp e, em seguida, os vinculou juntos no myprgram.

em seguida, execute o seu programa ./myprogram

Eu costumava usar um Makefile personalizado que compilava todos os arquivos no diretório atual, mas eu tinha que copiá-lo em todos os diretórios que eu precisava, toda vez.

Então criei minha própria ferramenta – Universal Compiler, que facilitou muito o processo ao compilar muitos arquivos.

~ / In_ProjectDirectory $ g ++ coordin_main.cpp coordin_func.cpp coordin.h

~ / In_ProjectDirectory $ ./a.out

… Trabalhou !!

Usando o Linux Mint com o Geany IDE

Quando salvei cada arquivo no mesmo diretório, um arquivo não foi salvo corretamente no diretório; o arquivo coordin.h. Então, verifiquei novamente e ele foi salvo como coorden.h, e não incorretamente como -> coordin.h.gch. As pequenas coisas. Arg !!