Makefile的偽目標

来源:http://www.cnblogs.com/linhaostudy/archive/2017/07/18/7200629.html
-Advertisement-
Play Games

1、Makefile偽目標的格式: 2、Makefile偽目標的作用: 第一種情況: 如果我們需要書寫這樣的一個規則:規則所定義的命令不是去創建目標文件,而是通過make命令行明確指定它來執行一些特點的命令,就像例題中的clean。當文件夾中沒有clean這個文件的時候,我們輸入“make clea ...


1、Makefile偽目標的格式:

.PHONY : clean
clean:     rm xxxx

 

 

 

2、Makefile偽目標的作用:

第一種情況:

如果我們需要書寫這樣的一個規則:規則所定義的命令不是去創建目標文件,而是通過make命令行明確指定它來執行一些特點的命令,就像例題中的clean。當文件夾中沒有clean這個文件的時候,我們輸入“make clean”能按照初衷執行,但是一旦文件夾中出現clean文件,我們再次輸入“make clean”,由於這個規則沒有任何依賴文件,所以目標被認為是最新的而不去執行規則所定義的命令。所以rm命令不會被執行。為瞭解決問題,我們將目標clean定義成偽目標。

clean:
  rm xxxx

如果同一個目錄下有一個clean文件,那麼  make clean的動作將不會執行rm動作;

所以,增加.PHONY偽目標的使用的話,就會忽略目錄下clean這個文件,直接執行rm動作;

 

 

第二種情況:

偽目標的另一種使用場合時在make的並行和遞歸執行過程中。

SUBDIRS=foo bar baz
        Subdirs:
                for dir in $(SUBDIRS)
                do
                $(MAKE) –C $$dir
                done

 

如果這樣寫,會出現幾個問題:

1、 當子目錄執行make出現錯誤,make不會退出;

2、 使用這種shell的迴圈方式時,沒有用到make對目錄的並行處理功能。

有了偽目標就可以解決上面的兩個問題。

SUBDIRS=foo bar baz
        .PHONY:subdirs $(SUBDIRS)
        subdirs: $(SUBDIRS)
        $(SUBDIRS):
                $(MAKE) –C $@

其中subdirs模板表示要編譯多個子目錄中的工程。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.KILL掉系統里的MySQL進程; killall -TERM mysqld 2.用以下命令啟動MySQL,以不檢查許可權的方式啟動; mysqld --skip-grant-tables & 3.然後用空密碼方式使用root用戶登錄 MySQL; MySQL -u root 4.修改root用戶 ...
  • 開啟回收站RECYCLEBIN=ON,預設開啟ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;一、從回收站還原表還原刪除的表和從屬對象。如果多個回收站條目具有相同原始名稱,則:使用系統生成的唯一名稱來還原特定版本使用原始名稱時,還原的表遵循後進先出(LIFO... ...
  • 在資料庫開發過程中,字元串和關係表的轉化是一項基本技能。當字元串中存在分隔符時,有時將其轉換成關係表數據,和其他數據表進行join查詢,出現這種情況,是因為沒有遵守關係資料庫的設計範式,沒有把字元串拆分成原子項存儲,也有可能是數據傳參數;有時會遇到相反的情況,需要將關係表的相關數據拼接成一個字元串顯 ...
  • `React Native iOS RN`是使用腳本語言編寫的,實現了“解釋執行”的方式,而這種執行方式的修改只需替換腳步即可,不需要重新發佈程式,熱更新的方式極大的方便了迭代開發。 今天我們選擇的熱更新組件是 ,這是國內開發的,功能類似 (`CodePush Pushy`支持增量更新,最大化的降低 ...
  • Redis是一個Key Value資料庫。Redis有5種數據類型:字元串、列表、哈希、集合、有序集合。而字元串的底層實現方法之一就是使用sds。以下描述中請讀者註意區分sds是指簡單動態字元串這一數據結構(用大寫表示)還是sdshdr頭部中buf數組的起始地址(用小寫表示)。 SDS源碼 如下源碼 ...
  • SQL圖書管理系 0.表設計 b_user_information 列名 數據類型 約束 auto_number bigint(20) auto_increment user_id varchar(20) not null unique key user_name varchar(50) not n ...
  • 市面上有一些初學者的誤解,他們拿spark和hadoop比較時就會說,Spark是記憶體計算,記憶體計算是spark的特性。請問在電腦領域,mysql,redis,ssh框架等等他們不是記憶體計算嗎?依據馮諾依曼體繫結構,有什麼技術的程式不是在記憶體中運行,需要數據從硬碟中拉取,然後供cpu進行執行?所有 ...
  • sync是Linux系統下的文件同步和數據傳輸工具,可用於同步文件、代碼發佈 1.安裝. yum install -y xinetd yum insatll -y rsync 2.配置 打開rsync功能vim /etc/xinetd.d/rsync uid = nobody #目錄或文件的屬主屬組 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...