2012-10-02 20 views
6

makefileのあるレベルから次のレベルへ変数を渡すための助けを探しています。私はさまざまなターゲットアーキテクチャ上で動作するようにビルドする必要があるソースツリーを持っています。より高いレベルのmakefileをきれいに保つために、私はアーキテクチャー固有の情報を含む別々のmakefileを作成し、インクルードディレクティブを使用して必要なもののみを組み込みました:includeディレクティブからサブメイクへの変数の受け渡し

後でメイクファイルを作成してソースファイルをビルドします。ビルドが失敗し、アーキテクチャー固有の変数が渡されなかったことが原因で障害が発生していることがわかります。

ifeq ($(ARCH), my_arch)  | 
include build/my_archdefs.mk | section 1 
endif       | 

<more commands> 
debug: 
     $(MAKE) -C src debug 

コードツリーを構築するためのmakefileは、srcディレクトリにあります。 stop gap measureとして、私は下のレベルのmakefileに上で参照されているセクション1を含んでいました。このケースでは、変数ARCHが渡されていないことに気付きました。

ここには関連性があると思われるリンクがいくつかありますが、私はこの作業を行うために何が必要なのか理解できません。 http://www.gnu.org/software/make/manual/html_node/Options_002fRecursion.html#Options_002fRecursion http://www.gnu.org/software/make/manual/html_node/Include.html

私が必要とする情報は、私は上記の参照リンクに潜んでいるが、私はちょうどそれを見ていないよと私には思えます。どんなポインタも非常に高く評価されます。

ありがとうございました。

答えて

6

このリンクは役立つはずです:あなたのトップレベルのMakefileでhttp://www.gnu.org/software/make/manual/html_node/Variables_002fRecursion.html#Variables_002fRecursion

をちょうどラインexportを追加し、変数のすべてがあなたのsubmakesにエクスポートされます。

例:

ファイルMakefile

ID=asdf 
export 
all: 
    @echo ${ID} 
    @make -f Makefile2 

ファイルMakefile2

all: 
    @echo ${ID} 

出力:あなたの参照のため

$ make 
asdf 
make[1]: Entering directory `/home/user/Desktop/a' 
asdf 
make[1]: Leaving directory `/home/user/Desktop/a' 
+1

リンクありがとうございます。それが私の必要なものです。後でこれを参照する他の人に関連するかもしれないページ上の1行を指摘したいだけです。デフォルトで変数をエクスポートするためにエクスポートを単独で使用する場合、名前に英数字やアンダースコア以外の文字が含まれている変数は、エクスポートディレクティブで特に記述されていない限りエクスポートされません。 – dinesh

2

例:

以下は最上位にある "Makefile"です。

のMakefile

そして
export ROOT_DIR=${PWD} 

all:   
     $(MAKE) -C test 

、 "テスト" フォルダ内の別の "メークファイル" は以下のように、(現在の位置に関して)がある:

のMakefile

all:  
     echo $(ROOT_DIR) 

"make all"をトップレベルのフォルダで言うと、それはその後現在の場所 - Makefileに従ってビルドされ、その後 "test"フォルダの場所で上記の規則に従って(Makefileを "test"ビルドルールの場所)。したがって、親Makefileがいくつかの変数をエクスポートすると、そのビルド環境では、エクスポートされた変数がすべてのサブディレクトリMakefileに表示されます。

しかし、明示的に "test"フォルダに入って "すべてを作成"しようとすると、環境変数を前に明示的に設定する必要があります(前のケースでは、レベルのMakefile)。

More Info

関連する問題