makefile kompilacja wielu plikow konsolidacja

1

Witam. Mam porozrzucane pliki nagłówkowe po folderach i próbuję skonsolidować i zlinkować pliki ze sobą ale ciągle przy deklaracji

#include "macierz.hh"
#include "wektor.hh"
#include <iostream>
#include <cstdlib>
#include <string>

#define STR(x) #x

using namespace std;


int main()
{
  Macierz m;
	Wektor v;

.
.
.
.

pojawia się :


src/main.cpp: In function ‘int main()’:
src/main.cpp:15:2: error: ‘Wektor’ was not declared in this scope
src/main.cpp:15:9: error: expected ‘;’ before ‘v’
make: *** [obj/main.o] Błąd 1



zaś gdy zakomentuje #include "wektor.hh" i usunę obiekt tej klasy to wszystko działa.

PROG=mnozenie


__start__: obj ${PROG} 
	./${PROG} < test.dane

obj:
	mkdir obj

${PROG}: obj/macierz.o obj/wektor.o obj/main.o 
	g++ -Wall -o ${PROG} obj/wektor.o obj/macierz.o  obj/main.o 


obj/macierz.o: inc/typ.hh inc/macierz.hh src/macierz.cpp
	g++ -c -Wall -pedantic -Iinc -o obj/macierz.o src/macierz.cpp

obj/wektor.o:  inc/typ.hh inc/wektor.hh src/wektor.cpp
	g++ -c -Wall -pedantic -Iinc -o obj/wektor.o src/wektor.cpp


obj/main.o: inc/typ.hh inc/wektor.hh src/main.cpp
	g++ -c -Wall -pedantic -Iinc -o obj/main.o src/main.cpp




 
1

g++ -E generuje ci wyjście po preprocesingu. Zobacz sobie że zapewne nie dołącza ci rzeczonego nagłówka.

1

Faktycznie jest tak jak piszesz... Nie dołącza mi teh owej biblioteki. I co z tym mam zrobić?

0

A jak podasz ścieżkę bezwzględną do katalogu inc? (zrób z niej sobie zmienna w makefile żeby nie kopiować ;) )

0

Dałem tak i jest to samo.. ;p

PROG=mnozenie
INC=`readlink -f inc`

__start__: obj ${PROG} 
	./${PROG} < test.dane

obj:
	mkdir obj

${PROG}: obj/macierz.o obj/wektor.o obj/main.o 
	g++ -Wall -o ${PROG}  obj/main.o obj/wektor.o obj/macierz.o 


obj/macierz.o: inc/typ.hh inc/macierz.hh src/macierz.cpp
	g++ -c -Wall -pedantic -I${INC} -o obj/macierz.o src/macierz.cpp



obj/main.o: inc/typ.hh src/main.cpp 
	g++ -c -Wall -pedantic -I${INC} -o obj/main.o src/main.cpp



obj/wektor.o:  inc/typ.hh inc/wektor.hh src/wektor.cpp
	g++ -c -Wall -pedantic -I${INC} -o obj/wektor.o src/wektor.cpp


 
0

A patrząc na echo tych komend wygląda to poprawnie? Nie ma tam jakichś białych znaków ani nic takiego? Poza tym katalog inc leży w katalogu z makefile i z poziomu tego katalogu wykonujesz make?

0

Wszystko inne jest poprawne. make'a wykonuje tam gdzie mam Makefile... Dodam że jak zakomentuje macierz.h to wektor działa i na odwrót
http://ge.tt/8miqEwd/v/0
link do projektu

0

? Znaczy że masz błąd w kodzie. Pokaż te dwa nagłówki. Zgaduje ze zgodnie z zasadą copy-paste wkleiłeś do oby ten sam header guard i jeden wycina drugi...

0

Proszę

 
#ifndef WEKTOR_HH
#define WEKTOR_HH

#include "typ.hh"
#include "liczbazespolona.hh"
#include "symbol.hh"
#include "iostream"
#include <stdlib.h>

using namespace std;

class Macierz {
  TYP  macierz[4][4];
	int kolumna, wiersz;
	int flagaPierwszyZnak;
	

public:
	Macierz();
	friend istream& operator >>(istream &strm, Macierz &ob);
	~Macierz();
	void wyswietlaMacierz();
	void zeruj();

	
};

#endif 

 


#ifndef WEKTOR_HH
#define WEKTOR_HH

#include "typ.hh"
#include "liczbazespolona.hh"
#include "symbol.hh"
#include "iostream"
#include <stdlib.h>

using namespace std;

class Macierz {
  TYP  macierz[4][4];
	int kolumna, wiersz;
	int flagaPierwszyZnak;

public:
	Macierz();
	friend istream& operator >>(istream &strm, Macierz &ob);
	~Macierz();
	void wyswietlaMacierz();
	void zeruj();

	
};



#endif 





0

O boże ;(( Miałeś rację... teraz dopiero to zauważyłem ;/ parę h w plecy;/

0

Widzisz, gdybyś od razu napisał jakie są objawy to dostałbyś odpowiedź jeszcze wczoraj ;]

0

Ale gdybyś mi teraz nie odpowiedział to pewnie jeszcze do jutra bym analizował makefile'a zanim bym zaczął szukać w nagłówkach... Dzięki wielkie!:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1