我想以增加的输入大小运行程序,所以我引入了一个包含循环的run
目标。
run:
input_size = 1000 ; while [[ $$input_size -le 10000 ]] ; do \
echo $$input_size ; \
./main.out $$input_size ; \
((input_size = input_size + 1000)) ; \
done
我收到以下错误:
/bin/sh: input_size: command not found
之后,循环将按预期工作。
答案 0 :(得分:1)
在bash
中,分配符号周围不能有空格(不同于make
):
input_size=1000
或者,您可以使用bash算术扩展,它对空白的使用更为轻松:
SHELL := /bin/bash
run:
for (( input_size = 1000; input_size < 10000; input_size += 1000 )); do \
echo $$input_size; \
done
答案 1 :(得分:1)
您的makefile文件存在多个问题,如果我们修复了您的版本,则应该为:
run:
input_size=1000 ; while [ $$input_size -le 10000 ] ; do \
echo $$input_size ; \
./main_out $$input_size ; \
input_size=$$((input_size + 1000)) ; \
done
一种更简单的生成数字序列的方法是使用seq
:
run:
for input_size in $$(seq 1000 1000 10000); do \
echo $$input_size ; \
./main_out $$input_size ; \
done
答案 2 :(得分:1)
请非常清楚您遇到的问题:
问题在于make不能使用用户拥有的任何shell运行配方:对于可重复的构建,这将是一场灾难。 make always(根据POSIX标准)在/bin/sh
shell(即POSIX shell)中运行配方。
您的食谱正在使用bash
Shell的增强功能,而POSIX Shell中不提供这些功能。您需要重写配方以使用POSIX Shell功能,或者显式地请求使用bash
来代替POSIX Shell运行配方(当然,这意味着makefile不能移植到{{ 1}}不可用,如果有问题的话。
您可以通过将其添加到makefile中来完成后者:
bash