我收到一些意外的结果,从另一个调用一个生成文件。我有两个makefile,一个叫做/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
都是在告诉我它正在进入当前工作目录。在第一种情况下,它认为它没有工作(在执行时),在第二种情况下,它能够找到适当的指令(当输出告诉我它在错误的目录中查找时),但是它尝试rm
在/path/to/project
而不是中运行命令/path/to/makefile/gtest-1.4.0/make/
。
我是否缺少一些互相调用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
。为什么没有定义虚假目标?