CZeść.
Próbuję kompilować w WinAVR (zwykle robiłem to w ICC) wg kursu EdW ale jest tam opis pliku makefile dla wersji kompilatora z nr 20050214. Sciągnąłem wersję nr 20060421 i zainstlowałem, ale stwierdziłem że są pewne zmiany w stosunku do poprzedniej wersji zwłaszcza jeśli chodzi o plik makefile. Są tam dodane pewne fragmenty, których nie ma w poprzednim i szczerze mówiąc teraz nie wiem so wpisać.
NIe zabardzo rozumiem pole TARGET oraz SRC, CPPSRC. CZy jeżeli plik jest np. main.c to pole CPPSRC zostaje niewypełnione.
W kursie jest użyte SRC = $(TARGET).c, a je w tej nowzej wersji mam puste pole.
Czy mogę prosić o przybliżenie jak to powypełniać.
Czy jest jakiś konflikt nazw, tzn. czy katalog z projektem może się nazywać jak plik z kodem i tym podobne.
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięróżnice w plikach makefile dla winAVR
Moderatorzy:Jacek Bogusz, procesorowiec, r-mik, Moderatorzy
Skrypty make to temat rzeka a wiec w wielkim skrocie w przypadku przykladu makefile z avrgcc bedzie tak:
TARGET - nazwa pliku wynikowego (hex lub bin jaki powstaje) na przyklad wpiszesz TARGET=ala_ma_kota wowczas jako plik wynikowy powstanie: ala_ma_kota.hex
SRC - tutaj wpisujesz liste plików źródłowych (C) projektu na przyklad jezeli twoj projekt bedzie sie skladal z trzech plikow wowczas wpisujesz ala.c ola.c jola.c wpisujesz
SRC = ala.c \
ola.c \
jola.c
CPPSRC - lista plików źródłowych (C++) jeżeli to jest projekt C to nic nie wpisujesz - zostawiasz puste.
Pozdr.
L.B.
TARGET - nazwa pliku wynikowego (hex lub bin jaki powstaje) na przyklad wpiszesz TARGET=ala_ma_kota wowczas jako plik wynikowy powstanie: ala_ma_kota.hex
SRC - tutaj wpisujesz liste plików źródłowych (C) projektu na przyklad jezeli twoj projekt bedzie sie skladal z trzech plikow wowczas wpisujesz ala.c ola.c jola.c wpisujesz
SRC = ala.c \
ola.c \
jola.c
CPPSRC - lista plików źródłowych (C++) jeżeli to jest projekt C to nic nie wpisujesz - zostawiasz puste.
Pozdr.
L.B.
W zamysle autora pliku makefile CPPSRC są to pliki źródlowe napisane w języku C++ (Nie C) ktore pod systemami M$Win najczesciej zapisujemy z rozszerzeniem *.cpp natomiast pliki SRC są plikami napisanymi w czystym C. W skrocie rozdzielenie plikow C++ i C umozliwia w mieszanych projektach C z C++ wywolanie odpowiedniego kompilatora GCC z innymi opcjami kompilacji dla jezyka C++ (avr-c++) oraz innymi dla programow jezyka c (avr-gcc). Jak to jest projekt w tylko projekt napisany w C a dla AVRow tak bedzie raczej w 95% przypadkow poniewaz dla avrow biblioteka stdlibc++ i tak nie jest zrobiona, to nie ma zadnego problemu pole CPPSRC pozostwawiamy puste zostanie wywolany kompilator C. Jezeli chodzi o opcje TARGET to nie ma ona nic wspolnego z nazwą pliku gdzie znajduje sie funkcja main. Mozemy wpisac tam sobie dowolna nazwe jaka chcemy zeby mial plik wynikowy hex. Generalnie funkcja main moze byc w dowolnym pliku źródlowym, ważne tylko zeby byla gdzieś w projekcie..
W zasadzie w pierwszym poscie (Twoim) jest pewna forma, uporzadkowanie, sytuacji.
W SRC masz podane (jak twierdzisz w kursie tak podaja): $(TARGET).c co oznacza ni mniej ni wiecej, tylko jako jeden z plikow zrodlowych wez nazwe z pola target i rozwin ja o rozszerzenie .c
W tym podejsciu mozesz potraktowac pole TARGET jako swego rodzaju nazwe projektu. Skad bedzie brana nazwa (bez rozszerzenia) glownego pliku zrodlowego (uzupelniana tym rozszerzeniem), oraz wykozystana bedzie rowniez jako nazwa wynikowa (tez uzupelniona - lub nie - rozszerzeniem). Jednak pamietaj zawsze, ze jest to tylko takie uproszczenie rozumowania.
Odnosnie zas ostatniego pytania, o ile Twoj plik zrodlowy posiada rozszerzenie (a wypadalo by zeby mial, by zachowac porzadek), to tak... w SRC podajesz rozszerzenia. Nie podaje sie rozszerzenia tam, gdzie plik rozszerzenia nie ma (choc sytuacja taka w przypadku zrodel nie powinna miec miejsca). Jest tez mozliwosc, ze tam gdzie sie "nie podaje", jest to pozniej uzupelniane "automatycznie", tak jak wyjasnilem to na poczatku.
W SRC masz podane (jak twierdzisz w kursie tak podaja): $(TARGET).c co oznacza ni mniej ni wiecej, tylko jako jeden z plikow zrodlowych wez nazwe z pola target i rozwin ja o rozszerzenie .c
W tym podejsciu mozesz potraktowac pole TARGET jako swego rodzaju nazwe projektu. Skad bedzie brana nazwa (bez rozszerzenia) glownego pliku zrodlowego (uzupelniana tym rozszerzeniem), oraz wykozystana bedzie rowniez jako nazwa wynikowa (tez uzupelniona - lub nie - rozszerzeniem). Jednak pamietaj zawsze, ze jest to tylko takie uproszczenie rozumowania.
Odnosnie zas ostatniego pytania, o ile Twoj plik zrodlowy posiada rozszerzenie (a wypadalo by zeby mial, by zachowac porzadek), to tak... w SRC podajesz rozszerzenia. Nie podaje sie rozszerzenia tam, gdzie plik rozszerzenia nie ma (choc sytuacja taka w przypadku zrodel nie powinna miec miejsca). Jest tez mozliwosc, ze tam gdzie sie "nie podaje", jest to pozniej uzupelniane "automatycznie", tak jak wyjasnilem to na poczatku.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 6 gości