2013-02-14 8 views
7

メインフォルダにメインメイクファイルを1つ、次にテストとsrcフォルダに別のメイクファイルを入れるディレクトリ構造があります。メイクファイル間の変数の共有

私のメインのメイクファイルには、個別のフォルダmakefileを呼び出すtest/allの両方のディレクティブがあります。私はメインのmakefileに変数を宣言し、それらの他のフォルダにアクセスできるようにしています。私のメインのMakefileの例えば

PACKAGES = jansson mysql .... 

all: 
    do something here 

test: 

    cd test 
    make test 

そして私のテスト/ Makefileの中で私は、変数、以前のパッケージにアクセスし、その上にこのメイクファイルの個々の依存関係を追加できるようにしたいです。テスト/ Makefileで

PACKAGES += googletest googlemock 

test 
    do something here 

誰も私がこの問題を解決するのに役立つだろうか?

おかげ

答えて

8

あなたは別のファイルを作成することができ、スタン詳しくは

+1

はい、これは私が当初考えていたものですが、それが良いのかどうかは分かりませんでした。すべてがうまくいった、ありがとう – JonMorehouse

6

あなたは、コマンドライン上で変数を渡すことができます。

test: 
    make -C test PACKAGES="$(PACKAGES)" 

注意を、それが周りにかかわらず、他の道を行くことはできないということ。 test/Makefileが変数を変更した場合、これらの変更は呼び出し元のmakefileに戻ることはできません。


あなたがメインのmakefileにPACKAGES変数に追加したい場合は、代わりにサブmakefileを含めるようにビルドシステムをリファクタリングする必要があります。したがって、メインのmakefileは全てを設定し、その後、(makeのほとんどの実装で利用可能なincludeディレクティブを使用して)ローカルの特定のターゲットを追加するサブメイクファイルと、変数の変更/追加を行います。

例えば、test_footest_barという2つのテストディレクトリがある場合、テストターゲットを含む変数を持つことができます。TEST_TARGETSと呼ぶことができます。 test_*フォルダー内の各メークファイルは、ローカル変数と一意のターゲットをグローバル変数に追加し、メインのメイクファイルでそれらを実行することができます。

このような何か:

メインのmakefile:

# Start empty 
TEST_TARGETS = 

include test_foo/Makefile 
include test_bar/Makefile 

test: 
    for target in "$(TEST_TARGETS)"; do \ 
     $(MAKE) $(target); \ 
    done 

test_foo/Makefileの:

TEST_TARGETS += test_foo 

test_foo: 
    # Do some foo testing 

test_bar/Makefileの:

TEST_TARGETS += test_bar 

test_bar: 
    # Do some bar testing 
+0

ためinclude manualでCEそれらの共有変数が定義されているMakefile.variable

include $(PATHTOSHAREDMAKEFILE)/Makefile.variable 

を使用してファイルを含めるルック私は最後のアプローチで見る問題は$(MAKE)$(ターゲット)が呼び出されるということです最上位のMakefileディレクトリにパスがあります。私はパスが適切に動作するためには、目的のターゲットが含まれているMakefileを持つフォルダ内にある必要があると思います。 –

関連する問題