Uno de mis amigos "no programadores" recientemente decidió realizar un programa en C++ para resolver un problema mecánico complicado.Compilación y vinculación de varios archivos en C++
Él escribió cada función en un archivo .cpp separada, a continuación, todos ellos incluidos en el fichero fuente principal, algo como esto:
main.cpp:
#include "function1.cpp"
#include "function2.cpp"
...
int main()
{
...
}
Luego compilado el código, con una sola línea de gcc:
g++ main.cpp // took about 2 seconds
Ahora, sé que este debería funcionar, pero no estoy seguro de si incluir archivos .cpp directamente en el programa principal es una buena idea. He visto el siguiente esquema varias veces, donde todos los prototipos de las funciones van en un fichero de cabecera con la palabra clave extern, así:
funcs.h:
extern void function1(..);
extern void function2(..);
...
main.cpp:
...
#include "funcs.h"
...
& compilar con:
g++ -c function1.cpp
g++ -c function2.cpp
...
g++ -c main.cpp
g++ -o final main.o function1.o function2.o ...
Creo que este esquema es mejor (con un archivo MAKE, por supuesto). ¿Qué razones puedo darle a mi amigo para convencerlo así?
Todo termina siendo lo mismo, menos posible algunas optimizaciones de vinculador que no se pueden aplicar a través de 'módulos'. – leppie
@leppie: gcc y msvc tienen opciones de optimización de tiempo de enlace que le permiten al vinculador optimizar en varios "módulos" de archivos de origen. – rubenvb