Stránka 1 z 1

Proč make smaže na konci kompilace některé soubory?

Napsal: 05 lis 2016, 18:58
od lesana87
Ahoj.
Jak si tak hraju s tím C pro Z80, tak jsem narazila na divnou věc při kompilaci. Když make skončí kompilaci, tak mi smaže některé soubory, které vznikly při kompilaci. Nemůžu přijít na to, proč to dělá a jak mu v tom zabránit. Poradí prosím někdo? Přikládám výpis makefile a výpis z překladu. Konkrétně jde o tu poslední řádku "rm cat.ihx sh.ihx", kde smaže hexa soubory z překladu.

Kód: Vybrat vše

AS = sdasz80.exe
LD = sdldz80.exe
AR = sdar.exe
CC = sdcc.exe
CFLAGS = -mz80 --nostdinc -Ilibc/include
CPP = sdcc.exe --nostdinc -Ilibc/include

LIBS   = libc/libc.lib
OBJS := $(patsubst %.c,%.bin,$(wildcard *.c))

# kompilace C
%.rel: %.c
   $(CC) $(CFLAGS) -c $< -o $@

# kompilace asm
%.rel: %.s
   $(AS) -o $<

%.ihx: %.rel
# Vytvoreni souboru s parametry pro linker
   echo "-mjwx" > link.lk
   echo "-i $@" >> link.lk
   echo "-b _CODE = 0x1020" >> link.lk
   for i in $(LIBS); do echo "-l $$i" >> link.lk; done
   echo "libc/crt0.rel" >> link.lk
   echo "$<" >> link.lk
   echo "-e " >> link.lk
   $(LD) -f link.lk

%.bin: %.ihx
   hex2bin -s 0x0FF8 $<
   rm -f $(@:.bin=.sym)
   rm -f $(@:.bin=.noi)

all:   $(OBJS)
   .\pack.exe sh.bin bin/sh

clean:
   rm -f *.bin *.ihx *.rel *.asm *.lst *.sym *.noi *.map

dep:
   sed '/\#\#\# Dependencies/q' < Makefile > tmp_make
   for i in *.c;do $(CPP) -M $$i;done >> tmp_make
   cp tmp_make Makefile

### Dependencies: 
cat.rel: cat.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/fs.h libc/include/sys.h
echo.rel: echo.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h
ls.rel: ls.c libc/include/fs.h libc/include/stdio.h libc/include/stdarg.h \
 libc/include/string.h libc/include/stddef.h libc/include/sys.h
mkdir.rel: mkdir.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h
mknod.rel: mknod.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h
nop.rel: nop.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h
rm.rel: rm.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h
sh.rel: sh.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h libc/include/string.h libc/include/stddef.h
sync.rel: sync.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h
test.rel: test.c libc/include/stdio.h libc/include/stdarg.h \
 libc/include/sys.h

Kód: Vybrat vše

sdcc.exe -mz80 --nostdinc -Ilibc/include -c cat.c -o cat.rel
echo "-mjwx" > link.lk
echo "-i cat.ihx" >> link.lk
echo "-b _CODE = 0x1020" >> link.lk
for i in libc/libc.lib ; do echo "-l $i" >> link.lk; done
echo "libc/crt0.rel" >> link.lk
echo "cat.rel" >> link.lk
echo "-e " >> link.lk
sdldz80.exe -f link.lk
ASlink >> -f link.lk
ASlink >> -mjwx
ASlink >> -i cat.ihx
ASlink >> -b _CODE = 0x1020
ASlink >> -l libc/libc.lib
ASlink >> libc/crt0.rel
ASlink >> cat.rel
ASlink >> -e
hex2bin -s 0x0FF8 cat.ihx
hex2bin v1.0.1, Copyright (C) 1999 Jacques Pelletier
Lowest address = 00000FF8
Highest address = 000015E7
rm -f cat.sym
rm -f cat.noi
sdcc.exe -mz80 --nostdinc -Ilibc/include -c sh.c -o sh.rel
echo "-mjwx" > link.lk
echo "-i sh.ihx" >> link.lk
echo "-b _CODE = 0x1020" >> link.lk
for i in libc/libc.lib ; do echo "-l $i" >> link.lk; done
echo "libc/crt0.rel" >> link.lk
echo "sh.rel" >> link.lk
echo "-e " >> link.lk
sdldz80.exe -f link.lk
ASlink >> -f link.lk
ASlink >> -mjwx
ASlink >> -i sh.ihx
ASlink >> -b _CODE = 0x1020
ASlink >> -l libc/libc.lib
ASlink >> libc/crt0.rel
ASlink >> sh.rel
ASlink >> -e
hex2bin -s 0x0FF8 sh.ihx
hex2bin v1.0.1, Copyright (C) 1999 Jacques Pelletier
Lowest address = 00000FF8
Highest address = 00001CB3
rm -f sh.sym
rm -f sh.noi
.\pack.exe sh.bin bin/sh
Size of sh.bin is 3260.
Size of name bin/sh is 6.
rm cat.ihx sh.ihx

Napsal: 05 lis 2016, 19:13
od MetalGod
Že by tady?
Makefile píše:clean:
rm -f *.bin *.ihx *.rel *.asm *.lst *.sym *.noi *.map

Napsal: 05 lis 2016, 19:18
od lesana87
Ale target clean při překladu nevolám. Navíc ten by mi smazal úplně všechno kromě zdrojáků. Překlad je make nebo make all.

Napsal: 05 lis 2016, 19:31
od MetalGod
No jo, jsem zbrklej :oops:
A hlavně v makefile, když je použitej příkaz rm, tak vždycky s "vynucovací" volbou -f
Ale jak je vidět, tak u `rm cat.ihx sh.ihx` chybí.
Komplet zdroják je přísně tajnej? :)

Napsal: 05 lis 2016, 19:31
od lesana87
K čemu ti bude zdroják?

Napsal: 05 lis 2016, 19:39
od MetalGod
Spustím příkaz s rozkazem prohledat všechny soubory a prásknout ten, kde se vyhladávanej řetězec nachází.

Neboj, sestavovat to nebudu, stejně mám jen GCC a ne SDCC.

Napsal: 05 lis 2016, 19:42
od lesana87
Proč mám pocit, že tu kecáš úplně do všeho i když tomu vůbec nerozumíš? :?

Napsal: 05 lis 2016, 20:02
od rnbw

Napsal: 05 lis 2016, 20:11
od MetalGod
Hm, sorry, bolí mě zub :(
Když jsem patchoval linuxový jádro, jak jsem posléze zjistil, patchem s chybou, která při kompilaci způsobovala nepřípustnou změnu oprávnění jedný knihovny, že se stala nečitelnou, než, abych příčinu hledal manuálně, tak jsem na hledání použil GNU grep.

Napsal: 05 lis 2016, 20:22
od lesana87
rnbw píše:Ze by toto?

Ano, přesně to. Dík. :)
Jak jsi to prosím našel, ty už ses s tím setkal, že jsi věděl, co hledat?

Napsal: 05 lis 2016, 20:25
od rnbw
Nie, este som s tym problem nemal. Tak ma to zaujimalo a hladal som: makefile rm

Napsal: 05 lis 2016, 20:49
od lesana87
Taky jsem hledala, ale asi jsem se špatně ptala. :oops:
Make je mocný nástroj, se spoustou tajemných zákoutí a dlouhým manuálem. :)