Toon posts:

[Linux] probleem met makefile

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi allemaal,

Ik heb wat problemen met het maken van een makefile. Tot hiertoe heb ik:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CC=g++
CFLAGS=-c -Wall
INCLUDES=-I/opt/IBM/db2/V8.1/include/
LIBS=-L/opt/IBM/db2/V8.1/lib/ -ldb2 -lpthread -pthread
SOURCES=main.cpp Test.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=test

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
        $(CC) $(CFLAGS) $(INCLUDES) $(LIBS) $(OBJECTS) -o $@

.cpp.o:
        $(CC) $(CFLAGS) $< -o $@
Als ik vervolgens alles wil compilen, negeert make om 1 of andere reden de INCLUDES (dus /opt/IBM/db2/V8.1/include/). Ik krijg dus include-errors. (bla.h, op schijf in /opt/IBM/db2/V8.1/include/, included in Test.h, kan hij niet vinden)

Rechtstreeks compilen werkt wel: g++ -I/opt/IBM/db2/V8.1/include/ -L/opt/IBM/db2/V8.1/lib/ -ldb2 -lpthread main.cpp Test.cpp

Iemand een idee wat dit kan zijn?

alvast bedankt

  • Emmeau
  • Registratie: Mei 2003
  • Niet online

Emmeau

All your UNIX are belong to us

$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(INCLUDES) $(LIBS) $(OBJECTS) -o $@

.cpp.o:
$(CC) $(CFLAGS) $(INCLUDES) $< -o $@

je hebt de includes in de slag van .cpp naar .o nodig

If you choose to criticise you choose your enemies


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 20:17

Robtimus

me Robtimus no like you

Waarom heb je een -c in het linken? Want -c betekent juist: link NIET.
Verder vraag ik me af wat die -pthread daar doet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CC=g++
CFLAGS=-Wall
INCLUDES=-I/opt/IBM/db2/V8.1/include/
LIBS=-L/opt/IBM/db2/V8.1/lib/ -ldb2 -lpthread
SOURCES=main.cpp Test.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=test

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
        $(CC) $(CFLAGS) $(LIBS) $(OBJECTS) -o $@

.cpp.o:
        $(CC) $(CFLAGS) $(INCLUDES) -c $< -o $@

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Topicstarter
Cool, bedankt allemaal, nu doet hij het perfect!

Ik ben nu aan het proberen zodat hij compilen & linken in 1 stap doet, maar dat wil maar niet lukken. Iemand die me op weg kan helpen? Ik ben momenteel weer wat tutorials aan het lezen, want ik ben helemaal nieuw in het wereldje van make/makefiles >:)

Verwijderd

Je maakt een boel "kapot" met deze makefile in die zin dat je een aantal voorgedefinieërde macro's van make overschrijft waardoor een boel automatismen niet meer naar behoren werken.

code:
1
2
3
4
5
6
7
8
CFLAGS= -Wall
CPPFLAGS= -I/opt/IBM/db2/V8.1/include
LDFLAGS= -L/opt/IBM/db2/V8.1/lib -pthread
LDLIBS= -ldb2 -lpthread

all: Test

Test: Test.cpp main.o


In principe zou dit moeten werken (ik kan het niet testen omdat ik geen code heb).

[ Voor 28% gewijzigd door Verwijderd op 20-06-2004 14:48 ]


Verwijderd

Topicstarter
Idd mietje, heb je gelijk in, dat is zoiezo geen goede toepassing van een makefile. Toch bedankt voor de oplossing (heb hem nog niet geprobeerd).

Trouwens, wat mij afvraag:
code:
1
OBJECTS=$(SOURCES:.cpp=.o)
Hoe doe je dat als je verschillende extentsies hebt (dus bijv. .C (wordt nog al eens gebruikt in linux voor C++ files dacht ik) naast .cpp)? Ben al een tijdje aan het zoeken, maar tot hiertoe nog niets gevonden. Of moeten al je files dezelfde extensie hebben?

Verwijderd

Verwijderd schreef op 20 juni 2004 @ 15:57:
Trouwens, wat mij afvraag:
code:
1
OBJECTS=$(SOURCES:.cpp=.o)
Hoe doe je dat als je verschillende extentsies hebt (dus bijv. .C (wordt nog al eens gebruikt in linux voor C++ files dacht ik) naast .cpp)? Ben al een tijdje aan het zoeken, maar tot hiertoe nog niets gevonden. Of moeten al je files dezelfde extensie hebben?
Het is het meest practisch je extensies gelijk te houden, maar anders kun je het zo oplossen:

code:
1
2
3
4
5
6
7
8
9
SOURCES.cpp= $(wildcard *.cpp)
SOURCES.cc= $(wildcard *.cc)
SOURCES.C= $(wildcard *.C)
SOURCES= $(SOURCES.cpp) $(SOURCES.cc) $(SOURCES.C)

OBJECTS.cpp= $(SOURCES.cpp:.cpp=.o)
OBJECTS.cc= $(SOURCES.cc:.cc=.o)
OBJECTS.C= $(SOURCES.C:.C=.o)
OBJECTS= $(OBJECTS.cpp) $(OBJECTS.cc) $(OBJECTS.C)


edit:
of andersom:

code:
1
2
3
4
5
6
7
8
9
SOURCES= blah.cpp test.C main.cc
SOURCES.cpp= $(filter %.cpp,$(SOURCES))
SOURCES.cc= $(filter %.cc,$(SOURCES))
SOURCES.C= $(filter %.C,$(SOURCES))

OBJECTS.cpp= $(SOURCES.cpp:.cpp=.o)
OBJECTS.cc= $(SOURCES.cc:.cc=.o)
OBJECTS.C= $(SOURCES.C:.C=.o)
OBJECTS= $(OBJECTS.cpp) $(OBJECTS.cc) $(OBJECTS.C)

[ Voor 19% gewijzigd door Verwijderd op 20-06-2004 18:21 ]


Verwijderd

Topicstarter
Cool bedankt, weer wat bijgeleerd :)

thanks mietje voor de hulp
Pagina: 1