/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Makefile problemer i Windows
Fra : Jimmy Rasmussen


Dato : 21-08-03 13:17

Hejsa.

Jeg har følgende makefil:

-----------------------------------------------------------------
project.exe : main.o templateclass.o
g++ main.o templateclass.o -o project.exe
main.o : main.cpp
g++ -I D:\Dev-C++\Include\G++\ -c main.cpp
templateclass.o : templateclass.cpp
g++ -I D:\Dev-C++\Include\G++\ -c templateclass.cpp
-----------------------------------------------------------------

main.cpp og templateclass.cpp refererer begge til filen templateclass.h
templateclass.h refererer til filen iostream.h som ligger i biblioteket
"D:\Dev-C++\Include\G++\".
Alle source filer har filnavne med små bogstaver.
Jeg bruger Windows Xp og cygwin kompileren.

Når jeg kører make får jeg følgende fejl:
g++ -I D:\Dev-C++\Include\G++\ -c main.cpp -o main.o
In file included from main.cpp:2:
templateclass.h:3: iostream.h: No such file or directory

Hvis jeg selv kompilerer filerne fra kommandoprompten
(dvs kører copy-paster de tre creation linier til
kommandoprompten og kører dem)
får jeg ikke denne fejl.

Hvad dælern foregår der ?

mvh
Jimmy




 
 
Mikael W. Bertelsen (22-08-2003)
Kommentar
Fra : Mikael W. Bertelsen


Dato : 22-08-03 19:54

On Thu, 21 Aug 2003 14:16:43 +0200, Jimmy Rasmussen wrote:

> Hejsa.
>
> Jeg har følgende makefil:
>
> -----------------------------------------------------------------
> project.exe : main.o templateclass.o
> g++ main.o templateclass.o -o project.exe
> main.o : main.cpp
> g++ -I D:\Dev-C++\Include\G++\ -c main.cpp
> templateclass.o : templateclass.cpp
> g++ -I D:\Dev-C++\Include\G++\ -c templateclass.cpp
> -----------------------------------------------------------------
>
> main.cpp og templateclass.cpp refererer begge til filen templateclass.h
> templateclass.h refererer til filen iostream.h som ligger i biblioteket
> "D:\Dev-C++\Include\G++\".
> Alle source filer har filnavne med små bogstaver.
> Jeg bruger Windows Xp og cygwin kompileren.
>
> Når jeg kører make får jeg følgende fejl:
> g++ -I D:\Dev-C++\Include\G++\ -c main.cpp -o main.o
> In file included from main.cpp:2:
> templateclass.h:3: iostream.h: No such file or directory
>
> Hvis jeg selv kompilerer filerne fra kommandoprompten
> (dvs kører copy-paster de tre creation linier til
> kommandoprompten og kører dem)
> får jeg ikke denne fejl.

Jeg har ikke helt forstået hvad du mener med ovenstående.
Kan du ikke poste dine #define-linier fra de forskellige filer.
(Hvis det da hedder det i CPP)

>
> Hvad dælern foregår der ?

Det håber jeg vi kan finde ud af.

/Mikael

Jimmy Rasmussen (23-08-2003)
Kommentar
Fra : Jimmy Rasmussen


Dato : 23-08-03 14:34

"Mikael W. Bertelsen" <newsgroups@tuxpower.dk> wrote in message
> Jeg har ikke helt forstået hvad du mener med ovenstående.
> Kan du ikke poste dine #define-linier fra de forskellige filer.
> (Hvis det da hedder det i CPP)

Jo selvfølgelig.

Filerne er faktisk ret simple, jeg lavede dem for at se om jeg kunne få det
her makefile halløj til at fungere. Men som sagt, selv med dette simple
eksempel, går det galt.
Her er alle de tre filer:

templateclass.h
-----------------------------------------------------------------------
#include <iostream.h>

template <class T>
class TestTemp
{
T t1;
T t2;
public:
void setT1(T t);
void display();
};

template <class T>
void TestTemp<T>::setT1(T t) { t1 = t; }

template <class T>
void TestTemp<T>::display() { cout << t1; }
-----------------------------------------------------------------------


templateclass.cpp
-----------------------------------------------------------------------
#include "templateclass.h"
-----------------------------------------------------------------------


main.cpp
-----------------------------------------------------------------------
#include "templateclass.h"

int main()
{
TestTemp<int> tmp;
tmp.setT1(17);
tmp.setT1(22);
tmp.display();
}
-----------------------------------------------------------------------


og for god ordens skyld makefilen (igen):

makefile
-----------------------------------------------------------------
project.exe : main.o templateclass.o
g++ main.o templateclass.o -o project.exe
main.o : main.cpp
g++ -I D:\Dev-C++\Include\G++\ -c main.cpp
templateclass.o : templateclass.cpp
g++ -I D:\Dev-C++\Include\G++\ -c templateclass.cpp
-----------------------------------------------------------------

