2013-07-06 45 views
0

我正在为一个FPGA团队开发makefile环境,我目前遇到了一个宏问题。我已经将它定义为TOOL_EXEC变量的显示,但是我收到了与双引号和括号相关的“意外标记”错误。如果我把双引号放在一起,变量根本就没有任何引号,并且不会产生任何错误,但是我们的工具要求它们放在括号内。我需要传递完全引用的括号信息,但宏定义给我提出了问题!GNU Make变量“意外的令牌”

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\'\)\" 
+0

这不是你想要做的事情:它不应该基于命令行示例。 – MadScientist

+0

当我回家时我必须尝试,但我可以发誓我尝试过。我不记得说实话。呵呵 – Matt

+0

omg好所以是啊我只是不得不逃脱双引号〜谢谢Beta和MadScientist的回复! – Matt

1

当您设置在您使用该变量的唯一名称的makefile文件的变量,而美元签署,是这样的:

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

如果你写${TOOL_EXEC}那么它将扩大和扩张的结果将被用作瓦里名字。如果没有设置,则它将解析为:

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

这显然是不正确的。

+0

啊啊啊!这是我的文章中的拼写错误,不是语法错误!抱歉! – Matt

+0

您在提问时应始终剪切并粘贴,而不是重新键入。这可以确保您询问的是您正在使用的内容。随着计算机甚至最小的字符变化,甚至空白,有时可以使所有的差异。鉴于新的例子,我们只能说你没有提供足够的信息。错误不在变量的设置位置,而是在makefile中使用的位置,而您没有向我们显示该位置。我的怀疑是你引用'$(TOOL_EXEC)'它在哪里使用,这是不正确的。 – MadScientist

+0

我无法在线粘贴源代码! – Matt