MakeFile使用 鋱可喏 新浪部落格

2021-10-10 12:14:36 字數 1913 閱讀 4944

make

命令執行時,需要乙個

makefile

檔案,以告訴

make

命令如何去編譯和鏈結程式。以下是關於

makefile

使用的幾點總結。

l $@:所有目標檔案的挨個值 l

$^:所有依賴目標的集合。

例子:main.out:main.o line1.o line2.o  

g++ -o main.out main.o line1.o line2.o 

可以替換成如下:

main.out:main.o line1.o line2.o  

g++ -o $@ $^ 

l $?:所有比目標新的依賴目標的集合。以空格分隔 l

makefile檔案結構如下:

target

可以是乙個

object file(

目標檔案

),也可以是乙個執行檔案,還可以是乙個標籤(

label

)。對於標籤這種特性,在後續的

「偽目標

」章節中會有敘述。

prerequisites

就是,要生成那個

target

所需要的檔案或是目標。

command

也就是make

需要執行的命令。(任意的

shell

命令)

示例:目標名稱:被依賴的中間檔案(如

*.o)

中間檔案(如

*.o)

:中間檔案的依賴關係(如

.cpp .h等)

命令列(如

gcc  -o

可執行檔案

*.o) l

makefile中的變數與c/c++中的巨集類似,代表了乙個文字字串,在makefile執行時,展開在所使用的地方。

objects = haha.o xixi.o (定義變數objects)

$(objects) (使用變數)

l makefile中的命令列必須以[tab]開始。 l

include 可以包含其他的makefile檔案。如」include foo.make *.mk」(包含了兩個檔案)。 l

萬用字元「~」,表示當前使用者的$home目錄。 l

大寫的「vpath」用於設定原始檔所在的目錄,如「vpaht = src:headers」(用冒號隔開不同的目錄)。 l

小寫的「vpath」是make的關鍵字,可以指定不同的檔案在不同的搜尋目錄。如「vpath %.h src」(make會在src目錄下搜尋所有的**件) l

以下命令輸出當前makefile的位置。

cd /home/chen

pwd

以下命令輸出/home/chen

cd /home/chen; pwd

l 定義變數可用符號「=」,也可以用符號」:=」。推薦使用「:=」,這種定義只能使用前面已經定義好的變數,而「=」可以使用未定義的變數,可能會產生遞迴錯誤。 l

$(var:a=b),把變數var中所有a字串結尾的「a」替換成「b」字串。 l

?=:如果被定義過,則什麼也不做。如果未被定義過,則定義為當前的賦值。 l

條件判斷示例:ifeq (引數1,引數2)…else…endif

l 「%」表示長度任意的非空字串。 l

系統中包含命令的環境變數,如「ar(靜態函式庫的打包程式,預設命令是ar),」,「cxx(c++語言編譯程式,預設是g++)」等。詳見

跟我一起寫makefile:隱含規則#.e9.9a.90.e5.90.ab.e8.a7.84.e5.88.99.e6.90.9c.e7.b4.a2.e7.ae.97.e6.b3.95

跟我一起寫makefile

跟我一起學makefile

linux

下的動態庫和靜態庫

BNF 鋱可喏 新浪部落格

bnf 以形式化的符號來描述給定程式語言的語法規則。比如 c語言的宣告語句可以用bnf這樣描述 宣告語句 型別 識別符號 型別 識別符號 數字 這一句中 宣告語句 這個非終結符被定義成了兩種形式 上面用 隔開的兩部分 同時在這裡引入了三個終結符 分號 左方括號 右方括號 型別 簡單型別 指標型別 自...

幀動畫 鋱可喏 新浪部落格

幀動畫稱為drawable animation或者frame animation。l將動畫需要的靜態幀放在res drawable目錄下。l 在res anim目錄下新建resource type為 drawable 並且rootelement為animation list的xml檔案 main 1...

socket網路程式設計 鋱可喏 新浪部落格

作為bsd unix 的程序通訊 機制,取後一種意思。通常也稱作 套接字 用於描述 ip位址 和埠,是乙個通訊鏈的控制代碼。在 internet 上的主機 一般執行了多個服務軟體,同時提供幾種服務。每種服務都開啟乙個 socket 並繫結到乙個埠上,不同的埠對應於不同的服務。socket 正如其英文...