Make file 整理

摘要:Make file 整理

基本說明

#include 
int main(void)
{
        printf("Hello World\n");
}
gcc hello.c  =>  產生a.out   輸入./a.out即可執行
gcc –c hello.c  =>  產生 hello.o 目的檔
gcc –o hello hello.o  =>  產生 hello 可執行檔  輸入./hello即可執行
 
-O:最佳化參數,-Wall:會產生詳細的編譯過程
 
gcc sin.c -lm -L/lib -L/usr/lib
-l :是『加入某個函式庫(library)』的意思,
 m :則是 libm.so 這個函式庫,其中, lib 與副檔名(.a 或 .so)不需要寫
-L 後面接的路徑是剛剛上面那個函式庫的搜尋目錄
Linux 預設是將函式庫放置在 /lib 與 /usr/lib 當中
-I/path 後面接的路徑( Path )就是設定要去搜尋相關的 include 檔案的目錄
 
製作Makefile
標的(target): 目標檔1 目標檔2
<tab>   gcc -o 欲建立的執行檔 目標檔1 目標檔2
 
main: main.o haha.o sin_value.o cos_value.o
           gcc -o main main.o haha.o sin_value.o cos_value.o -lm
clean:
           rm -f main main.o haha.o sin_value.o cos_value.o
 
LIBS = -lm
OBJS = main.o haha.o sin_value.o cos_value.o
CFLAGS=-Wall
main: ${OBJS}
        gcc -o main ${OBJS} ${LIBS}
clean:
        rm -f main ${OBJS}
 
$@:代表目前的標的(target)
gcc -o main ${OBJS} ${LIBS} 可改為gcc -o $@ ${OBJS} ${LIBS}
 
#Filename MakeFile
#this file is used for show how to use makefile
$(info start workoing)
hello: hello.c
    echo “nothing”

hello.bin: hello.c
    @echo “now make hello.bin”
    gcc hello.c –o hello.bin

.PHONY: he
    @echo “now make he”
    gcc hello.c –o hello.bin

 

$是函數呼叫符號, info是一個函數名稱,作用是輸出一段資訊,類似的資訊輸出還有warning、error兩個函數,不過error函數執行後會終止執行並退出
.PHONY關鍵字用於宣告一個目標,被.PHONY宣告的目標將總是執行其指定的命令,而如果不宣告的話,則僅當目標後面的條件變動後才執行
命令前面的@符號的作用是,不顯示被執行的命令,因為預設情況下,Make解譯器在執行命令時會列印出執行的命令
對於hello.bin目標,是當hello.c檔案被修改後,將會執行gcc命令重新對該c檔案編譯,並輸出hello.bin檔案
 
執行腳本,執行以下命令
$make  –f  Makefile  hello
 

-f參數用於指定要執行的指令檔案名稱,如果不指定檔案名稱,則解譯器會自動從目前的目錄下尋找名稱為Makefile的指令檔案