1

このようなフォルダ構造があります。

GIF_ユーティリティ

-> Makefile

-> 含める (すべての .h ファイルはここにあります)

-> Src (すべての .c ファイルはここにあります)。

私はメイクファイルを書いています。

Makefile

VPATH = src:include
INC = -I  ./include

gif_objects = gif_display.o \
           gif_lzw.o \
           gif_read.o \
           sysm.o \
           x86_main.o


gif_display.0 : gif_display.c  
    gcc -I /export/home/joshis1/MakeTutorial/GIF_Utility/include -c $<

#gif_lzw.0 : gif_lzw.c
#   gcc $(INC) -c src/gif_lzw.c

#gif_read.0 : gif_read.c 
#   gcc -I ./include/ -c $< 

#sysm_main.0 : sysm_main.c 
#   gcc -I ./include/ -c $< 

#x86_main.0 : x86_main.c 
#   gcc -I ./include/ -c $< 


On command prompt:
$ make gif_display.o

cc    -c -o gif_display.o src/gif_display.c
src/gif_display.c:2:17: fatal error: sysm.h: No such file or directory
compilation terminated.
make: *** [gif_display.o] Error 1

一方、私がこれを好きなら、それはうまくコンパイルされます $make -> これは gif_display.o を作成します

ルールを指定するとエラーになる理由がわかりません。何か不足していますか、助けてください。

Ubuntu マシンを使用してコードをビルドしています。

4

1 に答える 1

2

メイクファイル.0には、正しい.o(文字 oh) の代わりに (ゼロ) 接尾辞が付いています。

実行するmakeと、Makefile の最初のターゲットをビルドしようとするため、正しい-Iインクルード パスを含むレシピが実行されます。.oファイルではなくファイルを生成するという事実は.0、 に受け入れられますがmake、このシナリオでは少なくとも警告を出力できると思います。

実行すると、インクルード パスを含まないmake gif_display.oMake のビルトイン プロダクション ファイルが使用されます。.o

にはmake既に.oファイルの組み込みルールがあるため、ルールは基本的に不要です。-I include次のようなパラメータをデフォルトのルールに追加するだけの方がよいでしょう。

CFLAGS += -I include

したがって、Makefile 全体は次のように単純になります。

VPATH = src:include
CFLAGS += -I  ./include

gif_objects = gif_display.o \
           gif_lzw.o \
           gif_read.o \
           sysm.o \
           x86_main.o

Makefile にファイルの変更を警告するものは何も表示されない.hため、別の依存関係を追加することをお勧めします。すべてのオブジェクト ファイル間でいくつかの共有ヘッダー ファイルしかない場合は、おそらくこれだけで十分です。

$(gif_objects): $(wildcard include/*.h)

これにより、基本的に余分なincludeコンポーネントが作成されます。VPATH

于 2013-08-25T10:58:38.887 に答える