Pfad include und src-Verzeichnis makefile

Nach diesem tutorial:

http://www.cs.colby.edu/maxwell/courses/tutorials/maketutor/

Es hat 3 Dateien 2 .c Dateien und 1 .h - Datei. Das tutorial über die Einrichtung von makefiles, und die ersten paar Schritte zu arbeiten. Der Letzte Schritt beinhaltet die Einrichtung Verzeichnispfade für die .h und .c - Dateien. Ich habe die .c - Dateien im src-Datei und die .h Dateien in einer include-Datei.

Sieht es so aus /home/bob/testcode/src <- mit der .c - Dateien.

Sowie /home/bob/testcode/include <- mit der .h - Dateien.

Code:

IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)

ODIR=obj
LDIR =../lib

_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

_OBJ = hellomake.o hellofunc.o 
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))


$(ODIR)/%.o: %.c $(DEPS)
    $(CC) -c -o [email protected] $< $(CFLAGS)

hellomake: $(OBJ)
    gcc -o [email protected] $^ $(CFLAGS)

.PHONY: clean

clean:
    rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ 

Ich möchte verstehen, wie es funktioniert und dann verwenden Sie es auf eine Bibliothek, die ich arbeite mit. Könnte jemand bitte zeigen Sie mir, wie man diesen code? Ich habe versucht, eine Menge von Optionen, wie "/home/bob/testcode/include/" w/und w/o - " und / und ich immer noch nicht bekommen es funktioniert.

Das Ziel ist es, die Arbeit mit einer Bibliothek enthält über 60-header-Dateien und 30 source-Dateien aus diese Dateien, die ich haben 1 Hauptfach, so dass ich wirklich brauchen, um diese grundlegende makefile Sache arbeiten, so konnte ich es erweitern.

Das Allgemeine problem sind diese Zeilen, welche sich nach Links öffnen:

IDIR =../include
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))

und

OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

Für die ich habe versucht eine Vielzahl von verschiedenen Pfad ersetzt, aber der Fehler, das ich Erzeuge, sagt:

gcc -o hellomake  -I../include
gcc: fatal error: no input files
compilation terminated.
make: *** [hellomake] Error 4

Bitte um Hilfe, vielen Dank im Voraus.

  • Herzlich willkommen auf StackOverflow ! Bitte verwenden echte Wörter, die mit realen Bedeutung über Ihre eigentliche problem, anstatt die Dinge, wie "es funktioniert". Auch bitte posten, was Sie versucht haben, hier.
  • ich hoffe es ist jetzt klar, es ist nur ein problem der syntax, die ich denke, die "pathsubst" müssen Sie den richtigen Pfad, die ich zur Verfügung gestellt haben, aber ich bekomme immer noch ein schwerwiegender Fehler.
  • Ihr Fehler ist ziemlich klar. Sie gab keine Datei zum gcc link in hellomake
  • Poste deinen aktuellen code, und es formatieren, damit es lesbar ist
  • ich glaube nicht, ich sollte mit gcc eine Datei, die alle enthalten ist, in das makefile und alles, was ich Anruf ist in das Verzeichnis, da alle 3 Dateien sind bereits enthalten, die im makefile
  • Ein trick, den ich finden nützlich, beim Debuggen eine make-Datei ist die Einrichtung einer "Karte" Ziel (oder welche Namen auch immer), ohne Abhängigkeiten, druckt nur die Variablen, d.h.: @echo "OBJ=$(OBJ)" (eine Zeile für jede variable). Dann mit make show Sie deutlich sehen, wenn Sie die richtigen Inhalte.
  • Der Zweck eines Makefile-Aufruf-Befehle. Einer von denen ist gcc zum Beispiel. Wenn Sie nicht liefern gcc mit den Dateien miteinander verknüpfen, es ist nicht gonna erfinden.
  • nun, ich habe nicht die Absicht zu lernen, wie ein Skript makefiles aber es scheint, es wird der einzige Weg sein, um mich bewegen zu tun was ich eigentlich tun will. ich hatte gehofft, das tutorial würde die Grundstruktur, auf der ich könnte erweitern Sie den code mit den ersten paar Schritten alles geklappt hat, ich also davon ausgehen, das die Verknüpfung Teil ist auch richtig, aber trotzdem danke.
  • Es gibt etwas über Ihrem makefile oder Ihrer Umgebung sind Sie nicht, uns zu erklären, denn das makefile funktioniert wie oben geschrieben. Die einzige Erklärung für das Verhalten, das Sie sehen, ist, wenn die OBJ variable leer waren. Ich sehe keine Möglichkeit, die passieren können, angesichts der oben genannten makefile. Sind Sie sicher, dass Sie mit GNU make? Welche version? (führen Sie make --version) Ist das wirklich genau das makefile verwendest du?
  • Das ist der Zweck der $(info ) Befehl.
  • Ja, ich weiß $info nur persönliche Gewohnheit. Aber neben der Tatsache, dass echo ist ein shell-Befehl und $info eine make Befehl, kennen Sie keine praktischen Unterschiede ? (neugierig)
  • $info platziert werden kann fast überall in Ihrem makefile, in der Erwägung, dass echo können nur gelegt werden, in der Deklaration von Variablen oder Regel-Körper.
  • Sind Sie auf MacOS oder ein anderes BSD system? make standardmäßig nicht Gnu make gibt. Sie können installieren und verwenden von gmake.

InformationsquelleAutor iBeyondPower | 2015-06-01
Schreibe einen Kommentar