Seite 1 von 1

Makefile aendern

Verfasst: 7. November 2006 05:01
von joebar
Hallo,

ich habe mit qmake mir ein Makefile generiert, funktioniert einwandfrei. Am Ende kommt ein Programm "file1" raus. Nun moechte ich dem Makefile noch sagen er soll noch ein komplett anderes Program zur gleichen Zeit mit uebersetzen, aus file2.cpp soll file2 werden, ein neues Executable.

Wenn ich nun einfach file2.cpp im gleichen Verzeichnis habe wie file1.cpp sagt mir make hinterher ich haette 2 main(), sprich er versucht die beiden cpp's in ein exe zu packen - was er aber nicht soll.

Ich habe dann im Makefile unter der TARGET Variabeln noch file2 angegeben. Funzt aber auch nicht. Was muss ich im Makefile alles verbiegen?

Danke,
J.

Verfasst: 7. November 2006 06:30
von Christian81
Je ein Unterverzeichnis für jedes Target anlegen.

Verfasst: 7. November 2006 07:07
von joebar
Also ich habe jetzt folgedes

testapp/dir1/file1.cpp
testapp/dir1/file1.h
testapp/dir1/main.cpp

testapp/dir2/file2.cpp

Also alles schoen sortiert. Im Verzeichniss testapp rufe ich dann

qmake -project
qmake
make auf, make liefert dann

Code: Alles auswählen

initcall.o: In function `main':
initcall.cpp:(.text+0x1dd0): multiple definition of `main'
main.o:main.cpp:(.text+0x0): first defined here
/usr/lib/gcc/i586-suse-linux/4.0.2/../../../../i586-suse-linux/bin/ld: Warning: size of symbol `main' changed from 188 in main.o to 5037 in initcall.o
collect2: ld returned 1 exit status
make: *** [callintegrator] Error 1

Ich waere auch bereit mir ein makefile selber zu bauen, fuer ein 08/15 c++ file bekomme ich das auch hin (im einfachsten Falle), aber hier weiss ich gar nicht welche Befehle das make ausfuehren sollte...

Verfasst: 7. November 2006 07:34
von Christian81
Deine pro-Files sind wohl nicht korrekt.
In /testapp muss ein pro-file mit TEMPLATE = subdirs und in den beiden Unterverzeichnissen je eins zum Erstellen der Tragets.

Verfasst: 7. November 2006 15:50
von joebar
:oops:

falscher Film, war ganz wo anders kommt davon wenn man drei Sachen gleichzeitig macht...

:oops:

Verfasst: 7. November 2006 15:52
von Christian81
Und was hat das jetzt mit meiner Aussage zu tun?

Verfasst: 7. November 2006 16:06
von joebar
:oops: :oops: :oops: :oops: :oops:

Mag sein, aber ich habe ja nur generiert, nichts manuell gemacht. zur Sicherheit:

Die obigen Schritte, muss ich die pro Unterverzeichniss aufrufen oder nur einmal im oberen Verzeichnis?

Verfasst: 7. November 2006 16:14
von Christian81
Die pro-Files musst Du erstellen und mit ausliefern.
In deine beiden Unterverzeichnisse kommt je ein pro-File zum Erzeugen des jeweiligen Targets, ins 'Hauptvezeichnis' das pro-File mit TARGET = subdirs. Dann generiert qmake automatisch alle Makefile, auch in den Unterverzeichnissen.

Ich vergass: in das pro-File im Hauptverzeichnis muss noch "SUBDIRS = dir1 dir2" damit er die Subdirs auch mit benutzt.

Verfasst: 8. November 2006 01:38
von joebar
Super das sieht sehr gut aus. Bleibt noch die Frage warum ich das pro File selber aendern muss und es qmake nicht von alleine versteht?

Und nun noch die viel wichtigere Frage:

Wenn ich das pro (aber NICHT das make file) ausliefere - und so hatte ich dich verstanden - bleibt noch die Frage wie ich ein "make install" bauen kann. Wenn ich das Makefile schon haette koennte ich ja einfach

Code: Alles auswählen

install:
cp bla nach blub
einbauen. Aber da das Makefile erst noch generiert wird?

Verfasst: 8. November 2006 06:34
von Christian81
qmake -project erzeugt nur ein template das man noch bearbeiten muss. qmake kann ja nicht wissen was für externe libs du z.B. noch brauchst.

Zum Install schau am besten mal in die Doku. Dort stehen alle Varaiblen die in pro-Dateien verwenden werden können: http://doc.trolltech.com/4.2/qmake-vari ... ml#destdir