【问题标题】:make[1]: Entering directory error messagemake[1]: 进入目录错误信息
【发布时间】:2012-04-15 13:55:07
【问题描述】:

我有一个简单的 Makefile:

default:
    @make build
    @make run

build:
    @javac Test.java > /dev/null

run:
    @java Test

在编译期间,输出:

make[1]: Entering directory `<current directory'>
...
make[1]: Leaving directory `<current directory'>

我需要在不打印这些消息的情况下进行构建。有谁知道问题出在哪里或如何抑制这些消息?

谢谢


编辑:无论代码如何,都会发生这种情况。例如它发生在:

class Test {

    public static void main(String[] args) {
        System.out.println("HELLO WORLD");
    }
}

【问题讨论】:

  • 你的代码是什么?我们无法猜测......
  • 为什么要用make编译Java? (不过,我猜“因为教练是这么说的”。)
  • @Neal 抱歉,已编辑以包含代码 sn-p。和 Inerdial,我们使用 make,因为语言的选择取决于我们。教师只需要一种统一的方式来调用我们所有不同的程序。
  • 那不是一个有效的 makefile。尽一切办法将生成文件减少到最简单的重现行为的文件,但请不要发布片段。如果您向我们展示整个 makefile,我们可以告诉您将 @-s 放在哪里。
  • @Beta 已编辑以包含有效的 Makefile。我注意到,如果我不嵌套目标(即在没有单独目标的情况下默认编译和运行),它不会输出这些消息。但是,我想保留单独的目标。有什么想法吗?

标签: java makefile


【解决方案1】:

make 更改为make -s

default:
    @make -s build
    @make -s run

更好:

default:
    @$(MAKE) -s build
    @$(MAKE) -s run

更好:

default: run

build:
    @javac Test.java > /dev/null

run: build
    @java Test

【讨论】:

  • 甚至更好。将 .PHONY 标签添加到构建和运行目标。
  • 拜托,您能解释一下“更好”的解决方案吗? (@$(MAKE)是什么意思?)
  • @Yukulélé: the MAKE variable 包含调用 Make 的可执行文件的名称,它在 makefile 配方中得到一些特殊处理。 @suppresses command echoing.
【解决方案2】:

make -s 抑制其他可能对开发人员很重要的 makefile 消息。如果你想禁止“进入/离开目录消息”只运行make with

make --no-print-directory

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-16
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-28
相关资源
最近更新 更多