it-swarm.dev

Usando G ++ para compilar múltiples archivos .cpp y .h

Acabo de heredar un código C++ que se escribió mal con un archivo cpp que contenía la función principal y un montón de otras funciones. También hay archivos .h que contienen clases y sus definiciones de funciones.

Hasta ahora el programa fue compilado usando el comando g++ main.cpp. Ahora que he separado las clases en archivos .h y .cpp, ¿necesito usar un archivo make o puedo seguir usando el comando g++ main.cpp?

130
Meir

listar todos los otros archivos cpp después de main.cpp.

es decir

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

y así.

O puedes compilarlos todos individualmente. Luego vinculas todos los archivos ".o" resultantes juntos.

174
Goz

Para compilar por separado sin vincular, necesita agregar la opción -c:

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

Ahora que he separado las clases en archivos .h y .cpp, ¿necesito usar un makefile o puedo seguir usando el comando "g ++ main.cpp"?

Compilar varios archivos a la vez es una mala elección si va a poner eso en el Makefile.

Normalmente en un Makefile (para GNU/Make ) debería bastar con escribir eso:

# "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

De esa manera, make se recompilaría correctamente solo lo que necesita ser recompilado. También se pueden agregar algunos ajustes para generar las dependencias del archivo de encabezado, de modo que make también podría reconstruir correctamente lo que se debe reconstruir debido a los cambios en el archivo de encabezado.

18
Dummy00001

Aún puedes usar g ++ directamente si quieres:

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

donde f1.cpp y f2.cpp son los archivos con las funciones en ellos. Para obtener detalles sobre cómo usar make para hacer la compilación, consulte la excelente GNU make documents .

8
anon

Los archivos .h no tienen nada que ver con la compilación ... solo te interesan los archivos cpp ... así que escribe g ++ filename1.cpp filename2.cpp main.cpp -o myprogram

significa que está compilando cada uno de los archivos cpp y luego los vincula a myprgram.

entonces ejecute su programa ./myprogram

3
Matthew

Puede usar varios comandos g ++ y luego vincularlos, pero lo más fácil es usar un Makefile tradicional o algún otro sistema de compilación: como Scons (que a menudo son más fáciles de configurar que los Makefiles).

3
gauteh

Sé que esta pregunta se hizo hace años, pero todavía quería compartir cómo compilo habitualmente varios archivos c ++.

  1. Digamos que tiene 5 archivos cpp, todo lo que tiene que hacer es usar el * en lugar de escribir cada nombre de archivo cpp E.g g ++ -c * .cpp -o myprogram.
  2. Esto generará "myprogram"
  3. ejecuta el programa ./myprogram

¡¡eso es todo!!

La razón por la que uso * es que, ¿qué sucede si tiene 30 archivos cpp y los escribe todos? o simplemente use el signo * y ahorre tiempo :)

p.s Use este método solo si no le importa el makefile.

3
zobair

Solía ​​usar un Makefile personalizado que compilaba todos los archivos en el directorio actual, pero tenía que copiarlo en cada directorio que lo necesitaba, cada vez.

Así que creé mi propia herramienta - Compilador universal que hizo el proceso mucho más fácil cuando compila muchos archivos.

0
Shubham Chaudhary