makefile的一點小細節記錄

2021-09-24 03:06:04 字數 1236 閱讀 3523

寫makefile時,指定輸出目錄後,結果導致了,不管依賴檔案是否改變,只要執行make命令就會執行編譯的過程,有點疑

惑,所以就做個小實驗,看下什麼問題導致的,具體原因已經在makefile檔案中解釋。順便也做了一下偽目標的實驗,問題

的描述和解決在makefile注釋中已經描述。這篇部落格的目的就是記錄一下這2個實驗的測試結果,方便以後查閱。

|---makefile

|---mian.c

out_dir=out

target = test

#.phony:$(out_dir)

#.phony:force

all: $(out_dir) check_dir $(target)

@echo "...all..."

#如果沒有新增".phony:$(out_dir)",建立一次之後就不會再執行,原因,第一次建立了out目錄,每次執行前都會檢測一次,out是是否存在,如果存在就不會執行

$(out_dir):

@echo "....create $@...."

@mkdir -p $@

#check_dir這個沒有同名的檔案或目錄就會認為是偽目標,每次都會執行

#也就是說偽目標有2種方式建立,一種是顯示申明:"phony: target_name"

#還有一種是隱士的,make如果檢測到目標沒有檔案或目錄與之對應就認為這個是偽目標

#第2種是我自己的理解

check_dir:

@echo "create $(out_dir)/out1"

@mkdir -p $(out_dir)/out1

#這樣寫的問題,不管main.c是否跟新,都會被執行。原因:目標是test ,沒有帶路徑,所以每次找到都是在當前目錄下查詢,而每次查詢test,都沒有查詢到,所以每次都會執行

#為了驗證這個說法,加一句cp -rf $(out_dir)/$@ ./ ,即複製目標到當前的目錄下,然後就不會每次都執行了,只用mian.c改動 才會執行,驗證了上面說法是正確的

$(target):main.c

@echo "...$@.."

gcc $^ -o $(out_dir)/$@

cp -rf $(out_dir)/$@ ./

.phony:clean

clean:

rm -rf $(out_dir) $(target)

關於const的一點小細節

1.假如函式引數為引用型別的話,那麼傳給它乙個常量會發生錯誤,這是我們都知道的事實。但是在初學 c 時我們可能會誤給它傳乙個字面值,如例 則會發生 main.cpp 14 error c2664 test 不能將引數1 從 int 轉換為 int 的錯誤。這是因為我們初學者經常會忽略字面值也是常量的...

jdbc一點小筆記

jdbc的常用介面的步驟,1使用driver或者class.forname 進行註冊驅動 2使用drivermanager進行獲取資料庫的鏈結 使用connection獲取語句物件 使用語句物件介面statement方法執行查詢或更新操作 查詢的resultset是結果集使用之前一定要先判斷是否存在...

關於makefile的一點思考

在gnu編譯工具軟體中,如果對單一的原始檔進行編譯,可執行指令如下 gcc o x x.c 此指令會將原始檔編譯為目標檔案。若是對執行緒類檔案進行編譯,則在末尾加上 lpthread指令。但若是對多檔案進行編譯,即若是編譯的目標檔案同時包含另一檔案中的函式。則在編譯的時候需將另一檔案加到編譯原始檔中...