Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 生成文件(计数)_Makefile - Fatal编程技术网

Makefile 生成文件(计数)

Makefile 生成文件(计数),makefile,Makefile,我完全不知道如何在Makefile中实现这一点 假设我有一个目标。在目标内部我有一个循环。如何更改变量以跟踪迭代 例如: COUNTER = 0 target: (loop){ COUNTER++ echo COUNTER } 我知道Makefiles中的变量只是扩展的,我不确定它们是否可以永久更改,但必须有一种方法来做到这一点,对吗( 以下是一些提出类似问题的来源。这些例子似乎只是暂时改变了变量: 也许我必须以某种方式使用eval函数 也许我

我完全不知道如何在Makefile中实现这一点

假设我有一个目标。在目标内部我有一个循环。如何更改变量以跟踪迭代

例如:

COUNTER = 0
target:
    (loop){
        COUNTER++
        echo COUNTER
}
我知道Makefiles中的变量只是扩展的,我不确定它们是否可以永久更改,但必须有一种方法来做到这一点,对吗(

以下是一些提出类似问题的来源。这些例子似乎只是暂时改变了变量:

也许我必须以某种方式使用
eval
函数


也许我每次都必须在Makefile字符串中附加一个字符,然后使用shell中的某些内容来计算字符数?

这里有一个解决方案:编写一个简单的脚本,如下所示:

#!/bin/bash
count=`cat count.txt`
count=$((count + 1))
echo $count
cat $count > count.txt
通过执行以下操作初始化文件

$ echo "0" > count.txt

然后将其作为一个.PHONY要求包含进来,以构建您想要的任何内容。

这里有一个解决方案:编写一个简单的脚本,如下所示:

#!/bin/bash
count=`cat count.txt`
count=$((count + 1))
echo $count
cat $count > count.txt
通过执行以下操作初始化文件

$ echo "0" > count.txt

然后将其作为.PHONY要求包含进来,以构建您想要的任何内容。

如果变量不必在规则中生存,那么应该这样做(我假设bash):


如果变量不必在规则中生存,那么应该这样做(我假设bash):



第一个例子中的第一个答案给出了一个有效的解决方案。你为什么还要问这个问题?还有,你对“暂时”和“永久”的使用没有意义。不是为了迭代。我必须创建一个新变量来保存每个数字。所以…你想在一个规则中增加一个变量,然后在另一个规则中使用新值?你知道操作顺序吗?这两个规则有什么特殊的关系吗?基本上我有。虚假的目标称为clean。我要做的就是计算ma的数量ny文件实际上被删除。目标循环遍历每个文件,如果它在那里,它会删除它。所以在“删除文件”之后我想增加的命令…因为如果文件不存在,这两个命令将被跳过。第一个示例中的第一个答案给出了一个有效的解决方案。为什么您仍在问这个问题?还有,您使用的“暂时”和“永久”没有意义。不是为了迭代。我必须创建一个新变量来保存每个数字。所以…你想在一个规则中增加一个变量,然后在另一个规则中使用新值?你知道操作顺序吗?这两个规则有什么特殊的关系吗?基本上我有。虚假的目标称为clean。我要做的就是计算ma的数量ny文件实际上被删除。目标循环遍历每个文件,如果它在那里,它会删除它。所以在“删除文件”之后我想增加的命令…因为如果文件不存在,这两个命令将被跳过。我试图避免使用makefile之外的文件,但我想没有其他方法!@Robert Martin Small bug在您的代码中。您应该将“cat$count>count.txt”替换为“echo$count>count.txt”_(ツ)_/“'我试图避免使用makefile之外的文件,但我想没有其他方法了!@Robert Martin您的代码中有一个小错误。您应该将“cat$count>count.txt”替换为“echo$count>count.txt””_(ツ)_/“'ahhh!我差一点就到了!错误:/bin/sh:let:notfound'let'是一个bashbuiltin@TrevorHickey:好的,你使用什么shell?(如果你不确定,可以从命令行中尝试
echo$shell
,或者更好的是在规则中的命令中。)明白了!如果你没有设置变量“shell”,那么默认使用/bin/sh。因此,添加“shell:=/bin/bash”,我可以使用“let”命令。我从来没有想到会得到这么大的帮助,谢谢你的耐心Betaahhh!我太接近了!错误:/bin/sh:let:not found“let”是一个bashbuiltin@TrevorHickey:好的,您使用什么shell?(如果您不确定,请从命令行中尝试
echo$shell
,或者更好地使用规则中的命令。)明白了!如果不设置变量“SHELL”,默认使用/bin/sh。因此,通过添加“SHELL:=/bin/bash”,我可以使用“let”命令。我从没想到会得到这么大的帮助,感谢您的耐心等待