寫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指令。但若是對多檔案進行編譯,即若是編譯的目標檔案同時包含另一檔案中的函式。則在編譯的時候需將另一檔案加到編譯原始檔中...