make命令的選項和參數(shù):
-k:它的作用是讓make命令在發(fā)現(xiàn)錯誤時仍然繼續(xù)執(zhí)行,而不是在檢測到第一個錯誤時就停下來。
-n:它的作用是讓make命令輸出將要執(zhí)行的操作步驟,而不真正執(zhí)行這些操作
-f :它的作用是告訴make命令將哪個文件作為makefile文件。如果未使用這個選項linux命令,標準版本的make
命令將首先在當前目錄下查找名為makefile的文件linux命令,如果該文件不存在,它就會查找名為Makefile的文件。
但如果你是在linux系統(tǒng)中,你使用的可能是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中:
myapp: main.o 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
這表示的是myapp依賴于main.o、2.o和3.o,而main.o依賴于main.c和a.h,等等
如果想要一次創(chuàng)建多個文件,你可以使用all。
all:myapp myapp.h
如果未指定一個all目標,則make命令將只創(chuàng)建它在文件makefile中找到的第一個目標
2、規(guī)則
makefile文件的第二個是規(guī)則,它們定義了目標的創(chuàng)建方式。在上節(jié)的例字中,當make命令確定
需要重建2.0時,它具體應該使用哪條命令呢?看上去只需使用命令gcc -c 2.c就夠了,但是如果
需要指定頭文件目錄,或者為了今后的調(diào)試需要設置符號信息選項又該怎么做呢?這就需要makefile
文件中明確定義一些規(guī)則。
一個簡單的makefile文件:
myapp: main.o 2.o 3.o
gcc -o myapp main.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文件
all: myapp
#which compiler
CC = gcc
#包含文件的位置在哪里
INCLUDE = .
#發(fā)展選擇
CSLAGS = -g -Wall -ansi
#釋放選項
#CFLAGS = -O -Wall -ansi
myapp: main.c 2.o 3.o
$(CC) -o myapp main.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
內(nèi)置宏的用法:
宏 定義
$? 當前目標所依賴的文件列表中比當前目標文件還要新的文件
$@ 當前目標的名字
$< 當前依賴文件的名字
$* 不包括后綴名的當前依賴文件的名字
-:告訴make命令忽略所有錯誤
@:告訴make在執(zhí)行某條命令前不要將該命令顯示在標準輸出上
上一個教程:Blog of Chauncy Wang
下一個教程:linux命令后添加 exit 0什么意思