1. 程式人生 > >Makefile 規則的執行優先順序(不討論隱藏規則內的優先順序)

Makefile 規則的執行優先順序(不討論隱藏規則內的優先順序)

轉載請註明出處,謝謝

宣告:由於不清楚makefile的匹配規則演算法,下面的結論都是自己思考後測試的結果,如若有出錯,還請指出

=============================================================

結論:(優先順序由上往下遞減)
顯式規則:

完全匹配

半匹配

完全萬用字元匹配

隱藏規則:

(據說按照隱藏規則的順序,測試發現,能一步達成的優先順序高於分多步達成,

例如:%:%.c > %.o:%.c + %:%.o)

需要補充說明的是:顯式規則若無命令,則此規則不參與匹配優先順序

==============================================================

以下為驗證過程:

<span style="font-size:18px;">.PHONY:all clean

all:quick_sort bubble_sort
#匹配1
%_sort: %_sort.c
	@echo "matching [email protected]"
	@echo 'in %_sort'
#匹配2
%:%.c
	@echo "matching [email protected]"
	@echo 'in %'
#匹配3
quick_sort:quick_sort.c
	@echo "matching [email protected]
" @echo 'in quick_sort' clean: $(RM) *.o bubble_sort quick_sort</span>

輸出結果:

$make
matching quick_sort
in quick_sort
matching bubble_sort
in %_sort
$

結論:

顯式規則中並不是按照上下文順序匹配,因為匹配quick_sort時3個目標每一個都能匹配,而make選擇了3最大匹配。匹配bubble_sort時,目標1、2均能匹配,然後make選擇了2半匹配(%_sort)

因此,顯式匹配中,按照最大匹配優先,其次為半匹配,最後為完全萬用字元匹配

由於顯式規則能過載、取消隱藏規則(測試見我的另外一篇部落格),因此顯式規則優先順序 > 隱藏規則

相關推薦

win10操作虛擬機器中hadoop IntelliJ IDEA直接執行程式碼需要打jar包

IntelliJ IDEA 2018.2.3 (Ultimate Edition)+Maven VMware中CentOS6.5 Hadoop2.7.1 上課的時候老師使用的是Eclipse編譯器,使用了 eclipse-hadoop的外掛。可以直接在eclipse

禁用瀏覽器滾動事件隱藏其滾動條

function unScroll() { var top = $(document).scrollTop(); $(document).on('scroll.unable', function(e) { $(document).scrollTop(top);

Makefile 規則執行優先順序討論隱藏規則優先順序

轉載請註明出處,謝謝 宣告:由於不清楚makefile的匹配規則演算法,下面的結論都是自己思考後測試的結果,如若有出錯,還請指出 ============================================================= 結論:(優先順序由上

13. Roman to Integer規則

題目 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from

int與long 兩種資料型別有什麼區別?|__int64固定大小為8位元組,執行環境的CPU和作業系統位數影響

筆記原創: 蘭特 聯絡郵件: [email protected] 系統平臺:linux平臺,gcc 有這樣的一個程式,是關於使用隨機函式rand()的: #include <stdio.h> #include <stdlib.h> #include <time.h> int

使用linux的shell腳本實現在當前行重復動態顯示時間等字符串信息另起新行

shell 實現 時間 lin 裏的 cnblogs find fin suse11 ###本腳本在Suse11sp2當中驗證正確 #!/bin/sh while ((1)) do echo -ne "\r$(d

為什麽使用 Arrays.asList得到的集合,使用remove( )和 add( )方法會拋出unsupportedoperationexception支持操作異常

操作 err move lan 16px exceptio operation amp span  這是由於:    Arrays.asList() 返回java.util.Arrays$ArrayList, 而不是ArrayList。 Arrays$ArrayList

KendoUI關於Grid頁面刷新賦值修改數據庫

fresh 修改 png row -1 event var 技術 remove 1.Grid頁面某個字段修改賦值(不用刷新) var row = GG.data("kendoGrid").select(); var data = GG.data("kend

linux實戰考試題:批量創建用戶和密碼能使用循環

linux 實戰 批量創建10個用戶,並且設置隨機8位密碼,要求不能用shell的循環(例如:for,while等),只能用linux命令及管道實現。方法1:[[email protected]/* */ /]# echo stu{01..10}|tr " " "\n"|sed -r ‘s

Android中關於項目中對Thread的管理是線程池

lan ole 問題 直接 per dma 之前 ron move 背景 項目中對於一些並不復雜的耗時操作,比如計算,不頻繁操作數據庫等,因為沒必要使用線程池,所以之前項目會直接使用new Thread的方式,時間一長,回頭再看,原來new Thread之處已經很多

微信瀏覽器禁止頁面下拉查看網址影響頁面內部scroll

完美解決 comm -i con js代碼 uil from () -c 此類事件是手機touchmove默認事件行為,可以通過js代碼隱藏事件: $(‘body’).on(‘touchmove’, function (ev

從尾到頭打印鏈表改變鏈表結構

pri 鏈表 create 打印 main creat ack UC list /* * 從尾到頭打印鏈表.cpp * * Created on: 2018年4月7日 * Author: soyo */ #include<iostream>

Selenium_python自動化跨瀏覽器執行測試簡單多線程案例

思路 IT port 情況 art 百度一 吸引 find 導致 發生背景:     跨瀏覽器測試是功能測試的一個分支,用以驗證web應用在不同瀏覽器上的正常工作,通常情況下,我們都期望web類應用能夠被我們的用戶在任何瀏覽器上使用,例如有的人喜歡IE瀏覽器上使用,有的人喜

socket實現兩臺FTP服務器指定目錄下的文件轉移依賴第三方jar包

gets util new ram ali ftp文件 turn tps lap 通過socket實現兩臺FTP服務器指定目錄下的文件轉移,其中包含了基礎了ftp文件列表顯示、上傳和下載。這裏僅供學習用,需掌握的點有socket、ftp命令、文件流讀取轉換等 完整代碼如下:

將數組轉化為json字符串使用json_encode函數

enc pan cti 數組轉化為json div UNC key lse public 將數組轉化為json字符串(不使用json_encode函數) 1 public function arrayToJson($arr,$jsonStr=‘‘){ 2

python 代碼審計-命令執行漏洞自己編寫的代碼

[1] 問題 錯誤 code 端口掃描 iter turn command att python 代碼審計-命令執行漏洞(自己編寫的代碼) 0x00 源代碼 def execute(request): context ={} ip= request.POS

spring-boot configuration processor 讓配置檔案有提示包括自定義的

IDEA新建spring-boot時  勾選該項   勾選該項後pom.xml就會出現 <dependency> <groupId>org.springframework.boot</groupId> <

MapReduce 程式執行演示示例PI程式 wordcount程式

你說的9000埠應該指的是fs.default.name或fs.defaultFS(新版本)這一配置屬性吧,這個屬性是描述叢集中NameNode結點的URI(包括協議、主機名稱、埠號) 50070其實是在hdfs-site.xml裡面的配置引數dfs.namenode.http-address,

修改RAC 的IP地址 包含private IP地址

環境 RDBMS 11.2.0.4  修改RAC 的IP地址,包括public、VIP 、SCAN 等IP。不包含private IP 。 步驟  1 關閉庫,監聽,CRS等 2 修改/etc/hosts 3 OS層面修改IP 4 啟動CRS  5

RMAN遷移數據庫改變文件目錄

ins implicit open fix edi pattern created sta 備份 1、目標庫創建相應目錄mkdir -p /u01/app/oracle/oradata/orclmkdir -p /u01/app/oracle/fast_recovery_a