mvh
Jimmy



Mikael W. Bertelsen (23-08-2003)
Kommentar
Fra : Mikael W. Bertelsen


Dato : 23-08-03 19:53

On Sat, 23 Aug 2003 15:33:55 +0200, Jimmy Rasmussen wrote:

> templateclass.h
> -----------------------------------------------------------------------
> #include <iostream.h>

Her includerer du en standard headerfil, så den skal ikke defineres i
makefile.

> templateclass.cpp
> -----------------------------------------------------------------------
> #include "templateclass.h"

Her includerer du en specielt specificeret headerfil (i dit tilfælde
sikkert hjemmelavet), så den skal defineres i makefilen.

> main.cpp
> -----------------------------------------------------------------------
> #include "templateclass.h"

Samme som ved templateclass.cpp.

> og for god ordens skyld makefilen (igen):
>
> makefile
> -----------------------------------------------------------------
> project.exe : main.o templateclass.o
> g++ main.o templateclass.o -o project.exe
> main.o : main.cpp
> g++ -I D:\Dev-C++\Include\G++\ -c main.cpp
> templateclass.o : templateclass.cpp
> g++ -I D:\Dev-C++\Include\G++\ -c templateclass.cpp
> -----------------------------------------------------------------

Nu mit bud på en makefile:
all: main.o templateclass.o
<tab> g++ -o project.exe main.o templateclass.o
main.o: main.cpp templateclass.h <-- Her skal du huske specialheaderfilen
<tab> g++ -I D:\Dev-C++\Include\G++\ -c main.cpp
templateclass.o: templateclass.cpp templateclass.h
<tab> g++ -I D:\Dev-C++\Include\G++\ -c templateclass.cpp
clean:
<tab> rm *.o

Du skal så huske at specialheaderfilen skal ligge i samme bibliotek som du
compiler i. Eller skal du angive hvor den er.
Grunden til at du skal huske headerfilen er, at hvis headerfilen bliver
ændret, så skal alle objectfiler compileres om.

all: kan også være project: som i dit tilfælde.

Jeg kan ikke helt tolke fejlmeddelelsen fra compileren, så derfor følgende
spørgsmål:
Er du sikker på at iostream.h er i din standard søgesti?

Jeg er selv absolut nybegynder udi C, så jeg famler måske lidt i blinde,
men prøv ovenstående og giv så lyd mht. resultatet.

/Mikael

Bertel Brander (23-08-2003)
Kommentar
Fra : Bertel Brander


Dato : 23-08-03 19:44

Jimmy Rasmussen wrote:
> Hejsa.
>
> Jeg har følgende makefil:
>
> -----------------------------------------------------------------
> project.exe : main.o templateclass.o
> g++ main.o templateclass.o -o project.exe
> main.o : main.cpp
> g++ -I D:\Dev-C++\Include\G++\ -c main.cpp
> templateclass.o : templateclass.cpp
> g++ -I D:\Dev-C++\Include\G++\ -c templateclass.cpp
> -----------------------------------------------------------------
>
> main.cpp og templateclass.cpp refererer begge til filen templateclass.h
> templateclass.h refererer til filen iostream.h som ligger i biblioteket
> "D:\Dev-C++\Include\G++\".
> Alle source filer har filnavne med små bogstaver.
> Jeg bruger Windows Xp og cygwin kompileren.
>
> Når jeg kører make får jeg følgende fejl:
> g++ -I D:\Dev-C++\Include\G++\ -c main.cpp -o main.o
> In file included from main.cpp:2:
> templateclass.h:3: iostream.h: No such file or directory
>
> Hvis jeg selv kompilerer filerne fra kommandoprompten
> (dvs kører copy-paster de tre creation linier til
> kommandoprompten og kører dem)
> får jeg ikke denne fejl.
>
> Hvad dælern foregår der ?
Jeg har meget svært ved at regne ud hvad der foregår, så
jeg kan kun komme med et par forslag:

1: Det burde ikke være nødvendigt at angive sti til
include filerne, prøv at fjerne "-I D:\Dev-C++\Include\G++\"
2: Prøv at kopiere iostream.h over til dine .cpp filer
3: prøv at angive stien til include filerne som
.../../Dev-C++/Include/G++/

/b

--
Bertel Brander, author of Wain, a free text editor for programmers:
http://home20.inet.tele.dk/midgaard/


Jimmy Rasmussen (23-08-2003)
Kommentar
Fra : Jimmy Rasmussen


Dato : 23-08-03 20:07


Tak for svarerne !

Stierne skulle skrives med "/" i stedet for med "\" som Bertel foreslog det.



Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408186
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste