GNU makefileにはマクロ(変数)が必要です。これは、いくつかの最上位ディレクトリで指定されたマスクによってファイル/ディレクトリを検索します。たとえば、現在の作業ディレクトリは/ home/sysop/powerup/native/apps/tooplです。/home/sysop/powerup/native/SDK/buildディレクトリにも存在します。私はSDK /ディレクトリの現在の場所に相対的な場所を見つけるしたい。だから、私は、そのための再帰的なマクロを書いた:GNU makefileで変数を展開する際の再帰の深さを制限する方法は?
upfind = $(if $(wildcard $(1)),$(1),$(if $(filter $(abspath $(1)),$(abspath ../$(1))),$(error "can't find $(1)"),$(call upfind,../$(1))))
をそして私は今の方法を以下にそれを使用することができます。
relpath = $(call upfind, ../SDK/build)
そして、これは値を割り当て「../../SDK/build」RELPATHへ変数。
すべて罰金ですが、私はそのようなマクロを複数のメイクファイルに伝播する必要がありますので、私はそれを最小限に抑える方法を見ています(マクロをアップフェインド)。私は、誰も私はこのマクロをよりコンパクトに書き直す方法を提案してくれることを願っています。たとえば、あるレベルで再帰を制限するだけで十分です。$(abspath)マクロを使用する必要はありません。しかし、どのようにして再帰レベルや測定引数($(1))の長さを決定できますか?