2016-12-09 1 views
0

C Makefileに問題があります。Cメイクファイルのコンパイルエラー - 「リンクが行われていないためリンカの入力ファイルが使用されていません」

これはbashでMakefileのためのコードです:私は、ファイルを作成するとき

CC=gcc 
CFLAGS=-g -Wall 
CCLINK=$(CC) 
OBJS=flight.o runway.o airport.o main.o 
RM=rm -f 

# Creating the executable (airport) 
airport: $(OBJS) 
    $(CCLINK) -o airport $(OBJS) 

# Creating object files using default rules 
main.o: main.c airport.h ex2.h flight.h runway.h 
airport.o: airport.c airport.h ex2.h flight.h runway.h 
runway.o: runway.c runway.h ex2.h flight.h 
flight.o: flight.c flight.h ex2.h 

# Cleaning old files before new make 
clean: 
    $(RM) airport *.o *.bak *~ "#"* core 

、それはと言う:その後

make: `airport` is up to date. 

- 私はbashで "空港" を呼び出すことができますし、それは私が望むようにいくつかの入力を入力することができます。私は「空港」がでコンパイルされているかどうかを確認しようとしているとき

ブト:

gcc: airport: linker input file unused because linking not done 

は誰かが問題になる可能性があるものを知っています:

gcc -g -Wall -c airport 

私はエラーを取得するには、と言っています?

ありがとうございます! ガブリエル。

+2

「空港」が以下のようにコンパイルされているかどうかを確認しようとしているときに、*あなたは何を意味しますか? – 2501

+2

Hum、実行ファイルをコンパイルしようとしています... – Garf365

+0

はい、 'gcc -g -Wall -c airport.c'を** .c **と試してください。また、' gcc'コマンドを発行しているとき、メイクファイルは使用されません。だから、この質問は実際にはmakeについてではないかもしれません。しかし、私たちはいつかこのことを学び始めました。 * make */* gcc */* ld *には違いがあります。プログラミングに幸運を祈る! :) –

答えて

1

Makefileの目的は、ソースが変更されていないファイルを再コンパイルしないようにすることです。それが起こると、makeはファイルが最新であると言います。

警告を再度確認したい場合は、これは迷惑でしょう。その後、単にMakefileのもう一つの目的は、エラーを起こしやすい、自分でgccコマンドを入力しないようにすることです

make clean ; make 

を入力して、すべてを再コンパイルするmakeを呼び出します。たとえば、あなたの質問の終わりに、実行ファイル(オプション-c)からオブジェクトファイルを作ることを頼んでいますが、それは間違っています。オブジェクトファイルを作るための良い方法はmakeを呼び出すことです:、

make airport.o 

を最後に、実行可能ファイルを生成することができますどちらかのタイプairport:が最初のターゲットであるため

make airport 

または、タイプ

make 
関連する問題