2017-03-25 74 views
0

私は、現在のディレクトリにあるいくつかの.cファイルと.hファイルに対して非常に簡単なメイクファイルを作ろうとしています。私はmakefileを完全に理解していないことを認めます。メイクファイル致命的なエラー:そのようなファイルやディレクトリはありませんが、ファイルは現在のディレクトリにあります

prog3 : prog3.c prog3.h lib.o 
    gcc -c prog3.c 

lib.o : lib.c lib.h 
    gcc -c lib.c 

私はコマンドmakeを使用する場合、私はこのメッセージを得る:ここで私がこれまで持っているものだ

prog3.c:5:17: fatal error: lib.c: No such file or directory 
compilation terminated. 
makefile:2: recipe for target 'prog3' failed 
make: *** [prog3] Error 1 

lib.cが、しかし、他のすべてと同じディレクトリにあるファイル(prog3.cを、 prog3.h,lib.h)。

私はこの特定のエラーに関する多くの質問を見つけましたが、それらはどれもPWDにあるファイルに関するものではありません。私は間違って何をしていますか?

+0

端末でコマンドを順番に実行してみてください。 'gcc -c lib.c'を最初に、次に' gcc -c prog3.c'を実行します。それは問題に光を当てていますか? – StoryTeller

答えて

0

あなたのメイクファイルは正常です。メイクファイルの基本的な構造は、このパターンが含まれています

<build object> : <list of dependencies> 
     command to execute to build the object if dependencies have changed 
      ... 
     command to execute to build the object if dependencies have changed 

あなたのメイクファイルは、行うことになっているものであるprog3.cを、コンパイルしようとしています。あなたはprog3.cでコンパイルエラーを持っていて、「lib.c」をインクルード(#include)しようとしているように見えますが、私の推測では、あなたがライン15上でこれをやっているということです。これがあれば

#include <lib.c> 

何やっている、これは間違っている。 Cの実装ファイルには他の.cファイルを含めてはいけません(まれな例外があります)。 .hヘッダーファイルのみをインクルードする必要があります。リンカーは、lib.hに対するコンパイルに基づいてlib.cから必要な機能を取り込みます。

また、大括弧(<)を含むインクルードファイルは、システムヘッダ用です。ユーザ定義のヘッダファイルには、引用符を使用して含めるべきである:

#include "lib.h" 

これはあなたのコンパイルエラーが解決しない場合は、あなたがそれらをチェックしたい場合prog3.cとlib.cファイルを提供するために、あなたの質問を編集します。

+1

問題はlib.hの引用です。私は括弧を持っていた。新人の間違い...ありがとう! –

関連する問題