Frage zu Makefile für MINGW/GCC linker



  • Eine 'test.cpp' wird compiliert zur 'test.o'.
    Wenn die 'test.o' gelinkt wird es eine 'test.exe'

    Das ist ein Einfachst-Beispiel beim MinGW.

    Wenn es ein wenig umfangreicher wird kannst du auch mehrere '.o' Dateien zu einem Projekt zusammen linken. Das Ergebnis muss auch nicht 'test.exe' heissen. Da kannst du auch andere Namen mit der gleichen Endung '.exe' wählen.

    Wenn eine der '.cpp' in einem grösseren Projekt nicht geändert wurde, brauchen nur die geänderten vor einem gemeinsamen Linken neu kompiliert werden.

    Soweit eine Kurzfassung. Da kann man noch ausführlicher was dazu schreiben.

    MfG f.-th.



  • McMorf! schrieb:

    Zbei einem Shellscript bricht MinGW bei error ab...
    bei nem Makefile auch...
    wozu den Rückgabewert überprüfen ? ich sehe es doch dann in der Shell ?!?

    Wenn im Skript Hunderte Dateien gebaut werden, übersiehst Du die Fehlermeldung von MinGW. MinGW bricht bei einem Fehler ab, aber Dein Skript nicht. Dein Skript wird weiter abgearbeitet, egal was passiert. Wenn, dann müsste man bei jedem Aufruf des Compilers, Linkers usw. so was machen:

    gcc -c blabla.c -o blabla.o || error
    

    und error ist eine Funktion die exit aufruft o.ä. Aber das ist ungut, weil man beim Schreiben des Skripts daran denken muss, überall || error dranzuhängen. (Mit meinem Lieblings-Editor gVim wäre es vielleicht kein Problem).

    McMorf! schrieb:

    wie würde ich das jetzt auf mehrere kerne aufteilen ?

    Bei Deinem Makefile wird es wahrscheinlich nicht funktionieren, weil Du im Prinzip nur einen Compiler-Aufruf hast. Es geht mit dem Parameter -j{X}, wobei es eine (ungeschriebene?) Regel gibt, X solle Anzahl der Kerne mal zwei sein. Ich habe einen DualCore, also würde ich so aufrufen:

    make -j4
    

    Bei einem QuadCore so

    make -j8
    

    McMorf! schrieb:

    und warum sollte das mit einem shellscript nicht gehen ? wird nicht letzten endes die aufgabe eh an MinGw übergeben ?

    Das geht bestimmt, nur musst Du als Autor des Skripts die Sisyphos-Arbeit erledigen, manuell Threads erzeugen, die bestimmte Teile deines Projektes bauen usw.



  • Herzlichen Dank für die ganzen Antworten !

    Ihr habt mir wirklich sehr weiter geholfen !

    Mfg McMorf



  • Hi !
    Ich habe noch eine Frage bezüglich makefiles...

    Ich würde gerne wissen wie man die ausgabe eines Programms in eine Variable schreiben kann...

    Sprich ich habe eine z.B hallo.exe die in der console nur hallo ausgibt...
    diese würde ich gerne im makefile als variable angeben also so habe ich es versucht, funktioniert leider nicht:

    VarHallo =´hallo.exe´
    oder
    VarHallo = @echo´hallo.exe´
    

    also mir geht es darum die ausgabe von wx-config in eine variable umzuleiten sprich sowas wie:

    WXCONFIG = ´wx-config --cxxflags --libs´
    

    irgendwie habe ich keinen ansatz dafür gefunden...
    würde mich sehr über eure Hilfe freuen !

    Mfg McMorf



  • VAR =$(shell wx-config --cxxflags --libs)

    Mfg McMorf


Anmelden zum Antworten