Makefile anpassen

OP #1919299
Lesenswert?
• ▲
▼
Guten Morgen!

Ich habe vor einiger Zeit ein kleines Makefile geschrieben, dass mir 
mein Projekt erstellt. Nun stört es mich, dass die Objekt- und 
Source-Dateien alle zusammen in einem Ordner liegen.

Daher würde ich gerne im selben Ordner, in dem das Makefile liegt zwei 
Unterordner haben, von denen einer "source" heißt und die Quelldateien 
enthält und der andere "build" heißt und die Objekt-Dateien enthält. Das 
ausführbare Programm, soll jedoch wieder auf der Ebene des Makefiles 
liegen.

Wie muss ich dafür das nachfolgende Makefile anpassen?

------------------------------------------------

CC      = /usr/bin/g++
CFLAGS  = -Wall -g -D_REENTRANT
LDFLAGS = ``

OBJ = Class1.o Class2.o Class3.o Class4.o Main.o

project: $(OBJ)
  $(CC) $(CFLAGS) -o project $(OBJ) $(LDFLAGS)

%.o: %.c
  $(CC) $(CFLAGS) -c $<

------------------------------------------------

Ich freue mich auf eure Antworten.

Liebe Grüße,

Andreas

PS: An Links dieses Thema betreffend wäre ich auch interessiert.
Moderator #1919391
Lesenswert?
• ▲
▼
> Wie muss ich dafür das nachfolgende Makefile anpassen?
1
CC      = /usr/bin/g++
2
CFLAGS  = -Wall -g -D_REENTRANT
3
LDFLAGS = 
4

5
SOURCE  = source
6
BUILD   = build
7

8
OBJ = Class1.o Class2.o Class3.o Class4.o Main.o
9

10
project: $(OBJ:%=$(BUILD)/%)
11
  $(CC) $(CFLAGS) -o project $(OBJ:%=$(BUILD)/%) $(LDFLAGS)
12

13
$(BUILD)/%.o: $(SOURCE)/%.cpp
14
  $(CC) $(CFLAGS) -c -o $@ $<

Ich habe das .c in .cpp umbenannt, da es sich bei den Quelldateien ja
wohl um C++ handelt. Hat es mit dem `` bei LDFLAGS eine besondere
Bewandtnis, oder soll die Variable einfach nur leer bleiben? Wenn ja,
dann sollte da auch nichts stehen.

> PS: An Links dieses Thema betreffend wäre ich auch interessiert.

Auch wenn's jetzt blöd klingt: Aber es lohnt sich wirklich, das
GNU-Make-Manual einmal intensiv durchzuarbeiten:

  http://www.gnu.org/software/make/manual/make.html

Das Tool kann noch viel mehr, als man gemeinhin ahnt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren