2013-07-06 43 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