2016-03-31 5 views
2

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?

+0

'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. –

+0

@ 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

+0

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). –

Antwort

2
MyShell_SOURCES = Main.c 

Das scheint falsch zu sein. Sie müssen alle Quelldateien auflisten, including header files.

Sollte ich config.h durch MyShell.h ersetzt haben?

Nein. sollte mit dem configure Skript aus einer config.h.in Datei generiert werden. "Wie" kann schön sein complex.

+0

ok macht Sinn, nur eine Komma getrennte Liste? Außerdem muss ich dies als College-Aufgabe einreichen, wobei der Name des Programms im Format xxxx_xxxx sein muss. Kann ich einfach 'MyShell' durch 'xxxx_xxxx' in den Makefiles ersetzen und Datei konfigurieren? Oder verursacht dies ein Problem bei 'xxxx_xxxx_Sources = MyShell.h, Main.c ...'? – KOB

+1

AFAIK sollte dies kein Problem sein. –

+1

Warte, nicht * durch Komma getrennt * ... ** Leerzeichen getrennt ** .. wie in dem Link, den ich gepostet habe. –