GNU Make 变量“意外令牌”

Posted

技术标签:

【中文标题】GNU Make 变量“意外令牌”【英文标题】:GNU Make variable "unexpected token" 【发布时间】:2013-07-06 00:07:54 【问题描述】:

我正在为一个 FPGA 团队开发 makefile 环境,但我目前遇到了宏问题。我已经为 TOOL_EXEC 变量定义了它,但是我得到了一个与双引号和括号相关的“意外令牌”错误。如果我放双双引号,则变量膨胀而根本没有任何引号并且不会产生错误,但是我们的工具要求它们放在括号中。我需要传递完全引用的括号信息,但宏定义给我带来了问题!

"意外标记 `(' 附近的语法错误"

    Example call to tool: (This works fine)
    $ Tool --v v4.5 -odir . -verilog -vh "('name', 'propname', 'address', 'desc')" filename.rdl

    Desired Macro/variable: (not working)
    TOOL_EXEC = -odir . -verilog -vh "('name', 'propname', 'address', 'desc')"

有什么想法吗? 谢谢

【问题讨论】:

【参考方案1】:

只需使用反斜杠转义每个特殊字符(例如引号、双引号或括号):

TOOL_EXEC = -odir . -verilog -vh \"\(\'name\', \'propname\', \'address\', \'desc\'\)\"

【讨论】:

这不是您想要做的:根据命令行示例应该没有必要。 我回家后一定要试一试,但我可以发誓我试过了。我不记得说实话。哈哈 omg 好的,是的,我只需要避开双引号~感谢 Beta 和 MadScientist 的回复! 调用工具时充气不正确!我有一个 make 目标,它允许我通过键入“$ make echo_TOOL_EXEC”来查看变量中的内容,它可以正确打印变量内容,但是当该工具实际执行时,它会尝试读取反斜杠,这会弄乱它。 @MattCarlis:如果您向我们展示调用该工具的命令(或者更好的是,整个规则)以及它的实际作用,我们可能有机会解决问题。【参考方案2】:

当您在 makefile 中设置变量时,您只使用变量的名称,不使用美元符号,如下所示:

TOOL_EXEC = -odir . -verilog -vh "('name', 'propname', 'address', 'desc')"

如果你写$TOOL_EXEC,那么它将被扩展,扩展的结果将用作变量名。如果未设置,则会解析为:

 = -odir . -verilog -vh "('name', 'propname', 'address', 'desc')"

这显然是不对的。

【讨论】:

啊啊啊!!那是我帖子中的错字,而不是语法错误!对不起! 提问时应始终剪切和粘贴,而不是重新输入。这样可以确保您询问的内容正是您正在使用的内容。对于计算机,即使是最小的字符变化,甚至是空格,有时也会产生重大影响。鉴于新示例,我们只能说您没有提供足够的信息。错误不是设置变量的位置,而是您没有向我们展示的 makefile 中使用它的位置。我的怀疑是你引用了$(TOOL_EXEC),这是不正确的。 我无法在线粘贴源代码!

以上是关于GNU Make 变量“意外令牌”的主要内容,如果未能解决你的问题,请参考以下文章

休眠错误消息:意外令牌:NULLS(脚本文件行中的错误:13 意外令牌:NULLS)

位置 4 处的意外令牌左括号()

mobx + 反应意外令牌

反应意外的令牌 <

ReactJS:意外令牌'<'

异常意外令牌:SMALLINT;而自动增量主键