2016-10-30 12 views
-1

私のmakefileが正しく実行されない理由を理解できないようです。私は、次のエラーを取得しています:Makefile C Linuxエラー

gcc hr_timer.c -o hr 
gcc hr_timer.o -o hr_timer 
gcc: error: hr_timer.o: No such file or directory 
gcc: fatal error: no input files 
compilation terminated. 
make: *** [hr_timer] Error 4 

は、ここに私のメイクです:enter image description here

すべての.cファイルがなくてうまくコンパイル:

CC = gcc 
CFLAGS = -pthread 

all: hr_timer q2q3 process_switching thread_switching 

hr_timer.o: hr_timer.c 
    $(CC) hr_timer.c -o hr 

q2q3.o: q2q3.c 
    $(CC) q2q3.c -o qq 

process_switching.o: process_switching.c 
    $(CC) process_switching.c -o pr 

thread_switching.o: thread_switching.c 
    $(CC) thread_switching.c -o th 

、ここではそれが中だというディレクトリがありますメークファイル。ありがとう!

EDIT:

新しいメイクファイル:

CC = gcc 
CFLAGS = -pthread 

all: hr_timer q2q3 process_switching thread_switching 

hr_timer.o: hr_timer.c 
    $(CC) hr_timer.c -o hr hr_timer.o 

q2q3.o: q2q3.c 
    $(CC) q2q3.c -o qq q2q3.o 

process_switching.o: process_switching.c 
    $(CC) process_switching.c -o pr process_switching.o 

thread_switching.o: thread_switching.c 
    $(CC) $(CFLAGS) thread_switching.c -o th thread_switching.o 

ERROR:

gcc hr_timer.c -o hr hr_timer.o 
gcc: error: hr_timer.o: No such file or directory 
make: *** [hr_timer.o] Error 1 

EDIT2(FIX):

CC = gcc 
CFLAGS = -pthread 

all: hr qq pr th 

hr: hr_timer.c 
    $(CC) hr_timer.c -o hr 

qq: q2q3.c 
    $(CC) q2q3.c -o qq 

pr: process_switching.c 
    $(CC) process_switching.c -o pr 

th: thread_switching.c 
    $(CC) $(CFLAGS) thread_switching.c -o th 

答えて

1

あなたがここに持っている主な問題がありますあなたはあなたが言っている目標を作っていないよあなたは〜です!ルール

hr_timer.o: hr_timer.c 
    $(CC) hr_timer.c -o hr 

は、hrという名前のオブジェクトファイルを作成します(つまり、-o hrが何をするかです)。代わりに、これは次のようにする必要があります。

hr_timer.o: hr_timer.c 
    $(CC) hr_timer.c -o hr_timer.o 

このファイルの残りのターゲットについても同様です。つまり、Makefileにはターゲットと依存関係があります。

target: dependency1 dependency2 dependency3 ... 
    command that makes target from the dependencies 

各ルールは、すべての依存関係が存在する場合は、ターゲットを作ることができることを確認した後、次のコマンドを実行して伝えます:彼らは、次の構文に従ってください。これにより、makeは最初に依存関係を作ることによって最終的な実行可能ファイルを試してみることができます。もしそれらの依存関係が依存関係を持っていれば、それもそれらを作るでしょう。しかし、ルールを実行した後、コロンの左側にリストされたターゲットが作成されなかった場合、後で参照されるときに問題が発生する場合、ファイルは存在しません!

また、変数CFLAGS-pthreadと定義されていることに注意してください。あなたはおそらくそれを次のような各規則であなたのコンパイラに渡したいと思うでしょう:

hr_timer.o: hr_timer.c 
    $(CC) hr_timer.c $(CFLAGS) -o hr_timer.o 
+0

お返事ありがとう。私はあなたが言及した変更を加えましたが、私はまだエラーが発生しています。編集内容を確認してください。 – user5056973

+0

これは '-o hr hr_timer.o'ではありません。 '-o hr_timer.o'とすると、出力はhr_timer.oファイルになければなりません。途中で時間の必要はありません。慎重にお読みください –

+1

ありがとうございます。それは今働く。 – user5056973