我有以下makefile规则
$(OUTDIR)/%.out: $(EXAMPLE)/%.c .FORCE | $(OUTDIR)
myprogram $< -o $@
$(OUTDIR):
mkdir -p $(OUTDIR)
我使用此makefile规则来测试我的程序。我在示例目录中有一系列示例,并将输出写入outdir。这一切都很好,并帮助我测试我的应用程序。
当我在程序中遇到分段错误时,问题就出现了。当我在控制台中运行我的程序正常时,它返回分段错误并退出。但是,当我从makefile运行它时,它不会返回分段错误,但会卡在makefile规则中。 Make似乎重试它或类似的东西,它分配了大量内存并在几秒钟内填满整个内存。
这是make的错误(我在Ubuntu 14.04.2 LTS上使用GNU Make 3.81)吗?或者有没有人知道一种方法来强制make来检测分段错误并报告它?
更新
我尝试用虚拟程序重现错误,从而产生分段错误。我首先尝试了以下程序,这显然会造成分段错误。
void main(int argc, char **argv){
int *a = NULL;
a[0] = 4;
}
制作能够处理这个。它按预期退出并报告分段错误。
我可以重现问题的方法是由于无限递归导致的分段错误(导致堆栈溢出),就像在这个程序中一样。
int recursive(int i){
if(i > 0){
recursive(++i);
}
}
int main(int argc, char **argv){
recursive(2);
}
这个make填满了整个记忆。似乎make在某种程度上具有无限的堆栈大小,而通常系统限制堆栈。