2016-12-01 10 views
0

私はAutomakeを使用しています。Automake:Makefileがビルドディレクトリではなくソースディレクトリからファイルを選んでいるのはなぜですか?

私はこのようなdist_man1_MANSに記載されているいくつかのソースファイルがあります。今

dist_man1_MANS = some-file.1 some-other-file.1 

を、Automakeは+ configureは最終的にMakefileでこれを生成します。

dist_man1_MANS = some-file.1 some-other-file.1 

# ... 

install-man1: $(dist_man1_MANS) 
    # generated recipe here 

私は.1ファイルを前置いないよので、 $(srcdir)では、ビルドディレクトリ(現在の作業ディレクトリ)からmakeを実行しているので、ビルドディレクトリでそれらを見つけるはずです。

だから、私は/tmp/buildに、例えば、外の木ビルドをやってる:

/path/to/src/configure --prefix=$(pwd)/install 
make 
make install 
をし、ビルドが成功し、つまり、 makeはmanページを検索し、それらをインストールします。しかし、それらはビルドディレクトリにありません。私は、生成されたMakefileにこれを追加します。

install-man1: $(dist_man1_MANS) 
    @echo ">>> $(^)" 
    @echo "::: $(dist_man1_MANS)" 
    # generated recipe here 

、私は$^the names of all the prerequisites, with spaces between themを意味するので、両方のecho sが、同じことを印刷することを前提としています。驚いたことに、出力は次のようになります。

>>> /path/to/src/some-file.1 /path/to/src/some-other-file.1 
::: some-file.1 some-other-file.1 

ので:

  1. がどのようにmakeが正確/path/to/src/プレフィックスを見つけましたか?この非常に文脈のどこから来るのですか?
  2. なぜ$^$(dist_man1_MANS)が異なるのですか?

答えて

1

回答が見つかりました。

Automakeはのようなものに、その生成したMakefilemakeのための特別な変数にVPATH変数を設定します。

4.5.1 VPATH:検索パス前のリンクから

VPATH = /path/to/src 

すべての前提条件のために

の値変数VPATHは検索するディレクトリのリストを指定します。ほとんどの場合、ディレクトリーには、現行ディレクトリーにない前提条件ファイルが含まれていることが予想されます。ただし、makeは、ルールの前提条件と対象の両方の検索リストとしてVPATHを使用します。

だから、まず現在の作業ディレクトリ内some-file.1some-other-file.1の前提条件についてmake検索は、その後、/path/to/src/some-file.1/path/to/src/some-other-file.1のためには、最初のものを見つけることができない場合。この場合、$^$(dist_man1_MANS)と異なる理由を理解しています。$^は、の有効な(解決済み)の一覧です。

関連する問題