2017-01-18 11 views
0

私はこのような何かに見えるメイクファイルがあります:GNU Makeの検索パスにどのようにディレクトリを追加できますか?

include anotherFile.mk 

all: 
    someStuff 

ファイルanotherFile.mkは、このようなものです:

include yetAnotherFile.mk 
export SOME_VAR = 93 

問題がanotherFile.mkyetAnotherFile.mkは私のMakefileから別のディレクトリにあることです。だから私のメイクはちょうどこれに変更することはできません。

include $(OTHER_PROJECT_PATH)/anotherFile.mk 

all: 
    someStuff 

このアプローチの問題は、それが現在のディレクトリで検索されますので、anotherFile.mkのincludeステートメントが失敗するということです。

私が見つけた部分的な解決策は、makeの呼び出しに--include-dir=$OTHER_PROJECT_PATHフラグを渡すことですが、それは少しユーザーに不愉快です。

私の質問には、includeを実行したときに検索を行うディレクトリに追加するメイクファイルの中に何かがありますか?何かのようにMAKE_INCLUDE_DIRS += $(OTHER_PROJECT_PATH)

答えて

1

驚くことに、その質問には良い答えはないようです。強制的に.INCLUDE_DIRが役に立たず、make--include-dir=$OTHER_PROJECT_PATHと呼び出す方法がないようです。

しかしながら、適切な再帰的なmake呼び出しをmakefileの中に置くことは可能ですが、すべての合理的なケースで正しく動作するようにするには、それはすぐに値するほど複雑になります。要約すると、それは必要です:

  • をトップレベルの条件OTHER_PROJECT_PATH.INCLUDE_DIR
  • で複数のコマンドの目標
  • がある場合は、再帰的に
  • おそらく追加のターゲットを作る起動するレシピを用いて適切なターゲットであるかどうかをチェックします実際のmakeファイルは、elseに含まれています。

メークファイルは次のようになります。

OTHER_PROJECT_PATH := other 
ifeq (,$(filter $(OTHER_PROJECT_PATH), $(.INCLUDE_DIRS))) 
# this is the mechanism to add the include dir in a recursive make 
$(or $(firstword $(MAKECMDGOALS)),all): 
    $(MAKE) -I$(OTHER_PROJECT_PATH) $(MAKECMDGOALS) 
# add empty targets for additional goals if needed 
ifneq (,$(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))) 
$(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)): 
endif 
else 
# this is where the real makefile starts 
all more: 
    echo [email protected]: $< $^ 
include a.mak 
endif 
関連する問題