簡體   English   中英

Makefile 中缺少分隔符?

[英]Missing separator in Makefile?

以下 Makefile 不起作用,我不確定發生了什么。

CC = gcc
CFLAGS = -Wall -g

demo:
    ${CC} ${CFLAGS} demo.c -o demo
lib:
    ${CC} ${CFLAGS} lib.c -o lib
clean:
    rm -f lib demo

Demo 有 main 函數,lib 有一套 demo 中用到的方法。

我在 lib 中添加了 -c 標志。 但是,當我運行 make 時,我得到:

Makefile:5: *** missing separator.  Stop.

鑒於您的錯誤更新,請在${CC}命令之前檢查您在線上的內容。 許多make程序需要一個真正的制表符,然后命令和編輯器放入八個空格(例如)會破壞它們。 這通常是“缺失分隔符”錯誤的原因。

你可以看到以下成績單。 在文件中, $(xyzzy)之前有四個空格:

xyzzy=echo
all:
    $(xyzzy) hello

所以,當我做到這一點時,我會得到與你相同的錯誤:

pax> make
makefile:3: *** missing separator.  Stop.

但是,當我編輯它並將這四個空格轉換為選項卡時,它可以正常工作:

pax> make
echo hello
hello

您還嘗試將源文件組合在一起時遇到問題。

如果沒有-c標志到gcc ,它將嘗試從每個命令創建單獨的可執行文件,幾乎肯定會導致鏈接器錯誤。 你需要像(簡單)這樣的東西:

CC = gcc
CFLAGS = -Wall -g

# Just compile/link all files in one hit.
demo: demo.c lib.c
   ${CC} ${CFLAGS} -o demo demo.c lib.c

clean:
    rm -f demo

或(稍微復雜一點):

CC = gcc
CFLAGS1 = -Wall -g -c
CFLAGS2 = -g

# Link the two object files together.

demo: demo.o lib.o
   ${CC} ${CFLAGS2} -o demo demo.o lib.o

# Compile each source file to an object.

demo.o: demo.c
   ${CC} ${CFLAGS1} -o demo.o demo.c

lib.o: lib.c
   ${CC} ${CFLAGS1} -o lib.o lib.c

clean:
    rm -f demo

第一種解決方案的問題在於,即使只有一個程序已經過時,它也會不必要地編譯這兩個程序。 第二種解決方案更加智能化。

你有沒有機會在${CC}之前錯過一些“tab”( \\t )?

通常我的編輯器將用空格替換制表符,我會收到此消息。

CC = gcc
CFLAGS = -Wall -g

demo:
[TAB]${CC} ${CFLAGS} demo.c -o demo
lib:
[TAB]${CC} ${CFLAGS} lib.c -o lib
clean:
[TAB]rm -f lib demo

同樣的錯誤。 當我在這里使用vi時,不會顯示特殊字符。

原因很簡單:$ {CC}前面應該有一個TAB空格。

lib需要編譯為庫,而不是程序。

嘗試將其更改為:

main:
    ${CC} ${CFLAGS} main.c lib.o -o main
lib:
    ${CC} ${CFLAGS} lib.c -c -o lib.o

縮進是我的問題。

我的IDE使用的是TAB字符而不是空格。 在vim中打開Makefile,做了一個:retab用2個空格重新:retab ,這已經解決了。

我通過用制表符替換前導空格解決了同樣的問題

由於main取決於lib

demo: lib demo.c

${CC} ${CFLAGS} lib.c -c -o lib.o

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM