Linux系統C語言--makefile1

make: Makefile或makefile文件

make -f othername

make --file=othername     這兩個命令使用其他名字的文件make

 

makefile寫法:

target: components[;rule]

<TAB>rule

說明:target依賴於components,其生成規則定義於rule。components中有一個文件比target新,rule就執行

 

例如:

main: main.o

    gcc -o $@ $^

..c.o:

    gcc -o $<

說明:以上後三行是隱含規則。只不過隱含規則裏是CC,首先要CC=gcc

兩條隱含規則:

$(CC) $(CFLAGS) $@ $<

$(CC) -c $< $@

 

1).PHONY:clean

   clean:

       -rm -f *.o

說明:.PHONY說明clean是僞目標文件

 

2)include filename  把別的makefile文件包含進來,使用空格分隔

 

3)例子:

objects=foo.o far.o

all: $(objects)

$(objects): %.c

    $(CC) -c $(CFLAGS) $< -o $@

說明:$(objects)表示變量;

%用來匹配0個或若干個字符

 

4)-  如執行本命令有錯誤,繼續執行不退出

 本命令始終被執行

 執行本命令不打印本命令內容

 

5)makefile中第一個目標文件爲終極目標

 

6)多個文件使用同一個頭文件的簡單寫法:

module1.o module2.o module3.o: head.h

 

7)vpath %.h ../headers    空格或:分隔,指定頭文件位置

或者使用VPATH=……

vpath   清除所有

vpath<pattern>  清楚該模式

 

8)\續行,但是\與新的一行之間不能有空白符

 

9)根據隱含規則,以下等價

a)module1.o: head1.h

b) mudule1.o: module1.c head1.h

       gcc -c module1.c -o module1.o

 

10)變量名 賦值符 變量值

賦值符包括:

=

:=  定義時展開

?=  沒有值則賦值

+=  追加

 

11)預定義變量: CC  CFLAGS  PWD

 

12)自動變量:

$^  所有依賴文件名

$<  第一個依賴文件名

$@  目標文件名 

$*  目標文件去後綴名

$?  比目標文件新的依賴文件列表

 

這些只能出現在命令裏,出現在文件列表裏爲$$^之類

 

13)ifeq   ifneq  ifdef  ifndef

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章