Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.
  • #1
    Mirko51
    Level 15  
    Witam,

    jak wymusić w pliku makefile aby wszystkie pliki wyjściowe (*.hex, *.o, itp) zostały wygenerowane do podfolderu np. /Output?
  • #3
    Mirko51
    Level 15  
    Freddie Chopin wrote:
    poczytac instrukcje do gcc i linkera.

    0x41 0x56 0x45!!


    poczytałem, poszperałem w google... i dalej nic :(
    W opcjach linkera nie widzę, by taka komenda była dostępna.
  • #4
    fantom
    Level 31  
    W zasadzie przy opcji -o z kompilatora i linkera moglbys dodac /output/plik_wynikowy albo wejsc na poczatku do katalogu w ktorym chcesz miec "wyjscie" i tam wykonac kompilacje i linkowanie.

    A jak kolega Freddie Chopin gruntownie juz przeczytal manuala do gcc i zna jakis tajemniczy przelacznik zeby tego dokonac inaczej to moze sie z nami podzieli.
  • #5
    adamusx
    Level 27  
    Nie obraź się Freddie ale Twoje posty to w 50% zbędne, zaśmiecające forum wypowiedzi. Jak nie znasz odpowiedzi na pytanie to daruj sobie takie ironiczne teksty.
    <<sorry za offtop

    Pytanie Mirko51 nie jest takie banalne i nie wiem czy tak latwo to wyczytać z manuala do gcc. Moze napisz dlaczego chcesz by plik hex generowany był w podfolderze?
  • #6
    Mirko51
    Level 15  
    adamusx wrote:

    Moze napisz dlaczego chcesz by plik hex generowany był w podfolderze?


    Nie chodzi konkretnie o ten jeden plik, a o wszystkie wyjściowe pliki (szczególnie obj i lst). Projekt składa się z dużej ilości źródełek i bibliotek. Po kompilacji powstaje mnóstwo plików, które lądują w folderze projektu. Chciałbym nad tym zapanować i wymusić porządek.
    Udało mi się jedynie przenieść część plików do folderu /src i poprawić makefile, co skutkuje tym, że wynik kompilacji (obj i lst) znajduje się właśnie tam.

    Ktoś miał podobny problem:
    http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=62627
    Jednak w moim gcc (20071221) instrukcja OBJDIR jest najwidoczniej pomijana.
  • #7
    fantom
    Level 31  
    Przetestowalem moj sposob i dziala oto przyklad:
    
    all:
    		gcc -c -o ./exe/main.o main.c
    		gcc -o ./exe/main.exe ./exe/main.o
    

    Najpierw kompilacja do object file-a, potem linkowanie (w plikach wejsciowych mozna ich podac kilka, plikiem wyjsciowym dla AVR bedzie elf (lub coff) nie exe) no a na koncu w twoim przypadku trzeba jeszcze wywolac objcopy zeby stworzyc hex-a ale to mozna juz robic najpierw wchodzac do katalogu gdzie sa wszystkie object-y.Jesli chodzi o pliki .lst to sa one generowane z tego co pamietam przez objdump no i tam zasada jest rowniez taka sama. Co do postu ktory zacytowales to chodzi tylko o to ze ktos mogl sobie w Makefile zdefiniwac zmienna OBJDIR i nadac jej wartosc katalogu obecnego (.) ktory ewentualnie mozna zmienic, jednak zalezy to od tego jak ten Makefile zostal napisany (u ciebie moze tego nie byc) jednak ty sam mozesz sobie w ten sposob sparametryzowac swoj Makefile wowczac mozesz miec cos takiego:
    
    OBJDIR=./exe
    all:
    		gcc -c -o ${OBJDIR}/main.o main.c
    		gcc -o ${OBJDIR}/main.exe ${OBJDIR}/main.o
    
    
  • #8
    Mirko51
    Level 15  
    [quote="fantom"]Przetestowalem moj sposob i dziala oto przyklad:
    
    all:
    		gcc -c -o ./exe/main.o main.c
    		gcc -o ./exe/main.exe ./exe/main.o
    


    chyba zrobiłem coś nie tak, bo kompiluje się do folderu /exe tylko plik main, pozostałe bez zmian, czyli do folderu src. Nic więcej nie wymyślę, poddaję się. Dla porządku dołączam tego nieszczęsnego makefile.
  • Helpful post
    #9
    fantom
    Level 31  
    No coz myslalem ze troche kumasz o co chodzi w Makefile i bedziesz w stanie dopasowac sobie to co napisalem do wlasnych celow no ale mylilem sie ;-).Poprawilem ten Makefile ale nie mam mozliwosci go przetestowac wiec jakby jakies bledy byly to daj znac ale najpierw sprobuj pokombinowac w ten sam desen co ja.Dodalem wygodna zmienna OBJDIR tak aby tylko za jej pomoca mozna bylo zmienic folder do "binarek".
  • #10
    Freddie Chopin
    MCUs specialist
    w koncu wrocilem z pociagowego tournee po polsce i moglem siasc do tego o czym tutaj mowa [;

    2h z googlem, info od GNU Make i oto plik makefile, ktory kompiluje pliki zrodlowe w zdefiniowanym katalogu $(SRCDIR), dolaczajac do nich naglowki z innego katalogu $(INC) a wszystkie pliki wynikowe umieszcza w katalogu $(OUTDIR).

    oczywiscie sam calego nie napisalem, ale go przerobilem odpowiednio, zeby wlasnie taki efekt osiagnac [;

    plik jest dla ARMa, ale ze na AVRa tez jest gcc, mysle ze wymagane poprawki beda niewielkie, glownie w aspekcie wywolan kompilatora. mozliwe tez ze beda wielkie, bo chyba troszke inna skladnia jest [; no ale to juz detale sa, mozna pozmieniac z automatu [;

    0x41 0x56 0x45!!
  • #11
    Mirko51
    Level 15  
    thx za pomoc, korzystając z wolnej chwili uporałem się z tym problemem.
    Gdyby ktoś borykał się kiedyś z podobnym problemem to zamiszczam w załączniku przykładowy projekt dla AVR, którego źródełka znajdują się w /src i /inc a binarki kompilują się do /bin oraz do /obj.