Post dirigido a mantener una memoria sobre cómo compilar programas con el g++; información que será retomada en VSCode para construir los programas hechos en C++.
Básico
$g++ -g -std=c++17 <cpp files> -o <target>
Dónde:
- -g Indica que se estará generando la información para depuración (debugging) dentro del compilado. Esta bandera se recomienda utilizar para generar los compilados de Debug, pero se debería eliminar cuando se tenga el compilado de Release.
- -std=c++17 Es la opción del compilador g++ para indicar que se trabajará con el estandar de C++17. En mi caso trabajo a partir del estanar 11 (c++11) y se puede utilizar el estandar 14 (C++14).
- <cpp files> Corresponde a los archivos cpp que estarán compilando para construir el ejecutable. Si son varios archivos estos deben separados por espacio, p.e.:
- -o <target> Indica la ruta y nombre del archivo ejectuable, resultado de la compilación.
Ejemplo:
$g++ -g -std=c++17 main.cpp myclass.cpp mylogs.cpp -o ../bin/sample.out
Se generará el archivo sample.out subro la carpeta bin, ubicada un nivel arriba de dónde se ejecuta la línea de comando, utilizando estadar C++17, utilizando tres archivos cpp y agregando la informción de depuración en el compilado final.
Importante: Este modo de construcción Compila y Enlaza los archivos, dejando el resultado en la ruta u archivo final especificado en la opción -o.
En OSX utiliza clang, compatible con g++, por lo que si se revisa la versión de g++ en OSX este aparecerá como clang:
$ g++ --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin20.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
Mientras que en Linux si se implementa el compilador g++:
$ g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Ambos compiladores, clang u gcc, son compatibles. Para mas información sobre CLang y GCC, vease aquí.