mksh: Warning: newline is not last character in file Makefile Jak to naprawić ?

0

Podczas kompilacji wyświetla mi się ostrzeżenie jak w tytule wątku :/ Oto plik makefile:

CPPFLAGS= -c -g -Iinc -Wall -pedantic

__start__: sprawdzenie_testu
	./sprawdzenie_testu

sprawdzenie_testu: main.o WyrazenieAlgeb.o Statystyka.o Modul.o
	g++ -Wall -pedantic -o sprawdzenie_testu main.o WyrazenieAlgeb.o Statystyka.o Modul.o                                       

main.o: main.cpp WyrazenieAlgeb.h Statystyka.h Symbol.h
	g++ ${CPPFLAGS} -o main.o main.cpp

WyrazenieAlgeb.o: WyrazenieAlgeb.cpp WyrazenieAlgeb.h Symbol.h
	g++ ${CPPFLAGS} -o WyrazenieAlgeb.o WyrazenieAlgeb.cpp

Statystyka.o: Statystyka.cpp Statystyka.h
	g++ ${CPPFLAGS} -o Statystyka.o Statystyka.cpp

Modul.o: Modul.cpp Modul.h Symbol.h
	g++ ${CPPFLAGS} -o Modul.o Modul.cpp

clean: rm -f *.o sprawdzenie_testu

Czy ktoś wie jak pozbyć się tego ostrzeżenia ? Kombinuje już dosyć długo i nie wiem jak to naprawić :/

2

https://translate.google.pl/#en/pl/Warning%3A%20newline%20is%20not%20last%20character%20in%20file%20Makefile

A poważniej, cel clean: powinien być w samodzielnej linii a komendy usunięcia w oddzielnej pod. Pamiętaj o tabulatorze. make jest na to uczulony.

0

Poprawilem na coś takiego i nadal to samo

CPPFLAGS= -c -g -Iinc -Wall -pedantic

__start__: sprawdzenie_testu
	./sprawdzenie_testu

sprawdzenie_testu: main.o WyrazenieAlgeb.o Statystyka.o Modul.o
	g++ -Wall -pedantic -o sprawdzenie_testu main.o WyrazenieAlgeb.o Statystyka.o Modul.o                                       

main.o: main.cpp WyrazenieAlgeb.h Statystyka.h Symbol.h
	g++ ${CPPFLAGS} -o main.o main.cpp

WyrazenieAlgeb.o: WyrazenieAlgeb.cpp WyrazenieAlgeb.h Symbol.h
	g++ ${CPPFLAGS} -o WyrazenieAlgeb.o WyrazenieAlgeb.cpp

Statystyka.o: Statystyka.cpp Statystyka.h
	g++ ${CPPFLAGS} -o Statystyka.o Statystyka.cpp

Modul.o: Modul.cpp Modul.h Symbol.h
	g++ ${CPPFLAGS} -o Modul.o Modul.cpp

clean: 
	rm -f *.o sprawdzenie_testu
1

Na końcu makefile'a postaw dodatkowy enter.

sprawdzenie_testu: main.o WyrazenieAlgeb.o Statystyka.o Modul.o
    g++ -Wall -pedantic -o sprawdzenie_testu main.o WyrazenieAlgeb.o Statystyka.o Modul.o        

Żeby nie przepisywać tak dwa razy wszystkiego:

> sprawdzenie_testu: main.o WyrazenieAlgeb.o Statystyka.o Modul.o
>     g++ -Wall -pedantic -o $@ $^

Gdzie $@ oznacza nazwę przed dwukropkiem, a $^ „wszystko to co po dwukropku”.
·

main.o: main.cpp WyrazenieAlgeb.h Statystyka.h Symbol.h
   g++ ${CPPFLAGS} -o main.o main.cpp
main.o: main.cpp WyrazenieAlgeb.h Statystyka.h Symbol.h
    g++ ${CPPFLAGS} -o $@ $<

$< oznacza „pierwszy plik po dwukropku”.
·
Ale można to zrobić lepiej. Znacznie lepiej, tak że kompilator i make za ciebie będą śledzić zależności między .cpp a .h, a ty tylko dodajesz nowe pliki .o od czasu do czasu na początku, a cała reszta dzieje się automagicznie:

PROJECT = sprawdzenie_testu
CPP_OBJECTS = main.o WyrazenieAlgeb.o Statystyka.o Modul.o
CPP_FLAGS= -c -g -Iinc -Wall -pedantic

EXE = $(PROJECT)

all: $(EXE)

CPP_DEPS = $(CPP_OBJECTS:.o=.d)
-include $(CPP_DEPS)

$(EXE): $(CPP_OBJECTS)
	g++ -Wall -pedantic -o $(EXE) $(CPP_OBJECTS)

%.o: %.cpp
	g++ -c $(CPP_FLAGS) $< -MMD -MP

clean:
	rm -f $(CPP_OBJECTS)
	rm -f $(CPP_DEPS)
	rm -f $(EXE)

__start__: $(EXE)
    ./$(EXE)

.PHONY: clean all __start__

Nie sprawdzane, rzecz jasna. Przerobiłem z mojego projektu.
Zauważysz że podczas kompilacji generowane są dodatkowe pliki .d. To są generowane automatycznie fragmenty makefile'a, zawierające zależności konkretnego pliku .o. Wciągane są do głównego makefile'a dyrektywą -include.

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