この質問 に直接関連しています。 makefileのinclude
ディレクティブを現在のスクリプトの場所に対して相対的に動作させるにはどうすればよいですか?
currentパスは任意であり、制御できないと仮定します。 makefileの場所のみがわかっています。 makefileはルートファイルではなく、含まれています。それがまさにそれがAndroid NDKにある方法です。
現在のメイクファイルの名前を持つ組み込み変数はありますか?パスだけを残して、ファイル名を削除できますか? Cygwinでmake3.81を使用します。
現在処理されているメイクファイルの名前は、 MAKEFILE_LIST
組み込み変数 から取得できます。
現在のmakefileが含まれている最後のmakefileであるとすると(つまり、現在のスクリプトの開始以降、別のinclude
ディレクティブを使用していません) )、スクリプト自体へのパスは次のようになります。
SELF_DIR := $(dir $(lastword $(MAKEFILE_LIST)))
これで、同じディレクトリにスクリプトを含めることができます(スラッシュがないことに注意してください。すでに$(dir ...)
によって追加されています)。
include $(SELF_DIR)another.mk
注:GNU Make 3.80にはlastword
組み込み関数はありませんでした。その場合、$(lastword ...)
を$(call lastword,...)
に置き換えて次のように実装できます。
lastword = $(if $(firstword $1),$(Word $(words $1),$1))
現在のメイクファイルの名前を持つ組み込み変数はありますか?
はい、あります。$ {CURDIR}を使用してください。これはトップレベルのMakefileが配置されているディレクトリであるため、そこから何も削除する必要はありません。
相対パスが機能することがわかりました(GNUMake 3.81)が、機能しない場合は、次のことを試してください。
include $(abspath ../whatever)