あるメイクファイルを別のメイクファイルから呼び出すと、予期しない結果が出ます。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です。
make -f gtest-1.4.0/make/Makefile clean
あなたの代わりに言う方がいいと思います$(MAKE) -C gtest-1.4.0/make clean
。なぜ偽のターゲットを定義していないのですか?