2016-06-15 4 views
0

でメイクファイルを呼び出します。 testsは、自身のmakefileを持っています。これは、ソースコードをバイナリ(複数のターゲット)にコンパイルするために使用します.Allは、テストディレクトリのMakefileによって管理されます。は</p> <pre><code>src |-tests |-abc </code></pre> <p>私は<code>tests</code>と呼ばれるターゲットを持ってい<code>src</code>でメイクファイルを持っているし、次のように私は、ソースコードのフォルダ構造を持つサブディレクトリ

私のsrc makeファイルには次のターゲットがあります。私は、メインのMakefileでのテストの対象に指定することができますどのような依存

all: main tests 

main: $(DEPENDENCY IN SRC and ABC) 
    command 

tests: ?? 
    make -C tests 

..私はこのMakefileには、テストフォルダ内のソースファイルを意識する必要はありません。

答えて

0
all: main tests 

main: $(DEPENDENCY IN SRC and ABC) 
    command 

tests: 
    $(MAKE) -C tests 

これは、無条件にプライベートサブディレクトリでテストのmakeを呼び出します。特殊な$(MAKE)変数を使用すると、コマンドラインパラメータを伝播させてオーバーヘッドを減らすことができます。

0

ターゲットをPHONYと宣言するだけで、makeは生成されたファイルをチェックしません。その代わりに、常にがルールを実行し、二次呼び出しをmakeにして、何を構築する必要があるかを決定します。

これについて考えてみましょう:ファイルがsrc/testsの場合はどうなりますか? makeは、ファイルがすでに存在していることに気付き、前提条件が指定されていないため、そのファイルを作成しないことにします。ルールtestsが実行されないようにする。

all: main tests 

main: $(DEPENDENCY IN SRC and ABC) 
    # Recipes (That is the word to describe commands in a make rule) 

.PHONY: tests 

tests: 
    $(MAKE) -C tests 

また、アレックスによる回答を追加してください:$(MAKE)を使用するとよいでしょう。また、makefileをmakeプログラムの名前とは別に動作させることができます。プログラムがxyz-makeと呼ばれるディストリビューションがあるとします。

0

このMakefileは、testsフォルダ内のソースファイルを認識したくありません。

多分、再考したいかもしれません。 Peter MillerのRecursive Make Considered Harmfulは、1つのMakefileがあなたが必要とする、または必要とするすべてのものであるという強力なケースを作り出します。それはずっと前に私の心を変えた。

関連する問題

 関連する問題