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

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

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

#1 Příspěvek 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
Uživatelský avatar
MetalGod
Příspěvky: 6560
Registrován: 30 kvě 2006, 00:00
Bydliště: Seč

#2 Příspěvek od MetalGod »

Že by tady?
Makefile píše:clean:
rm -f *.bin *.ihx *.rel *.asm *.lst *.sym *.noi *.map
Kdo není ve dvaceti levičák, nemá srdce,
kdo je levičák ve čtyřiceti, nemá rozum.
— Winston Churchill
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#3 Příspěvek 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.
Uživatelský avatar
MetalGod
Příspěvky: 6560
Registrován: 30 kvě 2006, 00:00
Bydliště: Seč

#4 Příspěvek 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? :)
Kdo není ve dvaceti levičák, nemá srdce,
kdo je levičák ve čtyřiceti, nemá rozum.
— Winston Churchill
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#5 Příspěvek od lesana87 »

K čemu ti bude zdroják?
Uživatelský avatar
MetalGod
Příspěvky: 6560
Registrován: 30 kvě 2006, 00:00
Bydliště: Seč

#6 Příspěvek 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.
Kdo není ve dvaceti levičák, nemá srdce,
kdo je levičák ve čtyřiceti, nemá rozum.
— Winston Churchill
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#7 Příspěvek od lesana87 »

Proč mám pocit, že tu kecáš úplně do všeho i když tomu vůbec nerozumíš? :?
Uživatelský avatar
rnbw
Příspěvky: 37417
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#8 Příspěvek od rnbw »

Uživatelský avatar
MetalGod
Příspěvky: 6560
Registrován: 30 kvě 2006, 00:00
Bydliště: Seč

#9 Příspěvek 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.
Kdo není ve dvaceti levičák, nemá srdce,
kdo je levičák ve čtyřiceti, nemá rozum.
— Winston Churchill
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#10 Příspěvek 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?
Uživatelský avatar
rnbw
Příspěvky: 37417
Registrován: 21 bře 2006, 00:00
Bydliště: Bratislava

#11 Příspěvek od rnbw »

Nie, este som s tym problem nemal. Tak ma to zaujimalo a hladal som: makefile rm
Uživatelský avatar
lesana87
Příspěvky: 4397
Registrován: 20 zář 2014, 00:00

#12 Příspěvek 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. :)
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“