用於縮排 Make 檔案規則配方的字元是什麼?

用於縮排 Make 檔案規則配方的字元是什麼?

我正在使用 gnu make 並在我的 Makefile 中看到以下規則。我想使用食譜添加類似的規則,但是當我通過為食譜提供製表符或空格來在下一行添加規則及其收據時,我會出現錯誤。

dummy :
    @echo $(OBJS)

當我打開 vim 命令 :set list 時,我看到:

dummy :$
^I@echo $(OBJS)$

配方行(第二行)之前從行首縮排的字元到底是什麼?

如何使用鍵盤輸入它們(無需複製貼上現有規則然後修改它?

我可以在哪裡找到用於從頭開始手動建立 Makefile 的各種空格/縮排的資訊(不是 automake/或其他工具建立的 makefile)?

答案1

makefile 中的食譜必須前面只有一個標準tab字符,沒有其他字符。

^I是製表符的表示形式(參見維基百科上的表格ASCII頁),因此這應該是正確的。

所以您應該能夠使用TabCtrl+輸入它I
(假設這些沒有被軟體重新映射)


編輯

經過進一步調查,你看起來像透過設定更改選項卡中所有配方行前面所需的字符.RECIPEPREFIX 特殊變數

如果該值已在您的 makefile 中定義,則所有配方定義必須使用該字元而不是製表符。

答案2

從上面 DMA57361 給出的答案中挑選了一些指針,並進行了一些更多的擺弄之後,我注意到很久以前在我的 .vimrc 中我有這個命令 set expandtab(它將製表符擴展到空格)並且我使用vim。

這破壞了我在 Makefile 規則中輸入的製表符。在 .vimrc 中評論該行有幫助並且對我有用。

答案3

根據公認的答案:食譜前面必須有一個tab字符,如果set expandtab在您的.vimrc..RECIPEPREFIX不建議覆蓋您的文件,因為這會破壞您下載的程式碼庫中的 makefile。天真的方法是簡單地set expandtab從配置中刪除,但您可以透過新增行來解決這個問題

autocmd FileType make set tabstop=8 shiftwidth=8 softtabstop=0 noexpandtab

expandtab僅當您編輯 makefile 時此功能才會停用。

相關內容