別の Makefile から Makefile を呼び出すにはどうすればいいですか? 質問する

別の Makefile から Makefile を呼び出すにはどうすればいいですか? 質問する

あるmakefileから別のmakefileを呼び出すと、予期しない結果が出ます。makefileが2つあり、1つは/path/to/project/makefile、もう1つは です/path/to/project/gtest-1.4.0/make/Makefile。前者が後者を呼び出すようにしようとしています。/path/to/project/makefileに、

dev: $(OBJ_FILES)
  $(CPPC) $(LIBS) $(FLAGS_DEV) $(OBJ_FILES) -o $(BIN_DIR)/$(PROJECT)
  $(MAKE) -f ./gtest-1.4.0/make/Makefile

clean:
  rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
  rm -f ../svn-commit.tmp~
  rm -f $(BIN_DIR)/$(PROJECT)
  make -f gtest-1.4.0/make/Makefile clean

そして/path/to/project/gtest-1.4.0/make/Makefile私は

all: $(TESTS)

clean:
  rm -f $(TESTS) gtest.a gtest_main.a *.o

以下を発行します:

cd /path/to/project
make

出力:

make -f ./gtest-1.4.0/make/Makefile
make[1]: Entering directory `/path/to/project'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/path/to/project'

ただし、次のコマンドを発行すると:

cd /path/to/project
make clean

なるほど:

make -f gtest-1.4.0/make/Makefile clean
make[1]: Entering directory `/path/to/project'
rm -f  gtest.a gtest_main.a *.o
make[1]: Leaving directory `/path/to/project'

理解できません。どちらの場合も、/path/to/project/makefileは現在の作業ディレクトリに入っていることを示しています。最初のケースでは、実行する作業があるとは考えていません (実際には実行します)。2 番目のケースでは、適切なディレクティブを見つけることができます (出力では間違ったディレクトリを探していることが示されています)。それでも、 ではなく でrmコマンドを実行しようとします。/path/to/project/path/to/makefile/gtest-1.4.0/make/

メイクファイルを相互に呼び出すための基本的なことを見落としているのでしょうか? 重大な概念上の間違いを犯したのでしょうか、それともよくある落とし穴に陥ったのでしょうか? ディレクトリを効果的に変更し、最初のメイクファイルから 2 番目のメイクファイルを呼び出すにはどうすればよいのでしょうか? 単に呼び出すだけでmake -f <name>十分だと私は理解していました。

これは bash の make/gmake 3.81 です。

ベストアンサー1

何を尋ねているのかよく分かりませんが、-fコマンドライン オプションを使用すると、ファイルを指定するだけで、ディレクトリを変更するように make に指示するわけではありません。別のディレクトリで作業を行う場合は、cdディレクトリに移動する必要があります。

clean:
    cd gtest-1.4.0 && $(MAKE) clean

各行はMakefile別々のシェルで実行されるため、ディレクトリを元に戻す必要がないことに注意してください。

おすすめ記事