2

私はmakefileを書く初心者です。次のようなメイクファイルがあります。

PATH1 = /ref

CC=gcc
LINK = gcc

INCLUDES = .
INCLUDES += -I/PATH1/inc \
        -I/$(PATH1)/abc/inc/ \
        -I/$(PATH1)/def/inc/ 


all: src_file

run: src_file

src_file: 
    $(CC) $(INCLUDES) -MM  /ref/abcd.c -o $@ 

clean:
    rm -f *.o src_file

make を実行すると、次のエラーが発生します。

linker input file unused because linking not done.

スタックオーバーフローで同様の投稿をいくつか読みましたが、解決策が得られませんでした。私のmakefileの何が問題なのか誰か教えてください。前もって感謝します。

4

1 に答える 1

3

犯人はプリプロセッサオプション-MMです。gcc プリプロセッサ オプションから、

-M

前処理の結果を出力する代わりに、メインのソース ファイルの依存関係を記述した make に適したルールを出力します。プリプロセッサは、そのソース ファイルのオブジェクト ファイル名、コロン、および -include または -imacros コマンド ライン オプションからのファイルを含むすべてのインクルード ファイルの名前を含む 1 つの make 規則を出力します。

-M をドライバーに渡すと -E が暗黙的に指定され、暗黙的な -w で警告が抑制されます。

-んん

-M と同様ですが、システム ヘッダー ディレクトリにあるヘッダー ファイルや、そのようなヘッダーから直接的または間接的にインクルードされるヘッダー ファイルについては言及しません。

したがって、事実上、前処理を行っているだけなので、コンパイルもリンクも行われず、結果としてエラーが発生します。

于 2012-05-07T18:11:12.550 に答える