我有時經歷過,如果任何特殊/控制字符($,^ M或其他)以某種方式進入makefile,那麼如果您嘗試使用該makefile生成-f Makefile,它會給出錯誤。爲什麼一些makefile中的特殊/控制字符在* nix中有時會在make過程中出錯?
我想知道,
1)任何人都經歷這樣的事情,如果是,是什麼原因導致這些錯誤?這些特殊字符有什麼特別之處?
我有時經歷過,如果任何特殊/控制字符($,^ M或其他)以某種方式進入makefile,那麼如果您嘗試使用該makefile生成-f Makefile,它會給出錯誤。爲什麼一些makefile中的特殊/控制字符在* nix中有時會在make過程中出錯?
我想知道,
1)任何人都經歷這樣的事情,如果是,是什麼原因導致這些錯誤?這些特殊字符有什麼特別之處?
UNIX對傳統的程序輸入並不是很寬容。自從第一次成立以來,這種態度並沒有太大改變。 ^M
是回車,通常只有在Windows環境中編輯它們時纔會進入文件。 UNIX使用換行符(\ n,0x0a)作爲行終止符,許多工具都抱怨CR(\ r,0x0d),因爲他們沒有看到該字符甚至存在的原因。
$
是一個不同的問題,因爲$
是makefile語法的一部分。它用於指示makefile中的變量/常量。這些可以是上下文相關的,例如$<
或$*
,或者名稱如$(CC)
。
您可以使用dos2unix
實用程序來擺脫^M
並通過\$
擺脫美元符號。
儘管如此,還是有更多的特點。例如,要求用於目標的命令行需要由製表符縮進。據我所知,只有make
不是很常用的解除了這個限制。
我不明白這是一個滿意的答案,因此我不認爲這是一個真正的問題。非常含糊,答案就像是「因爲這就是做什麼」。 – 2009-03-05 18:54:15
@goldenmean:本地自定義呼叫爲了節省頭版上的空間而自動顯示您的作者身份,因此簽名也是不必要的。 – dmckee 2009-03-05 19:05:08