首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从另一个Makefile调用Makefile?

如何从另一个Makefile调用Makefile?
EN

Stack Overflow用户
提问于 2010-02-05 17:20:34
回答 4查看 170.6K关注 0票数 148

我从一个makefile调用另一个makefile得到了一些意想不到的结果。我有两个makefile,一个名为/path/to/project/makefile,另一个名为/path/to/project/gtest-1.4.0/make/Makefile。我正在尝试让前者呼叫后者。在/path/to/project/makefile中,我有

代码语言:javascript
复制
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中,我有

代码语言:javascript
复制
all: $(TESTS)

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

发出以下命令:

代码语言:javascript
复制
cd /path/to/project
make

输出:

代码语言:javascript
复制
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'

但是,当我发出这些命令时:

代码语言:javascript
复制
cd /path/to/project
make clean

我明白了:

代码语言:javascript
复制
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都告诉我它正在进入当前的工作目录。在第一种情况下,它认为自己没有工作要做(当它做了工作时),在第二种情况下,它能够找到适当的指令(当输出告诉我它在错误的目录中查找时),但它试图在/path/to/project而不是/path/to/makefile/gtest-1.4.0/make/中运行rm命令。

在互相调用makefile时,我是否遗漏了一些基本的东西?我是犯了一个严重的概念性错误,还是碰到了一个常见的陷阱?如何有效地更改目录并从第一个makefile中调用第二个makefile?我的理解是,简单地调用make -f <name>就足够了。

这是bash中的make/gmake 3.81。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-05 17:30:19

我真的不太清楚您在问什么,但是使用-f命令行选项只是指定一个文件-它不会告诉make更改目录。如果您想在另一个目录中执行此工作,则需要cd到该目录:

代码语言:javascript
复制
clean:
    cd gtest-1.4.0 && $(MAKE) clean

请注意,Makefile中的每一行都运行在单独的shell中,因此不需要重新更改目录。

票数 135
EN

Stack Overflow用户

发布于 2012-05-02 22:38:55

您可能希望使用-C <path>选项,而不是make-f。这首先将更改为路径'<path>',然后在那里调用make

示例:

代码语言:javascript
复制
clean:
  rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
  rm -f ../svn-commit.tmp~
  rm -f $(BIN_DIR)/$(PROJECT)
  $(MAKE) -C gtest-1.4.0/make clean
票数 135
EN

Stack Overflow用户

发布于 2013-08-02 18:51:56

http://www.gnu.org/software/make/manual/make.html#Recursion

代码语言:javascript
复制
 subsystem:
         cd subdir && $(MAKE)

或者,等效地,这是:

代码语言:javascript
复制
 subsystem:
         $(MAKE) -C subdir
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2206128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档