第十三章 和其它版本的相容

2021-05-28 02:28:18 字數 1509 閱讀 7279

gnu make存在一些和其它版本make不相容的功能,其它版本make具有的部分功能,在gnu make中也沒有實現。posix.2 標準 (ieee standard 1003.2-1992)沒有規定以下的這些特點需要在make中實現。

ø       形如「file((entry))」的目標代表靜態庫檔案「file」的乙個成員。它的成員不是用檔名,而是乙個定義了連線符號「entry」的.o檔案。gnu make沒有支援它的原因是:書寫這樣的規則要求書寫者對靜態庫內部符號索引表熟悉。gnu make對靜態庫成員的更新可參考 第十一章

ø        以字元「~」 結尾的字尾在system v make的字尾規則中有特別的含義;它指的是對應目標檔案的依賴檔案是沒有「~」的sccs 檔案。例如,system v的字尾規則「.c~.o」含義是:「n.o」是從sccs檔案「s.n.c」中提取的。為了完全覆蓋,可能需要一系列的這樣的規則。gnu make對它的處理是:使用兩個模式規則從sccs檔案抽取乙個檔案,這兩個模式規則形成乙個隱含規則鏈。可參考 10.4 隱含規則鏈 一節

ø        在system v 和 4.3 bsd make中,通過「vpath」指定的目錄搜尋(參考 4.5 目錄搜尋 一節)的檔案,對應的檔名需要經過make改變後才加入對應規則到命令列中。gnu make使用自動環變數來實現這一功能。

ø        在一些unix的make中,自動化變數「$*」(參考 10.5.3 自動化變數 一節)作為規則的依賴時,具有奇怪的特徵:它會被擴充套件為該規則的目標全名。它和gnu make中「$*」的含義完全不同。 ø       

ø        在一些unix的make中。會為所有目標搜尋隱含規則,不僅僅對那些沒有命令的目標。就是說如果我們的規則時這樣的話:

foo.o:

cc -c foo.c

這種版本的make就會認為目標「foo.o」的依賴檔案是「foo.c」。

我們認為make的這種處理方法容易導致混亂。因為makefile已經對目標有明確的定義,而在為目標搜尋隱含規則是不合邏輯的。因此gnu make沒有支援這種方式的規則處理。

ø        gnu make不包含任何編譯以及預處理efl程式的內嵌隱含規則。如果其它那種版本的make已經實現了這個特性,我們會很樂意地把它加入到gnu make支援的特性中。ø       

ø        在 svr4版本的make中,乙個沒有命令的字尾規則被作為乙個空命令規則來處理。例如:

.c.a:

這個規則將覆蓋內嵌的目標為「.c.a」的規則。

gnu make對這個規則的行為是為目標.a新增乙個依賴型別.c。上述的行為在gnu make中的實現是:

.c.a: ;

ø        一些版本的make 在呼叫shell時使用「-e」引數告訴shell,在除執行「make -k」時,一旦命令列執行失敗(返回狀態非0)就立即退出。我們認為對於不同的命令的執行結果要視情況來處理。因此gnu make的沒有支援這種方式。

第十三章 併發

13.1 動機 13.2 基本執行緒 如果必須要控制現成的執行順序,最好是根本不用執行緒,而是自己編寫特定順序彼此控制的協作子程式。繼承thread類或者實現runnable介面。內部類實現。13.3 共享受限資源 1 如果要對類中的某個方法進行同步控制,最好同步所有方法。如果忽略了其中乙個,通常很...

第十三章 類

1.類簡單地說是乙個性的資料型別。類當中有資料成員,和成員函式。類的基本思想就是體現出資料的抽象和封裝。2.這裡只需要說明乙個問題即可 就是類成員函式的const型別 class screen public const int get const int i const int j const 這裡...

第十三章 事件

1 事件的作用 事件是對委託的封裝,如同屬性對字段的封裝。封裝後可以在委託上實現更複雜的邏輯。1.1 封裝訂閱 委託允許使用 對其進行賦值,但向乙個委託例項賦值多個委託時,使用 會造成覆蓋之前的委託。事件只支援 或 對事件進行賦值 1.2 封裝發布 委託可以在其他類進行訪問,而事件可以確保只有包容類...