1. ホーム
  2. makefile

[解決済み] 別のMakefileからMakefileを呼び出すには?

2022-04-28 21:38:24

質問

あるmakefileを別のmakefileから呼び出すと、予期せぬ結果になることがあるのですが。 私は2つのmakefileを持っていて、1つは /path/to/project/makefile という名前の /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/ .

makefileを互いに呼び出す際に、何か基本的なことを見逃していませんか? 私はひどいコンセプトミスをしたのでしょうか、それともよくある落とし穴に当たったのでしょうか? どうすれば効果的にディレクトリを変更し、最初のmakefileの中から2番目のmakefileを呼び出すことができるのでしょうか? 私の理解では、単に make -f <name> で十分です。

bashでmake/gmake 3.81です。

解決方法は?

何をおっしゃりたいのかあまりよくわからないのですが、このように -f コマンドラインオプションはファイルを指定するだけで、makeにディレクトリを変更するように指示するものではありません。もし、別のディレクトリで作業を行いたい場合は cd をディレクトリに追加してください。

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

の各行が Makefile は別のシェルで実行されるので、ディレクトリを変更し直す必要はありません。