linux中的make命令

2021-08-20 14:03:54 字數 3057 閱讀 9551

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帶來的好處就是 自動化編譯 一旦寫好...