• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

make Frage

deetee

Newbie
Hallo,

also ich steh gerade aufm Schlauch...also folgende Situation:

Verzeichnis1 hat folgende 2 Dateien_
- aaa.c
- aaa.h

In einem Unterverzeichnis U1 liegen weitere 2 Dateien:
- bbb.c
- bbb.h

In bbb.c ist eine Funktion Fopen die ich in aaa.c verwenden möchte. Ich schreibe in aaa.c:
#include "U1/bbb.h"

Das makefile dazu sieht so aus
Code:
CC = gcc
CFLAGS = -c

aaa: aaa.o
	$(CC) -o $@ aaa.o

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

aaa.o: aaa.c aaa.h

Be der Ausführung kommt dieser Fehler:

In function `main':
: undefined reference to `Fopen'
collect2: ld returned 1 exit status

Muss ich noch im makefile bbb irgendwo angeben? Dachte das wäre mit dem include erledigt?
Und wenn ja, wie gebe ich im makefile einen Pfad in ein Unterverzeichnis an? Einfach ./U1/bbb.c?

Wo liegt mein Fehler? Danke schonmal.
 
OP
D

deetee

Newbie
OK, ich muss natürlich im Makefile noch bbb.o angeben:
Code:
CC = gcc
CFLAGS = -c

aaa: aaa.o bbb.o
   $(CC) -o $@ aaa.o bbb.o

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

aaa.o: aaa.c aaa.h

bbb.o: bbb.c bbb.h

ABER im Beispiel liegen die bbb Dateien im selben Verzeichnis wie aaa. Wie gebe ich im makefile aber PFadangeben in das Unterverzeichnis U1 an? Da liegen nämlich meine bbb Dateien.
 
OP
D

deetee

Newbie
Ja klar, das ist C.

Nur im gleichen Verzeichnis? Bist du dir sicher? Gerade bei C++, wo man mit Klassen arbeitet, wäre das doch sehr schlecht, oder?
 

oc2pus

Ultimate Guru
ansi-c.com schrieb:
Soweit ich weiss ist das C oder C++?

Dann geht das nur im GLEICHEN Verzeichnis.
nein ;)

schaust du hier:
http://theory.uwinnipeg.ca/gnu/make/make_27.html
http://make.paulandlesley.org/vpath.html
 
Wo is das Problem?
Code:
CC := gcc
LD := gcc

aaa: aaa.o
    ${LD} -o $@ $^;

bbb: U1/bbb.o
    ${LD} -o $@ $^;

%.o: %.c
    ${CC} -Wp,-MMD,$(@D)/.$(@F).d -c -o $@ $<;

-include .*.d */.*.d
.h-Abhängigkeiten inklusive.
 
OP
D

deetee

Newbie
oh...ich hab keine Ahnung was du da für Abkürzungen benutzt. Danke, das schau ich mir mal genauer an.
 
Oben