Moin moin, durch den Thread "Make Problem" habe ich jetzt autoconf & co. näher angeguckt. http://sources.redhat.com/autobook/autobook/autobook_toc.html#SEC_Contents Mit dieser Einleitung wollt ich nun anfangen, soweit so gut! "Makefile.am" und "configure.in" angelegt, danach habe ich aclocal autoconf automake --add-missing aufgerufen. Als letztes noch mit "touch" die fehlenden Dateien angelegt... (NEWS,COPYING, usw....) Prima, scheint bis hier alles OK zu sein, ist es aber nicht ;( Laut der Einleitung reicht nun einfach ein "./configure" um das Makefile zu generieren. Stimmt tut's auch, aber das Makefile funktioniert nicht wirklich;( ------------------- snip ------------------------------------ voodoo@yamato tmp $ make gcc -DPACKAGE=\"sigger\" -DVERSION=\"1.0\" -I. -I. -g -O2 -c main.c main.c: In Funktion »main«: main.c:13: error: `SIGINT' undeclared (first use in this function) main.c:13: error: (Each undeclared identifier is reported only once main.c:13: error: for each function it appears in.) main.c:13: error: `SIG_ERR' undeclared (first use in this function) main.c: In Funktion »strgc_faenger«: main.c:39: error: `SIGINT' undeclared (first use in this function) main.c:39: error: `SIG_IGN' undeclared (first use in this function) main.c:45: error: `SIG_ERR' undeclared (first use in this function) make: *** [main.o] Fehler 1 Hmm, "SIGINT" & Co. ist in signal.h deklariert, warum wird die nicht gefunden? Rufe ich den gcc von Hand auf klappt das alles. voodoo@yamato tmp $ gcc -g -O2 -c main.c Was fehlt den da nun noch? Was mache ich noch falsch? Ciao Andre
On Thu, 2004-10-14 at 15:57, Andre Heine wrote:
Moin moin,
durch den Thread "Make Problem" habe ich jetzt autoconf & co. näher angeguckt. ;)
http://sources.redhat.com/autobook/autobook/autobook_toc.html#SEC_Contents
Mit dieser Einleitung wollt ich nun anfangen, soweit so gut! Nun ja, das Goat-Book ist ein wenig veraltet, aber immer noch ganz brauchbar.
"Makefile.am" und "configure.in" angelegt, danach habe ich Mit autoconf-2.59 solltest Du statt "configure.in", "configure.ac" verwenden.
aclocal autoconf automake --add-missing
Ein einmaliges "autoreconf -fi" macht alles auf einmal.
aufgerufen. Als letztes noch mit "touch" die fehlenden Dateien angelegt... (NEWS,COPYING, usw....) Siehe oben.
Prima, scheint bis hier alles OK zu sein, ist es aber nicht ;(
Laut der Einleitung reicht nun einfach ein "./configure" um das Makefile zu generieren.
Stimmt tut's auch, aber das Makefile funktioniert nicht wirklich;(
------------------- snip ------------------------------------ voodoo@yamato tmp $ make gcc -DPACKAGE=\"sigger\" -DVERSION=\"1.0\" -I. -I. -g -O2 -c main.c main.c: In Funktion »main«: main.c:13: error: `SIGINT' undeclared (first use in this function) main.c:13: error: (Each undeclared identifier is reported only once main.c:13: error: for each function it appears in.) main.c:13: error: `SIG_ERR' undeclared (first use in this function) main.c: In Funktion »strgc_faenger«: main.c:39: error: `SIGINT' undeclared (first use in this function) main.c:39: error: `SIG_IGN' undeclared (first use in this function) main.c:45: error: `SIG_ERR' undeclared (first use in this function) make: *** [main.o] Fehler 1
Hmm, "SIGINT" & Co. ist in signal.h deklariert, warum wird die nicht gefunden? #include
vergessen?
Rufe ich den gcc von Hand auf klappt das alles.
voodoo@yamato tmp $ gcc -g -O2 -c main.c Deutet auf ein Problem mit den include-Pfaden hin.
Vergleiche mal die Ausgaben von gcc -v -I. -c main.c und gcc -v -c main.c Hast Du eine Datei names signal.h in '.' herumliegen?
Was fehlt den da nun noch? Was mache ich noch falsch? Siehe oben.
Ralf
Moin moin, Am Donnerstag, 14. Oktober 2004 16:21 schrieb Ralf Corsepius: [...]
Mit dieser Einleitung wollt ich nun anfangen, soweit so gut!
Nun ja, das Goat-Book ist ein wenig veraltet, aber immer noch ganz brauchbar.
Kennst Du einen besseren Link?
"Makefile.am" und "configure.in" angelegt, danach habe ich
Mit autoconf-2.59 solltest Du statt "configure.in", "configure.ac" verwenden.
Auf meinen gentoo habe ich 2.13 und 2.59 installiert, ich habe 2.13 benutzt.
aclocal autoconf automake --add-missing
Ein einmaliges "autoreconf -fi" macht alles auf einmal.
Probiere ich mal aus :))))
aufgerufen. Als letztes noch mit "touch" die fehlenden Dateien angelegt... (NEWS,COPYING, usw....)
Siehe oben.
Prima, scheint bis hier alles OK zu sein, ist es aber nicht ;(
Laut der Einleitung reicht nun einfach ein "./configure" um das Makefile zu generieren.
Stimmt tut's auch, aber das Makefile funktioniert nicht wirklich;(
So, das von mir probierte funktioniert also tadelos, wiedermal "USERERROR" (siehe unten);(
------------------- snip ------------------------------------ voodoo@yamato tmp $ make gcc -DPACKAGE=\"sigger\" -DVERSION=\"1.0\" -I. -I. -g -O2 -c main.c main.c: In Funktion »main«: main.c:13: error: `SIGINT' undeclared (first use in this function) main.c:13: error: (Each undeclared identifier is reported only once main.c:13: error: for each function it appears in.) main.c:13: error: `SIG_ERR' undeclared (first use in this function) main.c: In Funktion »strgc_faenger«: main.c:39: error: `SIGINT' undeclared (first use in this function) main.c:39: error: `SIG_IGN' undeclared (first use in this function) main.c:45: error: `SIG_ERR' undeclared (first use in this function) make: *** [main.o] Fehler 1
Hmm, "SIGINT" & Co. ist in signal.h deklariert, warum wird die nicht gefunden?
#include
vergessen?
Nein...
Hast Du eine Datei names signal.h in '.' herumliegen?
JAUUUUUUUUU, das ist das Problem. Bei meinen von Hand geschrieben Makefile gab's damit keine Probleme. Bei näherer Betrachtung hatte ich da wohl Glück, das gcc zuerst in den Systempfaden geguckt hat. Kann aber auch sein, das autoconf & Co. das unterbinden, may be? Kurz meine (leere!!) signal.h aus dem Verzeichnis gelöscht und alles funktioniert _prima_!!! Also in Zukunft nur noch mit autoconf & Co. Eigene Makefile's haben doch oft Lücken, z.B. bei "inline" in Header-Dateien. Bei c++ ist das doch des öfteren der Fall. Man muss darauf achten, das neu kompiliert wird, wenn sich ein solcher Header ändert. Bislang musste ich das alles von Hand in meine Makefile eintragen(Oft auch richtig tricksen). Auf den ersten Blick funktioniert das alles tadellos mit autoconf. Ich habe mal ein neues C-File mit Header eingebaut, man braucht _nichtmal_ die neue Datei irgendwo eintragen(SUFFIX-Regeln). Gut, das machen einige meiner selbst geschrieben Makefile auch, aber man muss sie eben selber schreiben. "touche" ich den Header, wird sofort das betroffene Modul neukompiliert. Jetzt, wo ich mich damit befasst habe bin ich etwas Weiser als vorher, weil - man muss weniger Tippen - autoconf funktioniert genauso einfach wie z.B. qmake/tmake - man hat bestimmt bessere Chancen, das das Programm von anderen benutzt wird, weil GNU... - mit autoconf hätte ich mich schon viel früher beschäftigen müssen :)) Gut das es _diese_ Mailinglisten gibt! *freu* Vielen Dank! Ciao Andre
On Thu, 2004-10-14 at 17:37, Andre Heine wrote:
Moin moin,
Am Donnerstag, 14. Oktober 2004 16:21 schrieb Ralf Corsepius:
[...]
Mit dieser Einleitung wollt ich nun anfangen, soweit so gut!
Nun ja, das Goat-Book ist ein wenig veraltet, aber immer noch ganz brauchbar.
Kennst Du einen besseren Link?
Nein, das Goat-Book ist immer noch die beste Anleitung zum Einstieg in die autotools, wobei der Link auf eine neuere Version zeigt wie die, die es im Buchhandel auf totem Holz gibt ;) Es beschreibt halt den Stand der Dinge von vor mehreren Jahren (autoconf-2.13/automake-1.4/libtool-1.x). Seither hat sich Einiges substantiell verändert. Die info-Files haben sich seither zwar deutlich verbessert und mittlerweile als Referenz ganz brauchbar, aber zum Einstieg nicht wirklich geeignet.
"Makefile.am" und "configure.in" angelegt, danach habe ich
Mit autoconf-2.59 solltest Du statt "configure.in", "configure.ac" verwenden.
Auf meinen gentoo habe ich 2.13 und 2.59 installiert, ich habe 2.13 benutzt.
Lass es. autoconf-2.13 ist seit langem tot. Für Neuentwicklungen ist alles andere als autoconf-2.59 (auch schon geraume Zeit heraus) momentan die Version der Wahl. Bei automake ist deutlich mehr im Fluss. Hier empfehle ich die neueste Version (automake-1.9.2).
Hast Du eine Datei names signal.h in '.' herumliegen?
JAUUUUUUUUU, das ist das Problem. Bei meinen von Hand geschrieben Makefile gab's damit keine Probleme. Bei näherer Betrachtung hatte ich da wohl Glück, das gcc zuerst in den Systempfaden geguckt hat. Yep.
Kann aber auch sein, das autoconf & Co. das unterbinden, may be? Nein. Dein Log zeigt deutlich, was passiert: gcc -I. -I. ...
Zweimal "-I.", da Du innerhalb des Source-Trees übersetzt, und -I. -I$(srcdir) zu "-I. -I." expandiert. Hättest Du ausserhalb des Source-Trees übersetzt (Sog. VPATH-Build) würde -I$(srcdir) auf deinen Source-Tree zeigen, und -I. auf '.' innerhalb des Build-Trees.
Ich habe mal ein neues C-File mit Header eingebaut, man braucht _nichtmal_ die neue Datei irgendwo eintragen(SUFFIX-Regeln). Gut, das machen einige meiner selbst geschrieben Makefile auch, aber man muss sie eben selber schreiben. "touche" ich den Header, wird sofort das betroffene Modul neukompiliert.
Yep. In einfachen Fällen wird es wirklich einfach, in wirklich schwierigen Fällen verlagern sich die Probleme allerdings meist.
- mit autoconf hätte ich mich schon viel früher beschäftigen müssen :)) Sach ich doch :)
Die meisten scheinen mir nur Angst vor dem Unbekannten zu haben. Zugegeben, die Autotools sind nicht perfekt, der Einstieg ist nicht ganz ohne, doch auf längere Sicht zahlt es sich aus sich damit auseinander gesetzt zu haben :) Ralf
Moin moin, Am Donnerstag, 14. Oktober 2004 18:16 schrieb Ralf Corsepius:
On Thu, 2004-10-14 at 17:37, Andre Heine wrote:
Am Donnerstag, 14. Oktober 2004 16:21 schrieb Ralf Corsepius:
[...]
Mit autoconf-2.59 solltest Du statt "configure.in", "configure.ac" verwenden.
Das Format ist gleich?
Auf meinen gentoo habe ich 2.13 und 2.59 installiert, ich habe 2.13 benutzt.
Lass es. autoconf-2.13 ist seit langem tot. Für Neuentwicklungen ist alles andere als autoconf-2.59 (auch schon geraume Zeit heraus) momentan die Version der Wahl.
Bei automake ist deutlich mehr im Fluss. Hier empfehle ich die neueste Version (automake-1.9.2).
Ich installiere mal 1.8.5, das neuste was man bei gentoo gerade bekommt...
Kann aber auch sein, das autoconf & Co. das unterbinden, may be?
Nein. Dein Log zeigt deutlich, was passiert: gcc -I. -I. ...
Hätte ich sehen _müssen_, der Aufruf von gcc war ja eindeutig;(
Ich habe mal ein neues C-File mit Header eingebaut, man braucht _nichtmal_ die neue Datei irgendwo eintragen(SUFFIX-Regeln). Gut, das machen einige meiner selbst geschrieben Makefile auch, aber man muss sie eben selber schreiben. "touche" ich den Header, wird sofort das betroffene Modul neukompiliert.
Yep. In einfachen Fällen wird es wirklich einfach, in wirklich schwierigen Fällen verlagern sich die Probleme allerdings meist.
Ich habe jetzt mal ein etwas grösseres Projekt genommen, mit SUBDIR's usw.. Habe zwar ein paar warnings bekommen, sonst aber keine Probleme;)
Die meisten scheinen mir nur Angst vor dem Unbekannten zu haben. Zugegeben, die Autotools sind nicht perfekt, der Einstieg ist nicht ganz ohne, doch auf längere Sicht zahlt es sich aus sich damit auseinander gesetzt zu haben :)
ACK, der Aufwand lohnt. Vorallem wird mir das in Zukunft viel Zeit sparen. Ich muss bestimmt noch vieles lernen mit den autotools, aber im Prinzip braucht man sich ja nur mal ein Makefile.am von KDevelop angucken oder von einem beliebigen anderem Projekt :)) CIao Andre
On Fri, 2004-10-15 at 11:00, Andre Heine wrote:
Moin moin,
Am Donnerstag, 14. Oktober 2004 18:16 schrieb Ralf Corsepius:
On Thu, 2004-10-14 at 17:37, Andre Heine wrote:
Am Donnerstag, 14. Oktober 2004 16:21 schrieb Ralf Corsepius:
[...]
Mit autoconf-2.59 solltest Du statt "configure.in", "configure.ac" verwenden.
Das Format ist gleich? Jein, soll heissen, autoconf-2.13 configure.in's sind in der Regel kompatibel zu autoconf-2.59. autoconf-2.59-configure.ac's sind aber nicht Quellcode-kompatibel zu autoconf-2.13.
Von autoconf-2.13 generierte configure Scripte sind allerdings oftmals nicht kompatibel zu den von autoconf-2.59 generierten. D.h. in der Regel wird es Dir mit kleineren Adaptionen gelingen autoconf-2.13 configure.ins mit autoconf-2.59 zu verarbeiten, die generierten configure Scripte werden danach oftmals aber nicht funktionieren oder andere Resultate liefern. Das Problem dahinter: Die autoconf-2.13 Syntax war fehlerhaft. Die Autoconf-2.59-Syntax ist sehr viel strenger und lässt einiges nicht mehr durch, was autoconf-2.13 noch (fälschlicherweise) klaglos durchliess. Auch hat sich einiges an der internen Funktionsweise verändert, was teilweise funktionelle Inkompatibilitäten mit sich bringt. (Siehe auch autoconf.info und autoupdate)
Bei automake ist deutlich mehr im Fluss. Hier empfehle ich die neueste Version (automake-1.9.2).
Ich installiere mal 1.8.5, das neuste was man bei gentoo gerade bekommt...
Nun ja, 1.8.5 ist halbwegs aktuell genug, um die modernen Features (z.B. subdir-objects und flat-Makefiles nutzen zu können), da sich feature-mässig zw. 1.8.x und 1.9.x äusserlich nicht viel geändert hat. Die wesentlichen Änderungen fanden unter der Haube statt: http://lists.gnu.org/archive/html/automake/2004-07/msg00121.html
Ich habe mal ein neues C-File mit Header eingebaut, man braucht _nichtmal_ die neue Datei irgendwo eintragen(SUFFIX-Regeln). Gut, das machen einige meiner selbst geschrieben Makefile auch, aber man muss sie eben selber schreiben. "touche" ich den Header, wird sofort das betroffene Modul neukompiliert.
Yep. In einfachen Fällen wird es wirklich einfach, in wirklich schwierigen Fällen verlagern sich die Probleme allerdings meist.
Ich habe jetzt mal ein etwas grösseres Projekt genommen, mit SUBDIR's usw.. Habe zwar ein paar warnings bekommen, sonst aber keine Probleme;) SUBDIRS sind noch keine "wirklich schwierigen Fälle" ;)
Schwierig sind solche Fälle, die vom Standardfunktionsumfang von autoconf/automake/libtool/gettext u.Co. nicht abgedeckt werden. Ralf
participants (2)
-
Andre Heine
-
Ralf Corsepius