複数のヘッダファイルに依存する複数のCソースコードをコンパイルしています。
ファイルの生成
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
次のエラーが発生します。
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
いくつかの方法を試しましたが、結果はありませんでした。
このエラーをどのように解決できますか?
includeオプションを使用して複数のソースファイルをコンパイルするのに問題がありますかarm-ulinucxeabi-gcc -o -c
?
たとえば、
arm-ulinucxeabi-gcc -c -o a a.c b.c c.c d.c
これを使用すると、上記のエラーが発生します。この問題を解決するように案内してください。
答え1
この makefile を使用して実行すると、デフォルトのターゲットはで、make
最初out
の前提条件はですcalc.o
。そのターゲットのビルドラインはエラーにあります。
起こっているように見えるのは、ビルドライン全体がまるで引用されているかのようにシェルによって実行されることです。しかし、これは真実ではなく、sh
正常には実行されません。
sh
しかし、おそらく互換性のあるものを使用していません。
SHELL=cpp2
これをオーバーライドすることは(すでに環境で定義されている)、そのエントリが使用されているcpp2
ことを意味し、明らかに正しく機能しません。