make命令的選項和引數:
-k:它的作用是讓make命令在發現錯誤時仍然繼續執行,而不是在檢測到第乙個錯誤時就停下來。
-n:它的作用是讓make命令輸出將要執行的操作步驟,而不真正執行這些操作
-f :它的作用是告訴make命令將哪個檔案作為makefile檔案。如果未使用這個選項,標準版本的make
命令將首先在當前目錄下查詢名為makefile的檔案,如果該檔案不存在,它就會查詢名為makefile的檔案。
但如果你是在linux系統中,你使用的可能是gnu make,這個版本的make命令將在搜尋makefile檔案和
makefile檔案之前,首先查詢名為gnumakefile的檔案。
1、依賴關係
/*main.c*/
#include "a.h"
/*2.c*/
#include "a.h"
#include "b.h"
/*3.c*/
#include "b.h"
#include "c.h"
則我們可以在makefile中:
2.o 3.o
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
如果想要一次建立多個檔案,你可以使用all。
如果未指定乙個all目標,則make命令將只建立它在檔案makefile中找到的第乙個目標
2、規則
makefile檔案的第二個是規則,它們定義了目標的建立方式。在上節的例字中,當make命令確定
需要重建2.0時,它具體應該使用哪條命令呢?看上去只需使用命令gcc -c 2.c就夠了,但是如果
需要指定頭檔案目錄,或者為了今後的除錯需要設定符號資訊選項又該怎麼做呢?這就需要makefile
檔案中明確定義一些規則。
乙個簡單的makefile檔案:
2.o 3.o
2.o 3.o
main.o: main.c a.h
gcc -c main.c
2.o: 2.c a.h b.h
gcc -c 2.c
3.o: 3.c b.h c.h
gcc -c 3.c
$ make -f makefile1
makefile檔案中的巨集:
帶巨集定義的makefile檔案
#which compiler
cc = gcc
#包含檔案的位置在**
include = .
#發展選擇
cslags = -g -wall -ansi
#釋放選項
#cflags = -o -wall -ansi
2.o 3.o
2.o 3.o
2.o: 2.c a.h b.h
$(cc) -i$(include) $(cflags) -c 2.c
3.o: 3.c b.h c.h
#(cc) -i$(include) $(cflags) -c 3.c
內建巨集的用法:
巨集 定義
$? 當前目標所依賴的檔案列表中比當前目標檔案還要新的檔案
$@ 當前目標的名字
$< 當前依賴檔案的名字
$* 不包括字尾名的當前依賴檔案的名字
-:告訴make命令忽略所有錯誤
@:告訴make在執行某條命令前不要將該命令顯示在標準輸出上
多個目標:
#which compiler
cc = gcc
#where
to install
instdir = /usr/local/bin
#where are include files kept
include =
.#options for development
cflags =
-g-wall
-ansi
#options for release
#cflags=-o
-wall
-ansi
main.o: main.c a.h
$(cc) -i$(include) $(cflags) -c main.c
2.o: 2.c a.h b.h
$(cc) -i$(include) $(cflags) -c
2.c 3.o: 3.c b.h c.h
$(cc) -i$(include) $(cflags) -c
3.c clean:
-rm main.o 2.o 3.o
@if[-d $(instdir) ]
;\ then \
echo "installed in $(instdir)";\
else \
echo "sorry,$(instdir) does not exist";\
fi字尾和模式規則:
下面時makefile檔案的乙個片段,它用乙個新的通用規則將.cpp檔案編譯為.o檔案;
.suffixes: .cpp
.cpp.o: (c
c)−x
c++ (cc
)−xc
++
(cflags) -i(i
nclu
de)−
c (in
clud
e)−c
<
用make』管理函式庫:
#local libraries
mylib = mylib.a
$(mylib): $(mylib)(2.o) $(mylib)(3.o)
main.o:main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
clean:
-rm main.o
2.o 3.o $(mylib)
linux系統make命令用法
解釋 makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為 makefile就像乙個shell指令碼一樣,其中也可以執行操作 系統的命令。makefile帶來的好處就是 自動化編譯 一旦寫好,只需要乙個make命令,...
Makefile中的make命令使用 二
1.makefile中使用變數 可以看到 o 檔案的字串被重複了兩次,edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o gcc o edit main.o kbd.o command.o display.o...
make命令 clean命令
先先看一下什麼是makefile makefile定義了一系列的規則來指定,哪些檔案需要先編譯,哪些檔案需要後編譯,哪些檔案需要重新編譯,甚至於進行更複雜的功能操作,因為 makefile就像乙個shell指令碼一樣,其中也可以執行作業系統的命令。makefile帶來的好處就是 自動化編譯 一旦寫好...