我有生成檔案代碼
CC = gcc
CFLAGS = -I. -g -pthread -w
DEPS = main.h
OBJ = main.o
%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
main: $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
這是關于多執行緒的分配;我在 main.c 檔案中有一個 main 函式,在 randomgen.c 檔案中有一個 main 函式。我還有一個 main.h 檔案和一個 .txt 檔案,如果有任何問題,它可以從中讀取。我嘗試查找之前要做什么,并閱讀了它對空格/制表符的特殊要求。我已經嘗試過似乎每次迭代的制表符和/或空格,但我一直遇到同樣的問題。我對 makefile 也不是很了解,因為我們的教授從未真正解釋過它,只是將其納入作業中。謝謝你的幫助
uj5u.com熱心網友回復:
makefile 中的分隔符是 Tab。所以你的makefile在撰寫命令時應該包含制表符作為分隔符
CC = gcc
CFLAGS = -I. -g -pthread -w
DEPS = main.h
OBJ = main.o
%.o: %.c $(DEPS)
<TAB>$(CC) -c -o $@ $< $(CFLAGS)
main: $(OBJ)
<TAB>$(CC) -o $@ $^ $(CFLAGS)
如果您不確定您的 makefile 是否包含制表符或空格,請在十六進制編輯器中查看。如果它包含選項卡,您將看到 09 十六進制代碼。09 十六進制是制表符。
uj5u.com熱心網友回復:
你可以用以下方法證明:
cat -e -t -v Makefile
clas@ertdev clbc > make clean
Makefile:92: *** missing separator. Stop.
現在我在控制臺中輸入:
cat -e -t -v Makefile
然后我明白了
$(OBJFILESTST): $(SRCFILESTST)$
@mkdir -p $(OUTDIROBJ)$
^I$(call get_source_file,$@,$^,$<)$
^I@ $(BUILDCXX) $(CXXFLAGSTST) -c $(REAL_SRC_FILE) -o $@$
在@mkdir 之前,您可以看到缺少非列印選項卡:如果修復它并在控制臺中再次鍵入它:
$(OBJFILESTST): $(SRCFILESTST)$
^I@mkdir -p $(OUTDIROBJ)$
^I$(call get_source_file,$@,$^,$<)$
^I@ $(BUILDCXX) $(CXXFLAGSTST) -c $(REAL_SRC_FILE) -o $@$
make 再次運行,沒有丟失分隔符例外。但通常我的編輯器 (Emacs) 會幫助我解決此類問題:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/368916.html
上一篇:使用fgets時不會被列印出來
