makefile學習筆記2
1.makefile書寫規則:
規則包括兩個部分:依賴關係和生成目標的方法
makefile中第一條規則中的目標將被確立為最終目標,其他的目標都是被這個目標所連帶出來的,如果第一條規則中的目標有很多個,那麼,第一個目標灰成為最終目標。
main.o:main.cmain.h
cc -g main.c//說明如何生成main.o這個檔案
上面例子說明:main.o依賴於main.c和 main.h生產的目標。main.c和main.h是目標所依賴的原始檔。
檔案的依賴關係發生條件:1.main.o檔案不存在
2.main.c和mian.h檔案的日期要比main.o的檔案日期要新。
規則告訴make兩件事,檔案的依賴關係和如何成成目標檔案
=========================================================================================================================
2.在規則中使用萬用字元:
make支援三個萬用字元:“*”,“?”,“[...]”
擴充套件知識:
wildcard:擴充套件萬用字元(萬用字元(wildcard)用來指定一組符合條件的檔名)
notdir:去除路徑
patsubst:替換萬用字元
--------------------------------------------------------------------------------------------------------------------------------------------------------------
例子:
在test目錄下,建立a.c和b.c兩個檔案,在sud目錄下,建立sa.c和sb.c兩個檔案。建立一個簡單的Makefile:
src = $(wildcard *.c ./sub/*.c)#將./下和./sub目錄下的所有的.c檔案,全部展開
dir = $(notdir $(src))#將./和./sub目錄下的.c檔案去掉路徑名。
obj = $(patsubst %.c,%.o,$(dir))#將./和./sub目錄下的全部.c檔案替換成.o檔案
all:
@echo "src的列印結果是:$(src)"
@echo "dir的列印結果是:$(dir)"
@echo "obj的列印結果是
@echo "××××××××列印完畢××××××××××"
列印結果:
src的列印結果是:a.cb.c ./sub/sa.c ./sub/sb.c
dir的列印結果是:a.cb.c sa.c sb.c
obj的列印結果是:a.ob.o sa.o sb.o
××××××××列印完畢××××××××××
用函式wildcard得到當前目錄下的所有c語言源程式檔名的方法 SRC=$(wildcard *.c)
如果還要要獲得子目錄sub下的檔案,則可寫成:SRC=$(wild *c) $(wildcard ./sub/*.c )
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
正常情況下make會先列印每一條命令語句,然後再執行,這叫回聲。在語句前面加上"@",關閉回聲。就像上面幾句echo語句前加了@,所以沒有列印語句。
==========================================================================================================================
3.模式匹配符
Make命令允許對檔名進行類似於正則運算的匹配。主要用到的匹配符“%”。
---------------------------------------------------------------------------------------------------------------------------------------------------
例如:如果當前目錄下的有main.c和 foo.c兩個檔案,現在要將他們編譯為對應的物件檔案。
%.o : %.c
相當於:
main.o : main.c
foo.o : foo.c
------------------------------------------------------------------------------------------------------------------------------------------------------
使用匹配符%,可以將大量同類型的檔案,只用一條規則就完成構建
==========================================================================================================================
4.變數和賦值符
Makefile一共提供了四個賦值運算子:=、:=、?=、+=。
=:在執行時擴充套件,允許遞迴擴充套件
:=:在定義時擴充套件
?=:只有在該變數為空時才設定值
+=:將值追加到變數的尾端
Makefile允許使用等號自定義變數。在呼叫時要用 $()括起來。在呼叫shell變數時美元符號前,再加一個美元符號,這是因為Make命令會對美元符號轉義。
例如:
a= hello world
test:
@echo $(a)
@echo $$HOME
輸出結果:
hello world
/home/ubuntu
==========================================================================================================================
5.內建變數
Make命令提供一系列內建變數。$(CC)指向當前使用的編譯器,$(MAKE)指向當前使用的make工具
===========================================================================================
6.自動變數
[email protected] :指當前目標,Make命令當前構建的那個目標。
例如:
a.txt b.txt:
touch [email protected]
執行結果:
在當前目錄下建立了a.txt 和b.txt兩個檔案。
所以上面的相當於:
a.txt:
touch a.txt
b.txt:
touch b.txt
2.$< :指代第一個前置條件
例如:a: b c那麼$<指代a
3.$^:指代所有的前置條件
例如:a: b c那麼$<指代a b
4.$? :指代比目標更新的所有前置條件,之間以空格分隔.
例如:a: b c如果b的時間比a的時間新。那麼$?指代b
5.$* :指代匹配符%匹配的部分
例如:%匹配a.txt中的a,那麼$*指代a
6.$(@D)和$(@F) : $(@D):指向[email protected]的目錄
$(@F):指向[email protected]的檔名
例如:[email protected]指代 test/a.c則:$(@D)指代test$(@F)指代a.c
7.$(>D)和$(>F):$(>D):指向$>的目錄
$(>F):指向$>的檔名
相關推薦
makefile學習筆記2
1.makefile書寫規則: 規則包括兩個部分:依賴關係和生成目標的方法 makefile中第一條規則中的目標將被確立為最終目標,其他的目標都是被這個目標所連帶出來的,如果第一條規則中的目標有很多個,那麼,第一個目標灰成為最終目標。 main.o:main.cma
學習筆記2
建議 coo line 長度 cape 發展 div+css 加載 不兼容 雙標簽: <html><head><title><body><table><tr><td><span>
Jmeter學習筆記2-原件作用域與執行順序
校驗 height sse proc tro 有效 收集 技術分享 控制 1.元件的作用域 (1)配置元件(config elements):會影響其作用範圍內的所有元件。 (2)前置處理程序(per-processors):在其作用範圍內的每一個sampler元件之
python學習筆記2:字符串
nbsp 大小 alpha .com format 大小寫 fin 判斷大小 key python學習筆記2:字符串 總結:字符串是不可變變量,不能通過下標修改其值 字符串的方法都不會改變字符串原來的值,而是新生成一個字符串 一、3種寫法——單引號,雙引號,三引號
java 學習筆記2 面向對象(上)
awr ges abs nal mage 有效 面向對象 ima col 類和對象 類是某一批對象的抽象,可以把類理解成某種概念。對象是一個具體存在的實體。類和對象是面向對象的核心。 類定義的是多個實例的特征,類不是具體存在,實例才是具體存在。 定義類(class)的語法:
Git學習筆記2——Git版本庫的創建
文件添加 不但 提交 linu 記錄 例子 blog 所有 out 創建一個版本庫非常簡單,首先,選擇一個合適的地方,創建一個空目錄: $ cd s: $ cd Git_Learing $ pwd s/Git_Learning pwd命令用於顯示當前目錄。在我的wind
Hadoop 學習筆記 (2) -- 關於MapReduce
規模 pre 分析 bsp 學習筆記 reduce 數據中心 階段 圖例 1. MapReduce 定義: 是一種可用於數據處理的編程的模型 優勢: MapReduce 本質上是並行運行的,因此可以將大規模的數據分析任務,分發給任何一個擁有足夠多機器
算法導論學習筆記(2)-歸並排序
mar 今天 iostream 介紹 font 額外 遞歸 size dsm 今天學習了算法導論上的歸並排序算法,而且完畢了在紙上寫出偽代碼,曾經就學過歸並可是理解的不夠透徹。以 前還一直困惑:為什麽明明歸並排序比快排的時間復雜度更穩定。為什麽庫函數不用歸
ESP8266學習筆記2:實現ESP8266的局域網內通信
pro reg sad net nts 理解 模式 curl ont 上一篇熟悉了編譯下載操作。如今就以實例入手。project使用的是IOT_DEMO,據DEMO文檔能夠知道ESP8266初始工作模式為softAP+station共存的模式。於是這邊我們就先以soft
(MYSQL學習筆記2)多表連接查詢
mysql3種連接方式的區別:INNER JOIN(內連接,或等值連接):獲取兩個表中字段匹配關系的記錄。LEFT JOIN(左連接):獲取左表所有記錄,即使右表沒有對應匹配的記錄。RIGHT JOIN(右連接): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。3個表連接查詢
JavaSE中Collection集合框架學習筆記(2)——拒絕重復內容的Set和支持隊列操作的Queue
%d eof 是否 face 出錯 can 3.2 lean als 前言:俗話說“金三銀四銅五”,不知道我要在這段時間找工作會不會很艱難。不管了,工作三年之後就當給自己放個暑假。 面試當中Collection(集合)是基礎重點.我在網上看了
Linux學習筆記2-安裝遠程連接客戶端SecureCRT
下載 linux log 學習 文件 spa 客戶端 pre 百度下載 1、百度下載SecureCRT8.0版本 2、安裝,破解 3、百度使用教程,使用SecureCRT連接Linux系統,並操作 4、安裝rzsz,(這樣就能直接把文件復制到Linux系統裏了) yum
C++學習筆記----2.4 C++對象的內存模型
影響 sni 創建 clas esp cheng lac -c 如果 轉載自:http://c.biancheng.NET/cpp/biancheng/view/2995.html點擊打開鏈接 當對象被創建時,編譯器會為每個對象分配內存空間,包括成員變量和成員函數。直觀的認
C++學習筆記----2.4 C++引用在本質上是什麽,它和指針到底有什麽區別
times 數據 添加 eof 相關 參數 副本 span 符號 從概念上講。指針從本質上講就是存放變量地址的一個變量,在邏輯上是獨立的,它可以被改變,包括其所指向的地址的改變和其指向的地址中所存放的數據的改變。 而引用是一個別名,它在邏輯上不是獨立的,它的存在具有依附性,
java學習筆記(2)
區別 ner false blog == imp 表達 知識 最大值 java基礎知識: 1:運算符 (1)算術運算符 A:+,-,*,/,%,++,-- B:+的用法 a:加法 b:正號 c:字符串連接符 C:/和%的區別 數據做除
NetApp DataONTAP 集群模式 學習筆記2
netapp dataontap 集群模式WAFL工作原理基本結構如下圖:客戶端發送寫請求控制器1將數據寫到系統內存和NVRAM中,並將數據同步到控制2上控制器2發送確認給控制器1控制器1發送確認給客戶端另一個客記端發送寫請求控制器1將數據寫入系統內存和NVRAM中,並同步給控制器2控制器2發送確認給控制器1
python學習筆記2
www. 內部 必須 class print 依次 not 函數對象 return 學習廖雪峰的官方網站https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
36、我的C#學習筆記2
c#類是一種數據結構,它可以封裝數據成員、函數成員和其它的類。類是創建對象的模板。C#中所有語句都必須位於類內。因此,類是C#語言的核心和基本構成模塊。C#支持自定義類,使用C#編程就是編寫自己的類來描述實際需要解決的問題。類就好比是醫院的各個部門,如:內科、骨科、泌尿科、眼科等,在各科室中都有自己的工作方法
ElasticSearch學習筆記--2、ES相關配置
last 學習 -- code logs 相關數 clas 名稱 config 1、配置文件 ES的配置文件位置:config/elasticsearch.yml可以直接搜索elasticsearch.yml 2、配置遠程api訪問 network.host: 192
SpringCloud學習筆記(2)——Ribbon
cnblogs logs 所有 客戶 custom err 應用 erl list 參考SpringCloud官網第16、17章 16. Client Side Load Balancer: Ribbon Ribbon是一個客戶端的負載均衡器,它提供對大量的HTTP和TCP