【问题标题】:Problem in Makefile forloop break statementMakefile forloop break 语句中的问题
【发布时间】:2019-09-29 06:36:56
【问题描述】:
print:
    @for number in 10 11 12 13 14 15; do \
        ( echo "Number: $$number" ); \
        ( break ); \
        ( echo Break not working ); \
    done

我得到的输出

Number: 10
Break not working
Number: 11
Break not working
Number: 12
Break not working
Number: 13
Break not working
Number: 14
Break not working
Number: 15
Break not working

我需要的输出:

Number: 10

【问题讨论】:

  • 我很困惑。我在gnu.org/software/make/manual/make.html 的GNU make 手册中找不到对@for 的任何引用。你确定你使用的是 GNU make 吗?有一个$(foreach ... ) 可以帮助你。

标签: shell makefile gnu-make


【解决方案1】:

在发布的代码中,'for' 循环在 shell (bash ?) 中执行,而不是由 'make' 实用程序执行。

bash 脚本的问题是'break' 语句在子进程中运行 - 因为它被放在括号'(break') 内。根据 bash 手册,控制流命令(while、if、for、return 等)应该在“main”进程中执行。无法跨进程拆分它们。

删除 '(' 应该可以解决问题 - 打印 'Number: 10' 后循环将停止。

print:
    @for number in 10 11 12 13 14 15; do \
        ( echo "Number: $$number" ); \
        break ; \
        ( echo Break not working ); \
    done

作为旁注,无需将“echo”语句放在“(...)”中。它使脚本派生出不必要的 bash 实例。

【讨论】:

  • Make 使用system() 调用来执行命令,它使用/bin/sh,你不能确定它是所有环境中的bash 链接
猜你喜欢
  • 2013-11-17
  • 2022-01-22
  • 2020-09-06
  • 2014-02-21
  • 1970-01-01
  • 2013-02-16
  • 2018-03-25
  • 1970-01-01
  • 2020-06-17
相关资源
最近更新 更多