【问题标题】:Makefile and command line different behaviourMakefile 和命令行不同的行为
【发布时间】:2017-11-30 15:19:06
【问题描述】:

我目前正在做一个更大的项目,我想用几个不同的代码作为输入来测试可执行文件。
我这样称呼它./test < code1 在命令echo $? 之后,它显示最后一个返回值 [0, 1, 2, ..]

我想自动化,所以我在makefile 中创建了这样的调用:

#makefile 
[...]
test : 
    ./test < code1 
    @echo $$?
    ./test < code2 
    @echo $$?
    [...]

[...]

所以我可以打电话给make test

当程序成功返回 0 时,一切正常。但是当程序必须返回 0 以外的值时,它会告诉我:

./test < code3
Makefile:19: recipe for target 'test' failed
make: *** [test[ Error 2

奇怪的是,当我尝试使用代码调用程序时,它会在命令行中崩溃,例如:

./test < code3; echo $?  

它运行良好,并显示最后的退出状态(例如 3)。
我现在很困惑,因为我认为它应该工作相同。有人可以帮帮我吗?
谢谢!

【问题讨论】:

标签: bash makefile


【解决方案1】:

看到这个答案:https://stackoverflow.com/a/41452754/939557

您需要将echo 放入与您的测试调用相同的逻辑行:

test : 
        ./test < code1; echo $$?
        ./test < code2; echo $$?

【讨论】:

  • 好吧,我想知道,为什么一个特定的命令在命令行中有效而在 Makefile 中无效..应该有不同的要求
  • 我在我提到的评论中解释了它。 makefile 配方中的每个逻辑行都在单独的 shell 中调用。它不像 shell 提示符,您在提示符处键入的每个命令都运行在在同一个 shell 中。
  • 如果你想真正模拟 make 的工作原理,在 shell 提示符下,你需要运行 /bin/sh -c 'somecommand' 而不仅仅是 somecommand
  • 也许在答案本身中解释每个配方行都在单独的外壳中运行。这是一个常见问题解答,但我没能很快找到规范的副本。
  • 我不明白你的意思。我链接到的答案说正是
猜你喜欢
  • 2013-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 2016-11-07
  • 2012-04-24
相关资源
最近更新 更多