sdcc多文件的编译

还是前面的main.c,分割成两个源文件,main.c如下:
#include <at89x52.h>

#include "delay.h"

#define led1 P2_0

void main(void)
{
        while (1) {
                led1 = 0;
                delayms(1000);
                led1 = 1;
                delayms(1000);
        }
}
delay.c和delay.h分别如下:
void delayms(unsigned int ms)
{
        unsigned int x, y;

        for (y = ms; y > 0; y--) {
                for (x = 227; x > 0; x--);
        }
}

#ifndef __DELAY_H
#define __DELAY_H

extern void delayms(unsigned int ms);

#endif /* __DELAY_H */
编译时可以使用以下的命令:

$ sdcc -c main.c
$ sdcc -c delay.c
$ sdcc main.rel delay.rel
需要注意的是,在sdcc中,编译的目标文件后缀名为.rel,而不是Linux下常见的.o。sdcc -c为编译步骤生成目标文件,最终链接成所需要的.ihx文件main.ihx,Makefile如下:
CC      = sdcc

all:led.bin

#led.bin:led.hex
#       objcopy -I ihex -O binary led.hex led.bin

#led.hex:main.ihx
#       packihx main.ihx > led.hex

led.bin:main.ihx
        makebin main.ihx led.bin

main.ihx:main.rel delay.rel
        $(CC) main.rel delay.rel

main.rel:main.c delay.h
        $(CC) -c main.c

delay.rel:delay.c
        $(CC) -c delay.c

.PHONY:clean
clean:
        -rm led.bin main.asm main.ihx main.lk main.lst\
                main.map main.mem main.rel main.rst main.sym
        -rm delay.asm delay.lst delay.rel delay.rst delay.sym

你可能感兴趣的:(sdcc多文件的编译)