kyt*_*cka 3 bash makefile gnu-make
在我的生成文件中,我有:
all:
for i in {20..50000..10} ; do \
echo "Computing $$i" ;\
done
Run Code Online (Sandbox Code Playgroud)
这应该在单独的行上打印数字 20, 30, 40, ..., 50000。
这适用于 Debian oldstable(GNU Make 4.0、GNU Bash 4.3),但不适用于 Debian stable(GNU Make 4.1 和 GNU Bash 4.4.12)。
Debian 稳定版只打印字符串“{20..50000..10}”。为什么是这样?在 makefile 中编写这个 for 循环的可移植方式是什么?
如果您在 shell 提示符下运行它:
/bin/sh -c 'for i in {20..5000..10}; do echo $i; done'
Run Code Online (Sandbox Code Playgroud)
你会发现它不像你希望的那样工作。Make 总是调用/bin/sh(它应该是一个 POSIX shell)来运行配方:如果它使用调用 makefile 的人碰巧使用的任何 shell,那么对于可移植性来说将是一场灾难。
如果你真的想用 bash 语法编写你的 makefile 配方,那么你必须通过添加来明确要求:
SHELL := /bin/bash
Run Code Online (Sandbox Code Playgroud)
到你的makefile。
| 归档时间: |
|
| 查看次数: |
2329 次 |
| 最近记录: |