14

メイン フォルダーに 1 つのメイン メイクファイルが必要なディレクトリ構造があり、次にテスト フォルダーと src フォルダーの両方に別のメイクファイルが必要です。

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

たとえば、私のメインの Makefile では

PACKAGES = jansson mysql ....

all:
    do something here

test:

    cd test
    make test

そして、テスト/メイクファイルで、前の PACKAGES 変数にアクセスし、このメイクファイルの個々の依存関係をそれに追加できるようにしたいと考えています。

テスト/メイクファイル内

PACKAGES += googletest googlemock

test
     do something here

誰かがこの問題を解決するのを手伝ってくれますか?

4

3 に答える 3

16

たとえばMakefile.variable、これらの共有変数が定義されている別のファイルを作成し、次を使用してファイルを含めることができます

include $(PATHTOSHAREDMAKEFILE)/Makefile.variable

詳細については、インクルード マニュアルを参照してください。

于 2013-02-14T17:21:17.533 に答える
8

コマンドラインで変数を渡すことができます:

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

ただし、逆方向には移動できないことに注意してください。変数が変更された場合test/Makefile、これらの変更は呼び出し元の makefile に戻ることはありません。


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

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

このようなもの:

メインメイクファイル:

# 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
于 2013-02-14T17:20:11.333 に答える
-1

export PACKAGES = jansson mysql ....

于 2019-05-10T06:00:33.690 に答える