關於makefile自動生成依賴性 sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' <$@.$$$$ > $@ 的解釋


這個語句分為好幾層,我們一層一層來看

1. sed 's,\($*\)\.o[ :],\1.o $@ : ,g' <$@.$$$$ > $@ 

首先看加粗這一層,$@表示目標參數中的.d文件, ‘<’ 將.d文件的內容交給sed處理. $@.$$$$是一個臨時文件,.d文件中的內容輸入到臨時文件,再由臨時文件輸入到.d文件中(只有這樣.d文件才能有數據)

2. sed 's,\($*\)\.o[ :],\1.o $@ : ,g' <$@.$$$$ > $@

這個 ’>‘ 將 sed處理之后的內容再返回給.d文件

3. 現在具體分析sed中的內容

由於sed中的分隔符可以自定義,這里的分割符為','逗號,逗號將整個語句分為四個部分

3.1 s,\($*\)\.o[ :],\1.o $@ : ,g

表示sed文件處理方式為替換文件內容,s,a,b 表示將a替換為b

3.2 's,\($*\)\.o[ :],\1.o $@ : ,g

\(\)表示保存文件的內容,$*表示文件名中除后綴名以外的文件名,同時可以使用\1來表示

.o 表示與 文件名中的.o匹配

[ :]中間是一個空格和一個分號,[]表示與其內容中的某一個字符匹配,因為.d中內容一般為 a.o : a.c a.h b.h之類的內容,[]中的內容對應':'以及左右的空格的內容。因此[ :]對應.o后面的空格或是分號。

3.3 's,\($*\)\.o[ :],\1.o $@ : ,g' 

 /1.o表示前面的$*,也就是a.o ;$@表示 a.d也就是.d文件,然后就是' : '

3.4 's,\($*\)\.o[ :],\1.o $@ : ,g'

g 獲得內存緩沖區的內容,並替代當前模板塊中的文本;

因此上述的內容就是將 a.o : a.c a.h b.h 替換為 a.o a.d : a.c a.h b.h

 

 

此上。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM