1

次のコードツリーを試しました。ヘッダー ファイル hello.h を「inc」アーカイブに入れ、MM オプションを使用すると、システムは、makefile に vpath コマンドを追加しても hello.h が見つからないと報告しました。hello.h を hello.c の同じディレクトリに戻すと、gcc -MM は正常に動作し、依存ファイルが正常に一覧表示されます。

ヘッダーファイルを自動的に見つける場所をgccに知らせるにはどうすればよいですか? 以下はコードツリーで、「hello.h」はアーカイブ「inc」に配置されています。

    total 12
    -rw-r--r-- 1 root root  101 Jun 22 14:13 hello.c
    drwxr-xr-x 2 root root 4096 Jun 22 14:14 inc
    -rw-r--r-- 1 root root  139 Jun 22 14:18 makefile

以下は私のメイクファイルの内容です:

vpath %.h /home/tempcode/inc

hello: hello.o
    gcc -o hello hello.o

hello.o: hello.c hello.h
    gcc -c hello.c

debug:
    gcc -MM hello.c

このようにgccを直接実行するとうまくいくことに戸惑います。これは、VPATH または vpath が gcc がインクルード パスを見つけるのに役立たないということですか? もしそうなら、vpath 変数は「make」がヘッダー ファイルを見つけるのに役立つだけで、gcc には役立たないと思いますか?

    [root@localhost tempcode]# gcc -MM -I/home/tempcode/inc hello.c
    hello.o: hello.c /home/tempcode/inc/hello.h
4

1 に答える 1

1

これは、VPATH または vpath が gcc がインクルード パスを見つけるのに役立たないということですか? もしそうなら、vpath 変数は「make」がヘッダー ファイルを見つけるのに役立つだけで、gcc には役立たないと思いますか?

それは正しいです。必要に応じて変数を設定する必要がありCFLAGSます。CFLAGSC ファイルのコンパイル時にMake が自動的にインクルードします。(CXXFLAGSC++の場合。)あなたの場合、make.dファイルに追加する必要があります。私は通常、次のようなことをします:

INCLUDES = -I/home/tempcode/inc
CFLAGS += $(INCLUDES)
CXXFLAGS += $(INCLUDES)

debug:
    gcc -MM $(CFLAGS) hello.c
于 2012-06-22T16:01:55.253 に答える