Ich möchte mit GNU Autotools zum ersten Mal mein C-Programm namens MyShell packen. Ich habe es zweimal versucht, bin aber beide Male gescheitert. Ich folgte this simple tutorial, aber wo mein Programm unterscheidet und was das Problem verursacht (denke ich) ist, dass es 1 .h
Datei und 5 .c
Dateien gibt, während dieses Tutorial nur eine einzige .c
Datei verwendet.Probleme mit dem Lernen, wie man GNU Autotools benutzt, um mein Programm zu packen
Hier ist die Dateistruktur meines Programms:
myshell/
- README
- src/
src/
- CommandExecutor.c
- CommandReader.c
- ForkLauncher.c
- Main.c
- MyShell.h
- MyShellLoop.c
Alle Hinweise, wie die Makefile schreiben .am-Dateien, die configure.ac-Datei usw. werden sehr geschätzt, oder aber eine detailliertere Anleitung zur Verwendung von Autotools für ein komplexeres Programm.
EDIT
Dies sind die Dateien, die ich verwendet:
myshell/src/Makefile.am
bin_PROGRAMS = MyShell
MyShell_SOURCES = Main.c
myshell/Makefile.am
SUBDIRS = src
dist_doc_DATA = README
myshell/configure.ac
AC_INIT([MyShell], [1.0], [<my email address>])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])
AC_OUTPUT
Im Tutorial I verknüpft sind, hat die configure.ac Datei die Zeile
AC_CONFIG_HEADERS([config.h])
Sollte ich config.h
mit MyShell.h
ersetzt?
'Tis komplex. Passen Sie Ihr Programm an, so dass es auf mehreren verschiedenen Systemtypen kompiliert? Wenn dies der Fall ist, benötigen Sie eine separate 'config.h'-Datei, die vom' configure'-Skript auf dem Client-Rechner generiert wird, und die AutoTools erstellt das Konfigurations-Skript (etc) anhand der von Ihnen angegebenen Informationen. Wenn Sie Ihr Programm nicht konfigurieren müssen, ist die Verwendung von AutoTools wahrscheinlich überfällig. –
@ JonathanLeffler In Zukunft möchte ich, dass es auf verschiedenen Systemen läuft, aber für den Moment muss es nur unter Linux laufen. Es ist eine Aufgabe und wir wurden gebeten, Autotools zu verwenden, um es zu packen, oder "schreiben Sie Ihr eigenes Makefile und erstellen Sie ein tar.gz maiuell". – KOB
Zwischen den beiden würde ich jedes Mal das manuell geschriebene Makefile nehmen - es ist nicht so schwer (obwohl es nicht ganz trivial ist, es sauber zu machen). Übungen sind jedoch Übungen und bieten eine Lernerfahrung. Ich habe ein paar autokonfizierte Programme, eines mit 'automake' auch - aber ich habe die Autokonfektion vor langer Zeit gemacht (2007 nach dem Aussehen der Revisionshistorien). Ich hatte viel Zeit, um die Details zu vergessen (und mich von den Wunden zu erholen, die das System mir zugefügt hat). –