Mkaefile的基本編寫

2021-08-10 21:36:39 字數 2643 閱讀 2957

makefile的出現

什麼是makefile,有什麼欲求導致makefile的出現?

現實要求:

在實際開發中,不可能把所有程式放在乙個.c檔案裡,否則會使**臃腫,功能劃分不明確,不利於程式設計師看**。

即使做到了模組、功能、型別的劃分,把它們放在不同的.c檔案裡,但如果只是改了乙個檔案,整個可執行的檔案就要重新編譯。(使工作量增加,出錯率增加)

makefile的優勢

在makefile裡,我們可以根據自己對模組、型別、功能的需要,指定編譯規則==》指定哪些檔案要先編譯(比如標頭檔案),哪些檔案要後編譯,哪些檔案要重新編譯(如修改過的檔案)

優勢:①減少了不必要的編譯錯誤②可以實現自動化編譯,只需要在終端輸入乙個make指令,就可以把所有的.c檔案根據makefile規則編譯成可執行檔案。

makefile規則

格式:[target]:[prerequisites]

(tab) [command]

target(目標檔案):可以是.o檔案也可以是可執行檔案。

prerequisites:是要生成target檔案所需要的檔案。

command:把prerequisites生成target的命令。

就是說,當prerequisites中有檔案比target中的檔案新時,就會執行command規定的命令。

例:有add.c sub.c main.c 三個檔案,要生成名字為demo的可執行檔案。

demo:add

.osub

.o main.o

gcc add

.osub

.o main.o \

-o demo

add.o:

add.c

gcc add

.c -o add

.osub.o:

sub.c

gcc sub

.c -o sub

.omain.o:main.c

gcc main.c -o main.o

.phony:clean

clean :

rm -f add

.osub

.o main.o

makefile的變數

obj=main.o

add.o

sub.o

cc=gcc

demo:$(obj)

$(cc) $(obj) \

-o demo

add.o:

add.c

$(cc) add

.c -o add

.osub.o:

sub.c

$(cc) sub

.c -o sub

.omain.o:main.c

$(cc) main.c -o main.o

.phony:clean

clean :

rm -f $(obj)

makefile中包含了5樣:生成規則、隱晦規則、變數定義、檔案指示和注釋

隱晦規則

make支援自動推導功能,只要make看到乙個.o檔案它就會把同名的.c檔案放在依賴關係中,並且command也會自動推導出來。

obj=main.o

add.o

sub.o

cc=gcc

demo:$(obj)

$(cc) $(obj) \

-o demo

add.o:

add.c

sub.o:

sub.c

main.o:main.c

.phony:clean

clean :

rm -f $(obj)

清空.o檔案件

有利於重新編譯,也利於保持檔案的清潔

這是標準格式:

.phony

:clean

clean :

rm -f $(

obj)

一般格式:

clean :

rm -f $(obj)

萬用字元的使用

萬用字元可以使我們的makefile簡化

萬用字元有 * 、? 、… 、

*.c:表示所有 字尾為.c 的檔案。

*:表示*

obj=*.o 

cc=gcc

demo:$(obj)

$(cc) $(obj) \

-o demo

add.o:

add.c

$(cc) add

.c -o add

.osub.o:

sub.c

$(cc) sub

.c -o sub

.omain.o:main.c

$(cc) main.c -o main.o

.phony:clean

clean :

rm -f $(obj)

NIO基本編寫

一 編寫server端 1 public class server implements runnable catch ioexception e 26 2728 override 29public void run 51 8 如果為可讀狀態 52if key.isreadable 55 9 寫資料...

編寫hashCode 的基本指導

1.給int變數賦予某個非零值常量,比如17.2.位物件內每個有意義的域f 既每個可以做equals 操作的域 計算出乙個int雜湊碼c.boolean c f?0 1 byte char short或int c int f long c int f f 32 float c float.float...

編寫MarkDown(MD)文件的基本語法

個人對md的觀點 基本語法 對html語法的支援 在使用github之前,我很少接觸markdown文件。在github隨處可見的readme.md就是md格式的檔案,我認為md語法比較人性化,用記事本就可以寫,但如果想即時預覽寫出的效果就要使用專業軟體了。這裡介紹一些常用的markdown語法。m...