Compilando vários arquivos de origem com arm-ulinucxeabi-gcc incluindo a opção -o -c

0

Estou compilando várias fontes c que dependem de vários arquivos de cabeçalho.

Makefile

SHELL=cpp2             
SOAPC=/home/amarayya/doc/../linux-lpc-1.9.0/linux-cortexm-1.9.0/projects/solus_test/app/std2.c
LDFLAGS        := -mcpu=cortex-m3 -mthumb -L $(INSTALL_ROOT)/A2F/root/usr/lib
CFLAGS        := -Os -mcpu=cortex-m3 -mthumb -I$(INSTALL_ROOT)/A2F/root/usr/include
CC=$(CROSS_COMPILE_APPS)gcc
LIBS=
COFLAGS=-O2
CWFLAGS=-Wall
CIFLAGS=
CMFLAGS=

out: calc.o spC.o Client.o std2.o
    $(CC) $(LDFLAGS) $(CFLAGS) $(SHELL) -o out calc.o spC.o Client.o std2.o $(LIBS)

calc.o    : calc.c spH.h 
    $(CC) $(LDFLAGS) $(CFLAGS) -c calc.c spH.h $(LIBS)

spC.o    : spC.c soapH.h stdsoap2.h 
    $(CC) $(LDFLAGS) $(CFLAGS) -c spC.c stdsoap2.h $(LIBS)

Client.o    : Client.c 
    $(CC) $(LDFLAGS) $(CFLAGS) -c Client.c $(LIBS)

std2.o    : std2.c
    $(CC) $(LDFLAGS) $(CFLAGS) -c stdsoap2.c $(LIBS)

OBJS= calc.o spC.o Client.o std2.o

all: $(OBJS)
    $(CC) $(LDFLAGS) $(CFLAGS) $(SHELL) -o $@ $(OBJS) $(LDLIBS)


clean:
    -rm -f $(OBJS) *.gdb *.o

Estou recebendo um erro como este:

Critical error: Cannot open file "arm-uclinuxeabi-gcc -mcpu=cortex-m3 -mthumb -L/home/am./../../linux-lpc-1.9.0/linux-cortexm-1.9.0/A2F/root/usr/include -c calc.c spH.h " for reading

Eu tentei várias maneiras, mas nenhum resultado.

Como posso corrigir esse erro?

Existe algum problema com a compilação de vários arquivos de origem com arm-ulinucxeabi-gcc -o -c , incluindo opções?

Por exemplo:

arm-ulinucxeabi-gcc -c -o a a.c b.c c.c d.c

Quando eu usei assim, recebo o erro acima. Por favor me guie para resolver isso.

    
por amar 18.03.2013 / 14:09

1 resposta

1

Quando você executa make com esse makefile, o destino padrão é out e o primeiro pré-requisito é calc.o , que a linha de construção para esse destino é o que está em seu erro.

O que parece estar acontecendo é que toda a linha de construção está sendo executada pelo shell como se fosse citada - o que não é, e um% normalsh não fará isso.

Mas talvez você não esteja usando algo que se qualifique como sh compatible:

SHELL=cpp2

Redefinir isso (já está definido no ambiente) significa que cpp2 está sendo usado e, evidentemente, não se comporta adequadamente.

    
por 18.03.2013 / 15:28