eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaMakefile › Re: Makefile
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.pi.v.chmurka.n
    et!not-for-mail
    From: q...@t...no1 (Queequeg)
    Newsgroups: pl.misc.elektronika
    Subject: Re: Makefile
    Date: Wed, 22 Aug 2018 10:58:59 +0000 (UTC)
    Organization: news.chmurka.net
    Message-ID: <2...@t...no1>
    References: <5b7ad99d$0$673$65785112@news.neostrada.pl>
    NNTP-Posting-Host: pi.v.chmurka.net
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2
    Content-Transfer-Encoding: 8bit
    Injection-Date: Wed, 22 Aug 2018 10:58:59 +0000 (UTC)
    Injection-Info: news.chmurka.net; posting-account="gof";
    posting-host="pi.v.chmurka.net:172.24.44.20"; logging-data="27709";
    mail-complaints-to="abuse-news.(at).chmurka.net"
    User-Agent: tin/2.4.2-20171224 ("Lochhead") (UNIX) (Linux/4.4.50-v7+ (armv7l))
    Cancel-Lock: sha1:TD8e0byZx+0NlyIPm86lpTznVBk=
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:735509
    [ ukryj nagłówki ]

    Atlantis <m...@w...pl> wrote:

    > 2) W pierwszej fazie kompilator cc65 bierze wszystkie pliki *.c i
    > generuje na ich podstawie pliki asemblerowe *.s (z tego co wiem CC65 nie
    > potrafi od razu wygenerować pliku binarnego z kodu C).
    > 3) Następnie asembler ca65 na podstawie każdego pliku *.s (zarówno tego
    > wygenerowanego przez cc65, jak i znajdującego się tam od początku)
    > generuje plik *.o, umieszczając go w folderze obj.

    Jeśli chcesz dostosować to do istniejącego makefile to może najprościej
    będzie ci zrobić wrapper, który wywoła cc65, a potem ca65 i skasuje plik
    .s?

    > 4) Linker ld64 łączy wszystkie pliki *.o z tego folderu w jeden plik
    > binarny.
    > 5) Na końcu plik binarny jest konwertowany do formatu *.hex, ale to
    > akurat najmniejszy problem.
    >
    > Ktoś mi powie jak to powinno wyglądać?

    Jeśli upierasz się przy GNU Make, to zrobiłym to tak (nie znam składni
    cc65 i innych narzędzi, dostosuj w razie czego, ścieżki też):

    NAME = maketest
    SRCS = maketest.c maketest2.c

    ASMS = $(SRCS:.c=.s)
    OBJS = $(ASMS:.s=.o)

    .PHONY: all clean
    all: $(NAME).hex

    %.s:
    cc65 -o $@ $<

    %.o:
    ca65 -o $@ $<

    $(ASMS): $(SRCS)

    $(OBJS): $(ASMS)

    $(NAME).bin: $(OBJS)
    ld64 -o $(NAME).bin $(OBJS)

    $(NAME).hex: $(NAME).bin
    program_do_konwersji_do_hex $(NAME).hex $(NAME).bin

    clean:
    rm -f $(NAME).hex $(NAME).bin $(OBJS) $(ASMS)

    Prosty test pokazuje, że działa (tylko PATH ustawiłem na .:$PATH żeby
    wykryło te skrypty udające cc65 itd.):

    $ ls -l
    razem 16
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 ca65 -> cc65
    -rwxr-xr-x 1 queequeg queequeg 9 sie 22 12:56 cc65
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 ld64 -> cc65
    -rw-r--r-- 1 queequeg queequeg 404 sie 22 12:56 Makefile
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:45 maketest1.c
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:51 maketest2.c
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 program_do_konwersji_do_hex -> cc65

    $ cat cc65
    cp $3 $2

    $ make
    cc65 -o maketest1.s maketest1.c
    cc65 -o maketest2.s maketest1.c
    ca65 -o maketest1.o maketest1.s
    ca65 -o maketest2.o maketest1.s
    ld64 -o maketest.bin maketest1.o maketest2.o
    program_do_konwersji_do_hex -o maketest.hex maketest.bin

    $ ls -l
    razem 40
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 ca65 -> cc65
    -rwxr-xr-x 1 queequeg queequeg 9 sie 22 12:56 cc65
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 ld64 -> cc65
    -rw-r--r-- 1 queequeg queequeg 404 sie 22 12:56 Makefile
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:45 maketest1.c
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:57 maketest1.o
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:57 maketest1.s
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:51 maketest2.c
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:57 maketest2.o
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:57 maketest2.s
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:57 maketest.bin
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:57 maketest.hex
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 program_do_konwersji_do_hex -> cc65

    $ make clean
    rm -f maketest.hex maketest.bin maketest1.o maketest2.o maketest1.s maketest2.s

    $ ls -l
    razem 16
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 ca65 -> cc65
    -rwxr-xr-x 1 queequeg queequeg 9 sie 22 12:56 cc65
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 ld64 -> cc65
    -rw-r--r-- 1 queequeg queequeg 404 sie 22 12:56 Makefile
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:45 maketest1.c
    -rw-r--r-- 1 queequeg queequeg 5 sie 22 12:51 maketest2.c
    lrwxrwxrwx 1 queequeg queequeg 4 sie 22 12:55 program_do_konwersji_do_hex -> cc65

    --
    https://www.youtube.com/watch?v=9lSzL1DqQn0

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: