3

新しいソース (processHandling.c) を追加した後にプロジェクトをコンパイルしようとしていますが、'make' すると結果としてこれが得られます。

gcc -gstabs -W -Wall -std=gnu99 -c main.c
gcc -gstabs -W -Wall -std=gnu99 -c inputHandling.c
gcc -gstabs -W -Wall -std=gnu99 -c syscallsWrapper.c
gcc -gstabs -W -Wall -std=gnu99 -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o 
gcc: error: processHandling.o: No such file or directory
make: *** [myShell] Error 1

これはメイクファイルです

CC = gcc
CFLAGS = -gstabs -W -Wall -std=gnu99

myShell: main.o inputHandling.o syscallsWrapper.o
        $(CC) $(CFLAGS) -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o 


main.o: main.c
        $(CC) $(CFLAGS) -c main.c

inputHandling.o: inputHandling.c
        $(CC) $(CFLAGS) -c inputHandling.c

processHandling.o: processHandling.c
        $(CC) $(CFLAGS) -c processHandling.c

syscallsWrapper.o: syscallsWrapper.c
        $(CC) $(CFLAGS) -c syscallsWrapper.c

clean:

        -rm myShell *.o

フラグを付けて make を実行してみましたが-d、何らかの理由で make が compile のルールを完全に無視しているようprocessHandling.oです。問題は何でしょうか?

また、processHandling を手動でコンパイルすると、gcc -cすべて正常に動作することにも注意してください。

4

3 に答える 3

3

myShell ターゲットの依存関係リストに processHandling.o を追加します。

myShell: main.o inputHandling.o processHandling.o syscallsWrapper.o
        $(CC) $(CFLAGS) -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o 

ところで、自動変数を使用すると、ファイル名の繰り返しを減らすことができます。例えば:

myShell: main.o inputHandling.o processHandling.o syscallsWrapper.o
        $(CC) $(CFLAGS) -o $@ $^
于 2012-12-20T00:50:40.247 に答える
2

myShell の前提条件として「processHandling.o」を追加する必要があります。そうしないと、myShell を作成するときに、その processHandling.o は myShell には必要ないと makefile が判断するため、processHandling.o のルールは適用されません。このように簡単に追加できます

myShell: main.o inputHandling.o syscallsWrapper.o processHandling.o
        $(CC) $(CFLAGS) -o myShell main.o inputHandling.o processHandling.o syscallsWrapper.o 
于 2012-12-20T00:52:24.780 に答える
0

本当にファイルがあるかどうかを確認してくださいprocessHandling.c。このエラーは、ソース ファイルが見つからなかったことを意味します。

于 2012-12-20T00:50:50.660 に答える