Page 1 of 1

kdevelop - problem beim kompilieren

Posted: 15. Feb 2006 14:05
by voice
hi leute...

bin gerade dabei eine sehr alte eigen-software unserer firma mit kdevelop wieder ins leben zurückzuholen. die software dient zur berechnung hydraulischer modelle und soll in zukunft basierend auf der alten grundlage weiterentwickelt werden... jetzt habe ich aber ein problem... beim kompilieren der einzelnen files bekomme ich keine fehlermeldung... versuche ich das ganze paket zu erstellen meldet mir kdevelop folgendes...


cd '/home/pokg/prog_c++/hydra/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake -k -j1 -n
if test ! -f config.h; then rm -f stamp-h1; gmake stamp-h1; else :; fi
gmake all-recursive
set fnord $MAKEFLAGS; amf=$2; dot_seen=no; target=`echo all-recursive | sed s/-recursive//`; list='src'; for subdir in $list; do echo "Making $target in $subdir"; if test "$subdir" = "."; then dot_seen=yes; local_target="$target-am"; else local_target="$target"; fi; (cd $subdir && gmake $local_target) || case "$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; done; if test "$dot_seen" = "no"; then gmake "$target-am" || exit 1; fi; test -z "$fail"
Making all in src
gmake[2]: *** Keine Regel vorhanden, um das Target »hydra.c«,
benötigt von »hydra.o«, zu erstellen.
gmake[1]: *** [all-recursive] Fehler 1
if test ! -f config.h; then rm -f stamp-h1; gmake stamp-h1; else :; fi
gmake: *** [all] Fehler 2
*** Beendet mit Status: 2 ***

... kann mir vielleicht jemand helfen dieses problem zu lösen!

danke
alex

Posted: 15. Feb 2006 19:47
by klopskuchen
gmake[2]: *** Keine Regel vorhanden, um das Target »hydra.c«,
benötigt von »hydra.o«, zu erstellen.
Eine dependency line eines Makefiles hat auszusehen:
target: object1 object2 ... object_n

Nach obiger Meldung sind Ziel und Abhängigkeit in betreffender Zeile vertauscht und make versucht aus einer Binärdatei (hydra.o) eine Sourcedatei (hydra.c) zu erstellen, was nicht klappt selbst wenn die betreffende Kommandoangabe richtig ist.

MfG, Klopskuchen

versteh ich nicht ganz...

Posted: 17. Feb 2006 10:36
by voice
hi,

tut mir leid, ich verstehe nicht ganz was du meinst... kenne mich mit "makefiles" nicht wirklich aus... deshalb verwende ich für meine programme immer eine entwicklungsumgebung die mir diese arbeit abnimmt...

vielleicht kannst du mir etwas mehr detailierte tipps geben...

danke!!!!

alex

Posted: 17. Feb 2006 20:48
by klopskuchen
Sinn und Zweck von "make" ist es, bei Änderung an wenigen Dateien größerer Projekte, nicht alles neu kompilieren und linken zu müssen. Das "Makefile" enthält eine Beschreibung nach syntaktischen Regeln über die Abhängigkeiten aller Dateien, vom Source über Header bis zu Obkjektdateien.
Eine dieser syntaktischen Regeln ist die der "Abhängigkeitsbeschreibung" (dependency line). Um "make" mitzuteilen welche Dateien benötigt werden um eine bestimmte Binärdatei zu erstellen, muß die Abhängigkeitsbeschreibung in folgender Form im Makefile vorliegen:
Zieldatei : "hier eine Liste der benötigten Dateien zur Erstellung der Zieldatei, getrennt durch jeweils ein Leerzeichen"

Beispiel:
Endprodukt sollen sein zwei auszuführende Dateien, eine davon soll heißen "execute_logger". Diese ausführbare Datei wird erstellt aus main.c, logging.c, project_generic.h, zusätzlich wird mylog.o hinzugelinkt. Im Makefile sollte also stehen:
execute_logger : main.c logging.c project_generic.h mylog.o

In der von dir geposteten Fehlermeldung bezeichnet "make" die Datei hydra.c als Ziel und hydra.o als Abhängigkeit. Demzufolge steht im Makefile eine Zeile:
hydra.c : hydra.o
und "make" versucht nun aus der *.o eine *.c zu erstellen, was logischerweise nicht geht. Wahrscheinlicher wäre es eine Objektdatei als Kompilat einer Quellcodedatei zu erhalten. :)
hydra.o : hydra.c

MfG, Klopskuchen

Re: versteh ich nicht ganz...

Posted: 17. Feb 2006 21:31
by Janka
voice wrote:hi,
tut mir leid, ich verstehe nicht ganz was du meinst... kenne mich mit "makefiles" nicht wirklich aus... deshalb verwende ich für meine programme immer eine entwicklungsumgebung die mir diese arbeit abnimmt...
Ein bisschen sollte man sich mit der Syntax von Makefiles schon auskennen, wenn man in C programmiert. Wenn man ein, zwei kleine Makefiles selbst gemacht hat, hat man den Dreh raus und muss nicht aus *diesem* Grund ein Trumm wie kdevelop benutzen. Zumal das auch bloß Makefiles erzeugt, aber ziemlich unübersichtliche - wenn dann was schief geht steht man hilflos da!

$ info make
oder Konqueror: ##make

und einfach mal ein wenig rumspielen.

Janka

Posted: 18. Feb 2006 1:00
by Alex.MH
Hi,

die Makefiles von kdevelop sehen so grausam aus, weil automake verwendet wird. Du solltest daher die Makefiles nicht direkt editieren, da sie sonst beim naechsten configure wieder ueberschrieben werden.

Am besten du liest dir mal den Abschnitt "Using Automake" von diesem Tutorial durch: http://www.amath.washington.edu/~lf/tut ... l_toc.html

Falls du nur ein kleines Projekt hast, welches nicht gegen externe Libraries gelinkt werden muss, ist es meist besser selbst ein kleines Makefile zu schreiben. Eine Anleitung dafuer findest du ebenfalls im obigen Tutorial.

Gruss,
Alex