makefile 中使用 gcc,make編譯之後在終端得到cc

時間 2021-06-01 10:13:00

1樓:qin meng

makefile裡有隱含規則和顯式規則兩種,顯式規則就是我們通常寫的這種,隱含規則就是make對於各種檔案的隱含編譯編譯規則,對於*.c檔案它的隱含規則是這樣的

%.o:%.c

$(CC)$(

CFLAGS)$(

CPPFLAGS)-c

-o$@

$<除了*.c還有*.cc *.C *.p *.l *.y等等許多語言檔案的隱含推導規則,詳見make的手冊。

具體到你的這個makefile,實際上你只寫了乙個main的鏈結規則,使用的聯結器是gcc而已。那麼對於其他的檔案make就自動使用隱含規則進行編譯了。而預設值裡面$(CC)就是cc,$(CFLAGS)什麼的都是空,就出現了那幾條cc的編譯過程。

你可以試試在你的makefile前面對CC等變數賦值,隱含規則就按照你的定義進行了,比如改成這樣

#Makefile:

CC:=gcc

CFLAGS

:= -g

src:=

$(wildcard *.c) test3.c

obj:=

$(patsubst %.c,%.o,$(src))

main:$(

obj)

gcc -o main $(obj)

你的編譯結果會成這樣:

gcc -g -c -o main.o main.c

gcc -g -c -o test1.o test1.c

gcc -g -c -o test2.o test2.c

gcc -g -c -o test3.o test3/test3.c

gcc -o main main.o test1.o test2.o test3.o

Go中,使用runtime Gosched,time Sleep哪個效能更好?

成雋 sleep不精確啊。https 這個bug已經留了2個大版本還沒解決。 假裝懂程式設計 從cpu利用率來說runtime.Gosched應該更好吧,都是讓出cpu,runtime.Gosched讓出後,後續交給go本身的runtime去排程,不需要像sleep那樣自己定義time,runtim...

在VS code中 使用Jupyter notebook如何拆分cell?

jerry hao 這個問題的答案是這樣的 vscode從1.46版開始引進了一種叫Notebook的文件,主要是用來處理github的Issue,他看起來很像Jupyter Notebook,但後者目前是通過vscode python外掛程式來支援的。你說的那個拆分單元格是為Notebook文件用...

如何看待 Node js 中使用 TypeScript 的趨勢?

我發覺目前使用TypeScript 的程式設計師可分為一下3種 1.是後端程式設計師。寫前端純粹是被安排過來寫的,自己更喜歡寫後端,用自己熟悉的語法寫起來當然舒服 2.沒有後段經歷的程式設計師。發現TypeScript 有靜態分析加持,很爽很開心。3.Codebase 已經被前兩者寫了,只能接著用已...