[英]Error with -c flag in implicit rule in Makefile
我正在學習 makefile 並且我正在嘗試通過使用隱式規則來減少我的 makefile。 到目前為止,這就是我所擁有的:
CC = /usr/bin/g++
OBJECTS_INTERACTIVE = calcular.o calc_interactive.o
calc_interactive: $(OBJECTS_INTERACTIVE)
$(CC) $(OBJECTS_INTERACTIVE) -o $@
calcular.o: calcular.c calcular.h
$(CC) -c calcular.c
calc_interactive.o: calcular.h calc_interactive.c
$(CC) -c calc_interactive.c
如果我這樣運行它,沒有錯誤。 但是,我想使用像 calcular.o calcular.o: calcular.h
calcular.h 這樣的隱式規則,AFAIK 正在執行g++ -c calcular.c
引擎蓋下,但顯然它正在執行該命令而沒有-c
標志,我認為它關鍵,我沒有設法讓 g++ 在使用隱式規則時使用-c
標志。 這就是我想要實現的目標:
CC = /usr/bin/g++
OBJECTS_INTERACTIVE = calcular.o calc_interactive.o
calc_interactive: $(OBJECTS_INTERACTIVE)
$(CC) $(OBJECTS_INTERACTIVE) -o $@
calcular.o: calcular.h
calc_interactive.o: calcular.h
它產生此錯誤:
jules@desktop:$ make
/usr/bin/g++ -c calc_interactive.c
/usr/bin/g++ calcular.o calc_interactive.o -o calc_interactive
g++: error: calcular.o: No such file or directory
makefile:11: recipe for target 'calc_interactive' failed
make: *** [calc_interactive] Error 1
編輯:所有文件https://pastebin.com/FZy5kqzj的詳細 pastebin
首先,不要使用 C++ 編譯器編譯 C 源代碼,除非您確定它是嚴格使用這兩種語言的公共子集編寫的。 C 和 C++ 各有對方所缺乏的功能,可以編寫符合兩種語言但對各自含義不同的代碼。 除非您有意識且消息靈通地努力編寫雙語言代碼,否則請為 C 代碼使用 C 編譯器。
其次,如果make
,使用這個 makefile:
CC = /usr/bin/g++ OBJECTS_INTERACTIVE = calcular.o calc_interactive.o calc_interactive: $(OBJECTS_INTERACTIVE) $(CC) $(OBJECTS_INTERACTIVE) -o $@ calcular.o: calcular.h calc_interactive.o: calcular.h
產生您聲稱的 output :
jules@desktop:$ make /usr/bin/g++ -c calc_interactive.c /usr/bin/g++ calcular.o calc_interactive.o -o calc_interactive g++: error: calcular.o: No such file or directory makefile:11: recipe for target 'calc_interactive' failed make: *** [calc_interactive] Error 1
那么最可能的結論是calcular.o
不存在,並且不存在make
知道如何構建它的源文件。 特別是,沒有calcular.c
。 這意味着原來的 makefile 也不應該再工作了。 也許您不小心刪除了源文件,或者在文件名或 makefile 或類似內容中引入了拼寫錯誤。
我想還有一個外部機會g++
的錯誤消息具有誤導性。 如果calcular.o
已經存在並且是最新的,但它的訪問控制屬性阻止您打開它進行讀取,則make
不會嘗試重建它,但g++
可能會發出誤導性診斷,其中“沒有這樣的文件或目錄" 真正的意思是“我無法打開這樣的文件”。 在這種情況下,刪除calcular.o
以使make
需要重建它,這可能是最干凈的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.