执行 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 与空格的问题。如果 info
和 bsub
行都使用制表符缩进,则 make 不可能打印 Hello Make
,而不 也 打印 bsub
命令并尝试 运行 它。
您的目录中必须有另一个生成文件,可能命名为 Makefile
或 GNUmakefile
,而不是 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 时遇到的最常见的问题。
您好,我是创建 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 与空格的问题。如果 info
和 bsub
行都使用制表符缩进,则 make 不可能打印 Hello Make
,而不 也 打印 bsub
命令并尝试 运行 它。
您的目录中必须有另一个生成文件,可能命名为 Makefile
或 GNUmakefile
,而不是 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 时遇到的最常见的问题。