Makefile pod win7

0

Witam,

Mam do zrobienia zadania:
Utwórz z funkcji implementujących operacje z pierwszej i drugiej listy zadań bibliotekę funkcji.
Przygotuj odpowiedni program nagłówkowy oraz umieść każdą funkcję w osobnym pliku źródłowym
Zadanie
Przygotuj odpowiedni plik Makefile aby biblioteka z zadania pierwszego automatycznie kompilowała się do postaci statycznej.
Zadanie
Przygotuj odpowiedni plik Makefile aby biblioteka z zadania pierwszego automatycznie kompilowała się do postaci współdzielonej (dynamicznej).
Zadanie
Przekształć program z ostatniego zadania drugiej listy zadań tak aby podczas kompilacji łączył się statycznie oraz dynamicznie z bibliotekami z powyższych zadań.
Ale szczerze, po przeczytaniu dużej ilości poradników z sieci nadal jestem z tego ciemny.
Zacznijmy od tego że pracuje na win7, wyczytałem że potrzebny jest do tego gnuwin32 który pobrałem z tego źródła: Complete package, except sources
http://gnuwin32.sourceforge.net/packages/make.htm

Stworzyłem biblioteke: strktury.h, każdą funkcje zdefiniowałem w oddzielnym pliku źródłowym .cpp , program działa gdy kompiluje go w dev. Czy ktoś jest w stanie mi wytłumaczyć jak zabrać się za te zadania? Od czego zacząć? Bardzo proszę o pomoc i wskazówki, nie szukam osoby która zrobi to za mnie ale kogoś kto mnie nauczy i pokaże drogę do rozwiązania zadań.

0

Postać statyczna - to zwykła biblioteka *.lib pod windows; *.a pod unixem
Postać dynamiczna - to biblioteka *.dll pod windows; *.so pod unixem
Możesz to nadal kompilować w DevCpp, wystarczy zmienić opcje projektu.
Po kompilacji projektu DevCpp sam tworzy makefile, więc możesz sobie podpatrzyć jak jest zbudowany.

0
  1. Project: Projekt2
  2. Makefile created by Dev-C++ 4.9.9.2

CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES =
OBJ = main.o push.o pop.o empty.o reset.o znajdz_wezel.o znajdz_kawedz.o sasiedzi.o path_rek2.o path_rek1.o krawedz_miedzy.o dodaj_wezel.o dodaj_krawedz.o usun_wezel.o usun_krawedz.o drukuj.o drukuj_wezly.o drukuj_krawedzie.o menu.o $(RES)
LINKOBJ = main.o push.o pop.o empty.o reset.o znajdz_wezel.o znajdz_kawedz.o sasiedzi.o path_rek2.o path_rek1.o krawedz_miedzy.o dodaj_wezel.o dodaj_krawedz.o usun_wezel.o usun_krawedz.o drukuj.o drukuj_wezly.o drukuj_krawedzie.o menu.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib"
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = Projekt1.a
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before Projekt1.a all-after

clean: clean-custom
${RM} $(OBJ) $(BIN)

$(BIN): $(LINKOBJ)
ar r $(BIN) $(LINKOBJ)
ranlib $(BIN)

main.o: main.cpp
$(CPP) -c main.cpp -o main.o $(CXXFLAGS)

push.o: push.cpp
$(CPP) -c push.cpp -o push.o $(CXXFLAGS)

pop.o: pop.cpp
$(CPP) -c pop.cpp -o pop.o $(CXXFLAGS)

empty.o: empty.cpp
$(CPP) -c empty.cpp -o empty.o $(CXXFLAGS)

reset.o: reset.cpp
$(CPP) -c reset.cpp -o reset.o $(CXXFLAGS)

znajdz_wezel.o: znajdz_wezel.cpp
$(CPP) -c znajdz_wezel.cpp -o znajdz_wezel.o $(CXXFLAGS)

znajdz_kawedz.o: znajdz_kawedz.cpp
$(CPP) -c znajdz_kawedz.cpp -o znajdz_kawedz.o $(CXXFLAGS)

sasiedzi.o: sasiedzi.cpp
$(CPP) -c sasiedzi.cpp -o sasiedzi.o $(CXXFLAGS)

path_rek2.o: path_rek2.cpp
$(CPP) -c path_rek2.cpp -o path_rek2.o $(CXXFLAGS)

path_rek1.o: path_rek1.cpp
$(CPP) -c path_rek1.cpp -o path_rek1.o $(CXXFLAGS)

krawedz_miedzy.o: krawedz_miedzy.cpp
$(CPP) -c krawedz_miedzy.cpp -o krawedz_miedzy.o $(CXXFLAGS)

dodaj_wezel.o: dodaj_wezel.cpp
$(CPP) -c dodaj_wezel.cpp -o dodaj_wezel.o $(CXXFLAGS)

dodaj_krawedz.o: dodaj_krawedz.cpp
$(CPP) -c dodaj_krawedz.cpp -o dodaj_krawedz.o $(CXXFLAGS)

usun_wezel.o: usun_wezel.cpp
$(CPP) -c usun_wezel.cpp -o usun_wezel.o $(CXXFLAGS)

usun_krawedz.o: usun_krawedz.cpp
$(CPP) -c usun_krawedz.cpp -o usun_krawedz.o $(CXXFLAGS)

drukuj.o: drukuj.cpp
$(CPP) -c drukuj.cpp -o drukuj.o $(CXXFLAGS)

