make與makefile的幾個例子和(本身寫一下,汗!忘記了!)總結

共用的幾個源代碼文件:shell

main.c 2.c 3.capp

代碼依次爲:ide

 1 #include<stdlib.h>
 2 #include "a.h"
 3 extern void function_two();
 4 extern void function_three();
 5 
 6 int main()
 7 {
 8     function_two();
 9     function_three();
10     exit (EXIT_SUCCESS);
11 }
View Code
#include "a.h"
#include "b.h"

void function_two(){}
View Code
#include "b.h"
#include "c.h"

void function_three(){}
View Code

還有三個文件:a.h b.h c.hz使用shell命令建立它們。函數

touch a.h b.h c.h

第一個版本的makefilespa

 1 all:myapp
 2 
 3 # Which compiler
 4 cc = gcc
 5 
 6 # Where are include files kept
 7 INCLUDE = .
 8 
 9 # Options for development
10 CFLAGS = -g -Wall -ansi
11 
12 myapp: main.o 2.o 3.o
13     $(cc) -o myapp main.o 2.o 3.o
14 
15 main.o: main.o a.h
16     $(cc) -I$(INCLUDE) $(CFLAGS) -c main.c 
17 
18 2.o:2.c a.h b.h
19     $(cc) -I$(INCLUDE) $(CFLAGS) -c 2.c
20 
21 3.o:3.c b.h c.h
22     $(cc) -I$(INCLUDE) $(CFLAGS) -c 3.c
View Code

第二個版本的makefilecode

 1 all:myapp
 2 
 3 # Which compiler
 4 cc = gcc
 5 
 6 # Where to install
 7 INSTDIR = /usr/local/bin
 8 
 9 # Where are include files kept
10 INCLUDE = .
11 
12 # Options for development
13 CFLAGS = -g -Wall -ansi
14 
15 myapp: main.o 2.o 3.o
16     $(cc) -o myapp main.o 2.o 3.o
17 
18 main.o: main.o a.h
19     $(cc) -I$(INCLUDE) $(CFLAGS) -c main.c 
20 
21 2.o:2.c a.h b.h
22     $(cc) -I$(INCLUDE) $(CFLAGS) -c 2.c
23 
24 3.o:3.c b.h c.h
25     $(cc) -I$(INCLUDE) $(CFLAGS) -c 3.c
26 
27 clean:
28     -rm main.o 2.o 3.o
29 
30 install: myapp
31     @if [-d $(INSTDIR) ]; \
32         then \
33         cp myapp $(INSTDIR); && \
34         chmod a+x $(INSTDIR)/myapp; && \
35         chmod og-w $(INSTDIR) /myapp; && \
36         echo "Installed in $(INSTDIR)";\
37     else \
38         echo "Sorry, $(INSTDIR) does not exist";\
39     fi
View Code

第三個版本的makefile對象

all:myapp

# Which compiler
cc = gcc

# Where to install
INSTDIR = /usr/local/bin

# Where are include files kept
INCLUDE = .

# Options for development
CFLAGS = -g -Wall -ansi

myapp: main.o 2.o 3.o
    $(cc) -o myapp main.o 2.o 3.o

main.o: main.o 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

install: myapp
    @if [-d $(INSTDIR) ]; \
        then \
        cp myapp $(INSTDIR); && \
        chmod a+x $(INSTDIR)/myapp; && \
        chmod og-w $(INSTDIR) /myapp; && \
        echo "Installed in $(INSTDIR)";\
    else \
        echo "Sorry, $(INSTDIR) does not exist";\
    fi
View Code

第四個版本的makefileblog

all: myapp

# 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

# Local Libraries
MYLIB = mylib.a

myapp: main.o $(MYLIB)
    $(CC) -o myapp main.o $(MYLIB)


$(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)

install: myapp
    @if [ -d $(INSTDIR) ]; \
    then \
        cp myapp $(INSTDIR);\
        chmod a+x $(INSTDIR)/myapp;\
        chmod og-w $(INSTDIR)/myapp;\
        echo "Installed in $(INSTDIR)";\
    else \
        echo "Sorry, $(INSTDIR) does not exist";\
    fi
View Code

 就上述例子作個總結:three

  1.第一行要指定:all的對象it

  2.table所在,命令所在。即全部命令均以table鍵開頭。

  3.#鍵所在,註釋所在。

  4.$( )所在,宏定義所在。

  5.  .  點所在,即爲當前目錄。

  6. -I 表示指定目錄。

  7. 內置宏定義:

    $d:表示目錄

makefile文件結構:

  第一點:設定all:可執行文件名

  第二點:gcc -MM 主文件名

        輸出依賴關係

  第三點:而後根據依賴關係寫命令

      第一.寫生成可執行文件的命令,且後面根着的是目標文件。

      第二.寫生成目標文件的命令即編譯函數(包括主函數)文件什麼,且後面根着的是源文件

相關文章
相關標籤/搜索