执行 FPGA 的 Makefile 时出现问题 poject-Vivado

Problem executing Makefile for FPGA poject-Vivado

您好,我是创建 makefile 的新手。 我在 makefile 中编写了以下命令,但当我在终端中键入 make 时,它​​们似乎没有执行。 但是,如果我在终端中单独键入命令,它会起作用。

我正在尝试在这个 tcl 文件中打开一个 vivado 项目并对其进行一些望远镜分析并将结果保存在 txt file.The 如果单独执行,tcl 文件也可以正常运行。 我 cd 到我的项目文件夹,其中存在所有文件源文件夹、项目文件夹、makefile。我将它命名为“makefile”,这样我就可以通过在 terminal.The 中键入 make 来执行它 makefile 内容如下。

.PHONY : vivado_open 
vivado_open:
    $(info Hello Make)
    bsub -Is -q i_soc_rh7 -R "rusage[mem=32000, temp=1GB] affinity[core(8):membind=localonly]" vivado -nolog -nojou -mode batch -source vivado.tcl

这是终端的结果

$make 
Hello Make 
make: Nothing to be done for `vivado_open'.

抱歉,这里一定有其他事情发生,您没有告诉我们。如果您在该 makefile 中键入 make,则根本不可能获得该输出。

您正在使用变量,而不是名为 vivado_open 的目标,因此 make 将 永远不会 打印 nothing to done for 'vivado_open'. 它会这样说:nothing to be done for ../projectfiles/test.prj

此外,您没有回答我关于 TAB 与空格的问题。如果 infobsub 行都使用制表符缩进,则 make 不可能打印 Hello Make,而不 打印 bsub 命令并尝试 运行 它。

您的目录中必须有另一个生成文件,可能命名为 MakefileGNUmakefile,而不是 makefile。或者,也许您设置了 MAKEFILES 之类的环境变量,导致读取其他 makefile。

如果其中 none 看起来是真的,你将不得不 运行 make -d 看看你是否能弄清楚发生了什么。该输出对于 Whosebug post 来说太大了,因此您必须尝试自己阅读它。

已编辑

好的,问题是您使用空格来缩进您的规则。在 make 中,所有配方行都必须使用硬 TAB 字符缩进。普通空间并不意味着有什么特别之处。基本上你的 makefile 被解释为你写了这个:

.PHONY : vivado_open 
vivado_open:
$(info Hello Make)
bsub -Is -q i_soc_rh7 -R "rusage[mem=32000, temp=1GB] affinity[core(8):membind=localonly]" vivado -nolog -nojou -mode batch -source vivado.tcl

这就是您收到此消息“无事可做”的原因:您实际上还没有为 vivaldo_open 定义配方,因此实际上没有什么可以更新该目标。

顺便说一句,通常你会得到 bsub 行的语法错误,因为 make 不知道那是什么。但是,如果您仔细查看您的行,您会发现它包含一个 :。因此,make 将其解释为一组目标和一组先决条件,如下所示:

bsub ... affinity[core(8)  :  membind=localonly]" vivado ... vivado.tcl

(make 不关心引号或其他特殊字符,如 [] 等)

所以。确保你用 TAB 字符缩进你的食谱行,你会没事的。这可能是人们在使用 makefile 时遇到的最常见的问题。