Los programas de GNU son grandes y complicados. El tamaño de GNU Hello World muestra que incluso el proyecto GNU más simple necesita una gran cantidad de código y configuración a su alrededor.
Las autotools son difíciles de entender para un principiante, pero no es necesario para entender a leer el código. Incluso si modifica el código, la mayoría de las veces puede simplemente ejecutar make para compilar los cambios.
Para leer el código, se necesita un buen editor (VIM, Emacs) o IDE (Eclipse) y algunas herramientas para navegar a través de la fuente. El proyecto tar contiene un directorio src, que es un buen lugar para comenzar. Un programa siempre comienza con la función principal, así que haga
grep main *.c
o use su IDE para buscar esta función. Está en tar.c. Ahora, saltar todas las cosas de la inicialización, hasta el
/* Main command execution. */
Allí, se ve un interruptor para subcomandos. Si pasa -x hace esto, si pasa -c lo hace, etc. Esta es la estructura de bifurcación de esos comandos. Si usted quiere saber lo que estos son de macro, ejecutar
grep EXTRACT_SUBCOMMAND *.h
allí se puede ver que se enumeran en COMMON.H.
A continuación EXTRACT_SUBCOMMAND que ver algo gracioso:
read_and (extract_archive);
La definición de read_and() (otra vez obtenida con grep):
read_and (void (*do_something) (void))
El único parámetro es un puntero función como una devolución de llamada , entonces read_and supuestamente leerá algo y luego llamará a la función extract_archive
. Una vez más, grep en él y verá esto:
if (prepare_to_extract (current_stat_info.file_name, typeflag, &fun))
{
if (fun && (*fun) (current_stat_info.file_name, typeflag)
&& backup_option)
undo_last_backup();
}
else
skip_member();
Tenga en cuenta que el trabajo real que sucede cuando se llama a fun
. fun
es de nuevo un puntero a la función, que se establece en prepare_to_extract. fun
puede apuntar a extract_file
, que hace la escritura real.
espero que caminaba mucho a través de esto y demostrado cómo navego por código fuente. No dude en ponerse en contacto conmigo si tiene preguntas relacionadas.
Debe haber una broma escondida en el hecho de que la última versión de GNU Hello (2.4.90) es una descarga de 566 KB, como un archivo tar.gz. Eso es solo ... aterrador. – unwind
@unwind GNU Hello es más que un simple programa "Hello World": imprime "Hello World" en muchos idiomas, hace café y le presta dinero cuando lo necesita. – ereOn
GNU Hello es un esqueleto que muestra el uso básico de las Autotools, cómo analizar las opciones de línea de comandos y cómo admitir la internacionalización. La mayor parte de la descarga es probablemente archivos de mensajes como [esto] (http://cvs.savannah.gnu.org/viewvc/hello/po/it.po?root=hello&view=markup) –