Wie folgt man der Verknüpfungsreihenfolge bei der Verknüpfung mit der statischen Bibliothek mit gnu-make?

8

Ich habe folgendes Problem:

%Vor%

Aber

%Vor%

läuft gut, nm zeigt den erwarteten Inhalt, Tests laufen, alle sind glücklich, etc.

Ich habe SO durchsucht und viele Antworten gefunden (zB Linker-Bestellung - GCC ), Es ist also klar, dass Linker so funktioniert, wie es wirklich sollte. Also, wie soll ich mein Makefile ändern, um der Reihenfolge zu folgen?

Hier ist das Makefile soweit:

%Vor%

Versuchte einige seltsame und offensichtlich falsche Dinge wie rekursives Anrufen

%Vor%

Wird in Debian6 unter VirtualBox auf Windows7 ausgeführt. Systemspezifikationen:

%Vor%

P.S. es ist von Zed Shaw's Lernen Sie den harten Weg, Übung 33 . Ich weiß nicht, ob ich es als Hausaufgabe markieren sollte:)

    
J0HN 10.05.2012, 17:20
quelle

2 Antworten

6

Sie zeigen die Makefile-Regel, die tests/list_tests erstellt, nicht an, aber es sieht so aus, als wäre es nur die eingebaute Regel. Mit GNU Make können Sie diese Regel mit -p ausdrucken, was Ihnen zeigt:

%Vor%

Wenn Sie die Bibliothek zu $(CFLAGS) hinzufügen (über die zielspezifische Variable tests: CFLAGS+=$(TARGET) ), platzieren Sie sie vor $^ im resultierenden Befehl. Stattdessen sollten Sie es zu $(LDLIBS) hinzufügen, damit es nach den Objektdateien angezeigt wird:

%Vor%

Es ist jedoch zu beachten, dass es in der Praxis nicht besonders gut ist, sich auf die Verbreitung von zielspezifischen Variablen wie diesem zu verlassen. Wenn Sie make tests eingeben, wird die Bibliothek zum Erstellen von tests/list_tests et al. Verwendet. Wenn Sie jedoch nur an einem Test interessiert sind, werden Sie feststellen, dass make tests/list_tests fehlschlägt, da die Link-Bibliothek nicht im Befehl enthalten ist. (Einzelheiten finden Sie diese Antwort .)

    
John Marshall 10.05.2012, 18:49
quelle
2

Ich bin ein Noob, laufe durch das gleiche Buch und ich habe es so gebaut:

Ich habe die Zeile geändert:

tests: CFLAGS + = $ (TARGET) #Ich finde diese Zeile jetzt nutzlos

bis

-Tests: CFLAGS + = $ (SO_TARGET)

    
landho 01.01.2013 07:18
quelle