makefile kompilacja wielu plikow konsolidacja

makefile kompilacja wielu plikow konsolidacja
damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
1

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

Kopiuj
#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ę :

Kopiuj

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.

Kopiuj
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




 
edytowany 1x, ostatnio: damiannno
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
1

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

edytowany 1x, ostatnio: damiannno
Shalom
Nie bumpuj tematu w ten sposób...
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
0

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

Kopiuj
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


 
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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?


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
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

edytowany 1x, ostatnio: damiannno
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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...


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
0

Proszę

Kopiuj
 
#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 

Kopiuj
 


#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 





damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
0

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

edytowany 1x, ostatnio: damiannno
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

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


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
damiannno
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:68
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!:)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.