1. 程式人生 > >Makefile 簡單例子1

Makefile 簡單例子1

roo makefile 測試 變量 span objects add 測試環境 rwx

測試環境

root@ubuntu16:/home/ubuntu16/code2# ll
總用量 32
drwxr-xr-x 2 root     root     4096 9月   5 23:44 ./
drwxr-xr-x 7 ubuntu16 ubuntu16 4096 9月   5 23:44 ../
-rw-r--r-- 1 root     root       68 9月   5 04:41 add.c
-rw-r--r-- 1 root     root       70 9月   5 04:51 add.h
-rw-r--r-- 1 root     root      152 9月   5 04
:59 main.c -rw-r--r-- 1 root root 120 9月 5 23:28 makefile -rw-r--r-- 1 root root 68 9月 5 04:47 sub.c -rw-r--r-- 1 root root 70 9月 5 04:52 sub.h


gcc

root@ubuntu16:/home/ubuntu16/code2# gcc main.c add.c add.h sub.c sub.h -o all
root@ubuntu16:/home/ubuntu16/code2# ll
總用量 
44 drwxr-xr-x 2 root root 4096 9月 5 23:45 ./ drwxr-xr-x 7 ubuntu16 ubuntu16 4096 9月 5 23:44 ../ -rw-r--r-- 1 root root 68 9月 5 04:41 add.c -rw-r--r-- 1 root root 70 9月 5 04:51 add.h -rwxr-xr-x 1 root root 8720 9月 5 23:45 all* -rw-r--r-- 1 root root 152 9月 5
04:59 main.c -rw-r--r-- 1 root root 120 9月 5 23:28 makefile -rw-r--r-- 1 root root 68 9月 5 04:47 sub.c -rw-r--r-- 1 root root 70 9月 5 04:52 sub.h root@ubuntu16:/home/ubuntu16/code2# ./all 12 10


Makefile 1 原始版

root@ubuntu16:/home/ubuntu16/code2# cat makefile
all : main.c add.c add.h sub.c sub.h
        cc main.c add.c add.h sub.c sub.h -o all
        
.PHONY : clean
clean :
        rm -rf *.o   
root@ubuntu16:/home/ubuntu16/code2# make all
cc main.c add.c add.h sub.c sub.h -o all
root@ubuntu16:/home/ubuntu16/code2# make clean
rm -rf *.o
root@ubuntu16:/home/ubuntu16/code2# ll
總用量 3156
drwxr-xr-x 2 root     root        4096 9月   5 23:47 ./
drwxr-xr-x 7 ubuntu16 ubuntu16    4096 9月   5 23:44 ../
-rw-r--r-- 1 root     root          68 9月   5 04:41 add.c
-rw-r--r-- 1 root     root          70 9月   5 04:51 add.h
-rwxr-xr-x 1 root     root        8720 9月   5 23:47 all*
-rw-r--r-- 1 root     root         152 9月   5 04:59 main.c
-rw-r--r-- 1 root     root         127 9月   5 23:47 makefile
-rw-r--r-- 1 root     root          68 9月   5 04:47 sub.c
-rw-r--r-- 1 root     root          70 9月   5 04:52 sub.h
root@ubuntu16:/home/ubuntu16/code2# ./all
12
10


Makefile 2 變量版

root@ubuntu16:/home/ubuntu16/code2# cat makefile
objects = main.o add.o sub.o
heads = add.h sub.h

all : $(objects) $(heads)
        cc $(objects) $(heads) -o all

add.o : add.c
        cc -c add.c

sub.o : sub.c
        cc -c sub.c

main.o : main.c
        cc -c main.c

.PHONY : clean
clean :
        -rm -rf $(objects)
root@ubuntu16:/home/ubuntu16/code2# make all
cc -c main.c
cc -c add.c
cc -c sub.c
cc main.o add.o sub.o add.h sub.h -o all
root@ubuntu16:/home/ubuntu16/code2# make clean
rm -rf main.o add.o sub.o
root@ubuntu16:/home/ubuntu16/code2# ll
總用量 44
drwxr-xr-x 2 root     root     4096 9月   5 23:54 ./
drwxr-xr-x 7 ubuntu16 ubuntu16 4096 9月   5 23:44 ../
-rw-r--r-- 1 root     root       68 9月   5 04:41 add.c
-rw-r--r-- 1 root     root       70 9月   5 04:51 add.h
-rwxr-xr-x 1 root     root     8720 9月   5 23:53 all*
-rw-r--r-- 1 root     root      152 9月   5 04:59 main.c
-rw-r--r-- 1 root     root      238 9月   5 23:53 makefile
-rw-r--r-- 1 root     root       68 9月   5 04:47 sub.c
-rw-r--r-- 1 root     root       70 9月   5 04:52 sub.h
root@ubuntu16:/home/ubuntu16/code2# ./all
12
10 


Makefile 3 優化版

root@ubuntu16:/home/ubuntu16/code2# cat makefile
objects = main.o add.o sub.o
heads = add.h sub.h

all : $(objects) $(heads)
        cc $^ -o $@

%.o : %.c
        cc -c $^

.PHONY : clean
clean :
        -rm -rf $(objects)
root@ubuntu16:/home/ubuntu16/code2# make all
cc -c main.c
cc -c add.c
cc -c sub.c
cc main.o add.o sub.o add.h sub.h -o all
root@ubuntu16:/home/ubuntu16/code2# make clean
rm -rf main.o add.o sub.o
root@ubuntu16:/home/ubuntu16/code2# ll
總用量 44
drwxr-xr-x 2 root     root     4096 9月   6 00:02 ./
drwxr-xr-x 7 ubuntu16 ubuntu16 4096 9月   5 23:44 ../
-rw-r--r-- 1 root     root       68 9月   5 04:41 add.c
-rw-r--r-- 1 root     root       70 9月   5 04:51 add.h
-rwxr-xr-x 1 root     root     8720 9月   6 00:02 all*
-rw-r--r-- 1 root     root      152 9月   5 04:59 main.c
-rw-r--r-- 1 root     root      154 9月   6 00:02 makefile
-rw-r--r-- 1 root     root       68 9月   5 04:47 sub.c
-rw-r--r-- 1 root     root       70 9月   5 04:52 sub.h
root@ubuntu16:/home/ubuntu16/code2# ./all
12
10

  新增文件添加到對應變量即可。


  條件


  函數

Makefile 簡單例子1