drukuj_wezly.o: drukuj_wezly.cpp
$(CPP) -c drukuj_wezly.cpp -o drukuj_wezly.o $(CXXFLAGS)

drukuj_krawedzie.o: drukuj_krawedzie.cpp
$(CPP) -c drukuj_krawedzie.cpp -o drukuj_krawedzie.o $(CXXFLAGS)

menu.o: menu.cpp
$(CPP) -c menu.cpp -o menu.o $(CXXFLAGS)

Tak wygląda makefile.win gdy zmieniłem typ w opcjach projektu na Win32 Biblioteka Statyczna

A tak gdy na Biblioteka DLL

  1. Project: Projekt2
  2. Makefile created by Dev-C++ 4.9.9.2

CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES =
OBJ = main.o push.o pop.o empty.o reset.o znajdz_wezel.o znajdz_kawedz.o sasiedzi.o path_rek2.o path_rek1.o krawedz_miedzy.o dodaj_wezel.o dodaj_krawedz.o usun_wezel.o usun_krawedz.o drukuj.o drukuj_wezly.o drukuj_krawedzie.o menu.o $(RES)
LINKOBJ = main.o push.o pop.o empty.o reset.o znajdz_wezel.o znajdz_kawedz.o sasiedzi.o path_rek2.o path_rek1.o krawedz_miedzy.o dodaj_wezel.o dodaj_krawedz.o usun_wezel.o usun_krawedz.o drukuj.o drukuj_wezly.o drukuj_krawedzie.o menu.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib"
INCS = -I"C:/Dev-Cpp/include"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include"
BIN = Projekt1.dll
CXXFLAGS = $(CXXINCS)
CFLAGS = $(INCS)
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before Projekt1.dll all-after

clean: clean-custom
${RM} $(OBJ) $(BIN)

DLLWRAP=dllwrap.exe
DEFFILE=libProjekt1.def
STATICLIB=libProjekt1.a

$(BIN): $(LINKOBJ)
$(DLLWRAP) --output-def $(DEFFILE) --driver-name c++ --implib $(STATICLIB) $(LINKOBJ) $(LIBS) -o $(BIN)

main.o: main.cpp
$(CPP) -c main.cpp -o main.o $(CXXFLAGS)

push.o: push.cpp
$(CPP) -c push.cpp -o push.o $(CXXFLAGS)

pop.o: pop.cpp
$(CPP) -c pop.cpp -o pop.o $(CXXFLAGS)

empty.o: empty.cpp
$(CPP) -c empty.cpp -o empty.o $(CXXFLAGS)

reset.o: reset.cpp
$(CPP) -c reset.cpp -o reset.o $(CXXFLAGS)

znajdz_wezel.o: znajdz_wezel.cpp
$(CPP) -c znajdz_wezel.cpp -o znajdz_wezel.o $(CXXFLAGS)

znajdz_kawedz.o: znajdz_kawedz.cpp
$(CPP) -c znajdz_kawedz.cpp -o znajdz_kawedz.o $(CXXFLAGS)

sasiedzi.o: sasiedzi.cpp
$(CPP) -c sasiedzi.cpp -o sasiedzi.o $(CXXFLAGS)

path_rek2.o: path_rek2.cpp
$(CPP) -c path_rek2.cpp -o path_rek2.o $(CXXFLAGS)

path_rek1.o: path_rek1.cpp
$(CPP) -c path_rek1.cpp -o path_rek1.o $(CXXFLAGS)

krawedz_miedzy.o: krawedz_miedzy.cpp
$(CPP) -c krawedz_miedzy.cpp -o krawedz_miedzy.o $(CXXFLAGS)

dodaj_wezel.o: dodaj_wezel.cpp
$(CPP) -c dodaj_wezel.cpp -o dodaj_wezel.o $(CXXFLAGS)

dodaj_krawedz.o: dodaj_krawedz.cpp
$(CPP) -c dodaj_krawedz.cpp -o dodaj_krawedz.o $(CXXFLAGS)

usun_wezel.o: usun_wezel.cpp
$(CPP) -c usun_wezel.cpp -o usun_wezel.o $(CXXFLAGS)

usun_krawedz.o: usun_krawedz.cpp
$(CPP) -c usun_krawedz.cpp -o usun_krawedz.o $(CXXFLAGS)

drukuj.o: drukuj.cpp
$(CPP) -c drukuj.cpp -o drukuj.o $(CXXFLAGS)

drukuj_wezly.o: drukuj_wezly.cpp
$(CPP) -c drukuj_wezly.cpp -o drukuj_wezly.o $(CXXFLAGS)

drukuj_krawedzie.o: drukuj_krawedzie.cpp
$(CPP) -c drukuj_krawedzie.cpp -o drukuj_krawedzie.o $(CXXFLAGS)

menu.o: menu.cpp
$(CPP) -c menu.cpp -o menu.o $(CXXFLAGS)
Czy o to chodzi?

0

Powiedzmy, że 2 zadania zrobiłem. Mam jeszcze z tym
Zadanie
Przekształć program z ostatniego zadania drugiej listy zadań tak aby podczas kompilacji łączył się statycznie oraz dynamicznie z bibliotekami z powyższych zadań.
Na czym polega to przekształcenie? Jest w stanie ktoś mi pomóc z tym zadaniem?

0

możesz plik znacznie skrócić, wywalając litanię prawie identycznych reguł i zastąpienie regułą uogólnioną:

%.o: %.cpp
    $(CPP) -c $< -o $@ $(CXXFLAGS)

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