前言今天我們要來繼續討論 Makefile,
Makefile 裡面有個十分常用的 target -「.PHONY」,
我們來看看這到底是什麼。
什麼是「.PHONY」?我們先來介紹 「.PHONY」存在的意義是什麼,
如果我們去查電子辭典,會發現它對 phony 給出的解釋為 「假的、冒牌貨」,
沒錯,「.PHONY」本身就是一個「假的 target」,而他的主要功能就是
「變免 target 檔案名稱」與「實際上要使用的檔案名稱衝突」
(作為「單純的目標指令 」,非「檔案名」,或者也可以理解為「作為達到目的用的假檔案 」)
我們先來談談 .PHONY 如何「變免 target 檔案名稱」與「實際上要使用的檔案名稱衝突」我們也依照官方的例子來說明這件事情,
假設同一個目錄底下有一個叫做「clean」的檔案!!
在前面的文章中,我們都知道
「target: prerequisites」:當 target 或 prerequisites 沒有被更新,指令不會被執行 我們來看看通常 clean: 的指令,後面都沒有接東西,
clean:
rm -rf *.o
在這個條件底下,「make clean」這個指令會在執行一次後,永遠不會被執行。
因為「clean 這個檔案不會再被更新了 (當然,一般我們也不會希望就這麼剛好有一個 clean 的檔案)」
如果要讓 make clean 依然發揮他原來的「清除檔案」效果。
我們需要改寫成:
.PHONY: clean
clean:
rm -rf *.o
在這裡,「.PHONY」被定義為一個純粹的方法,
也就是說,「clean」被作為一個純粹的方法使用,
所以「make clean」可以視為是一個單純的清除功能,「不會去尋找 clean 檔案 」。
結論如果我們在製作 Makefile 的過程中,有碰到過程中「有目標」,卻沒有「必要對應的檔案」,
我們都可以定義在 「.PHONY」之後。
Reference⭐C++ 基礎用法 相關文章整理⭐: 1. 【C++】C++ compile 程式碼 使用 c++ 11 與使用相關的 package 2. 【C++】C/C++ 顯示資料的類別 (type) sample code (內含範例程式碼) print C data type, cout C++ data type, get variable type in c++ 3. 【C++】C++ 複製 2D array的方法 copy 2d array memcpy sample code (內含範例程式碼) ⭐Modern C++ ⭐: ⭐C++ 字串處理相關文章整理⭐: 1. 【C++】字串 char string stringstream 相關用法總整理 (內含範例程式碼) 與利用 sprinf, snprinf assign 值的方法 2. 【C++】字串 char string stringstream 「轉換」用法總整理 (內含範例程式碼) 3. 【C】printf, fprintf, sprintf, snprintf 相關用法總整理 (內含範例程式碼) 4. 【C++】C++ String 用法 連接兩個 String c++ string concat ⭐C++ 系統偵測相關文章整理⭐: 1. 【C++】C++ 利用 dirent.h 計算資料夾的檔案數量 count files sample code (內含範例程式碼) 2. 【C++】C++ inotify sample code 偵測指定路徑底下的文件變化 (內有範例程式碼) ⭐C++ OpenCV 相關文章整理⭐: 1. 【OpenCV】c++ OpenCV – 在 ubuntu 上第一次執行 OpenCV 程式 sample code (內含範例程式碼) 2. 【OpenCV】c++ OpenCV - 在圖片上寫上文字 cv::putText sample code (內含範例程式碼) 3. 【OpenCV】c++ OpenCV - cv::Rect 矩形用法與相關功能函數 sample code (內含範例程式碼) 4. 【OpenCV】c++ OpenCV - OpenCV 中的純量 定義顏色 cv::Scalar(255,255,255) color sample code (內含範例程式碼) 5. 【OpenCV】用 C++ 計算 iou 的方法 與網路算法常見錯誤(內附範例程式碼) sample code ⭐C++ Makefile 相關文章整理⭐: 1. 【C++ Makefile】- 1 / 嘗試撰寫自己的第一份 Makefile 2. 【C++ Makefile】- 2 / 新增自己的變數 3. 【C++ Makefile】- 3 / Makefile 常用變數 -「$@」, 「$^」 4. 【C++ Makefile】- 4 / Makefile 常用 fake target -「.PHONY」
5. 【C++ Makefile】- 5 / Makefile 內建變數 -「$@」, 「$^」, 「$<」, 「$* 」,「$? 」
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡! 】
如果喜歡我的文章,請幫我在下方【按五下Like 】 (Google, Facebook 免註冊 ),會由 「LikeCoin 」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢 」哦!